mirror of
https://github.com/nushell/nushell
synced 2024-12-30 15:03:25 +00:00
51aa66fef7
# Description This fixes #12391. nushell/nushell@87c5f6e455 accidentally introduced a bug where the path was not being properly expanded according to the cwd. This makes both 'touch' and 'mkdir' use globs just like the rest of the commands to preserve tilde behavior while still expanding the paths properly. This doesn't actually expand the globs. Should it? # User-Facing Changes - Restore behavior of `mkdir`, `touch` - Help text now says they can take globs, but they won't actually expand them, maybe this should be changed # Tests + Formatting Regression tests added. # After Submitting This is severe enough and should be included in the point release.
175 lines
4.2 KiB
Rust
175 lines
4.2 KiB
Rust
use nu_test_support::fs::files_exist_at;
|
|
use nu_test_support::playground::Playground;
|
|
use nu_test_support::{nu, pipeline};
|
|
use std::path::Path;
|
|
|
|
#[test]
|
|
fn creates_directory() {
|
|
Playground::setup("mkdir_test_1", |dirs, _| {
|
|
nu!(
|
|
cwd: dirs.test(),
|
|
"mkdir my_new_directory"
|
|
);
|
|
|
|
let expected = dirs.test().join("my_new_directory");
|
|
|
|
assert!(expected.exists());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn accepts_and_creates_directories() {
|
|
Playground::setup("mkdir_test_2", |dirs, _| {
|
|
nu!(
|
|
cwd: dirs.test(),
|
|
"mkdir dir_1 dir_2 dir_3"
|
|
);
|
|
|
|
assert!(files_exist_at(
|
|
vec![Path::new("dir_1"), Path::new("dir_2"), Path::new("dir_3")],
|
|
dirs.test()
|
|
));
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn creates_intermediary_directories() {
|
|
Playground::setup("mkdir_test_3", |dirs, _| {
|
|
nu!(
|
|
cwd: dirs.test(),
|
|
"mkdir some_folder/another/deeper_one"
|
|
);
|
|
|
|
let expected = dirs.test().join("some_folder/another/deeper_one");
|
|
|
|
assert!(expected.exists());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn create_directory_two_parents_up_using_multiple_dots() {
|
|
Playground::setup("mkdir_test_4", |dirs, sandbox| {
|
|
sandbox.within("foo").mkdir("bar");
|
|
|
|
nu!(
|
|
cwd: dirs.test().join("foo/bar"),
|
|
"mkdir .../boo"
|
|
);
|
|
|
|
let expected = dirs.test().join("boo");
|
|
|
|
assert!(expected.exists());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn print_created_paths() {
|
|
Playground::setup("mkdir_test_2", |dirs, _| {
|
|
let actual = nu!(
|
|
cwd: dirs.test(),
|
|
pipeline("mkdir -v dir_1 dir_2 dir_3")
|
|
);
|
|
|
|
assert!(files_exist_at(
|
|
vec![Path::new("dir_1"), Path::new("dir_2"), Path::new("dir_3")],
|
|
dirs.test()
|
|
));
|
|
|
|
assert!(actual.out.contains("dir_1"));
|
|
assert!(actual.out.contains("dir_2"));
|
|
assert!(actual.out.contains("dir_3"));
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn creates_directory_three_dots() {
|
|
Playground::setup("mkdir_test_1", |dirs, _| {
|
|
nu!(
|
|
cwd: dirs.test(),
|
|
"mkdir test..."
|
|
);
|
|
|
|
let expected = dirs.test().join("test...");
|
|
|
|
assert!(expected.exists());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn creates_directory_four_dots() {
|
|
Playground::setup("mkdir_test_1", |dirs, _| {
|
|
nu!(
|
|
cwd: dirs.test(),
|
|
"mkdir test...."
|
|
);
|
|
|
|
let expected = dirs.test().join("test....");
|
|
|
|
assert!(expected.exists());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn creates_directory_three_dots_quotation_marks() {
|
|
Playground::setup("mkdir_test_1", |dirs, _| {
|
|
nu!(
|
|
cwd: dirs.test(),
|
|
"mkdir 'test...'"
|
|
);
|
|
|
|
let expected = dirs.test().join("test...");
|
|
|
|
assert!(expected.exists());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn respects_cwd() {
|
|
Playground::setup("mkdir_respects_cwd", |dirs, _| {
|
|
nu!(
|
|
cwd: dirs.test(),
|
|
"mkdir 'some_folder'; cd 'some_folder'; mkdir 'another/deeper_one'"
|
|
);
|
|
|
|
let expected = dirs.test().join("some_folder/another/deeper_one");
|
|
|
|
assert!(expected.exists());
|
|
})
|
|
}
|
|
|
|
#[cfg(not(windows))]
|
|
#[test]
|
|
fn mkdir_umask_permission() {
|
|
use std::{fs, os::unix::fs::PermissionsExt};
|
|
|
|
Playground::setup("mkdir_umask_permission", |dirs, _| {
|
|
nu!(
|
|
cwd: dirs.test(),
|
|
"mkdir test_umask_permission"
|
|
);
|
|
let actual = fs::metadata(dirs.test().join("test_umask_permission"))
|
|
.unwrap()
|
|
.permissions()
|
|
.mode();
|
|
|
|
assert_eq!(
|
|
actual, 0o40755,
|
|
"Most *nix systems have 0o00022 as the umask. \
|
|
So directory permission should be 0o40755 = 0o40777 & (!0o00022)"
|
|
);
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn mkdir_with_tilde() {
|
|
Playground::setup("mkdir with tilde", |dirs, _| {
|
|
let actual = nu!(cwd: dirs.test(), "mkdir '~tilde'");
|
|
assert!(actual.err.is_empty());
|
|
assert!(files_exist_at(vec![Path::new("~tilde")], dirs.test()));
|
|
|
|
// pass variable
|
|
let actual = nu!(cwd: dirs.test(), "let f = '~tilde2'; mkdir $f");
|
|
assert!(actual.err.is_empty());
|
|
assert!(files_exist_at(vec![Path::new("~tilde2")], dirs.test()));
|
|
})
|
|
}
|