Correction bug multiple dots mkdir and touch (#8486)

This commit is contained in:
Thomas Coratger 2023-04-05 19:22:56 +02:00 committed by GitHub
parent 1134c2f16c
commit 01e5ba01f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 84 additions and 2 deletions

View File

@ -84,3 +84,45 @@ fn print_created_paths() {
assert!(actual.err.contains("dir_3")); assert!(actual.err.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());
})
}

View File

@ -122,3 +122,42 @@ fn not_create_file_if_it_not_exists() {
assert!(!path.exists()); assert!(!path.exists());
}) })
} }
#[test]
fn creates_file_three_dots() {
Playground::setup("create_test_1", |dirs, _sandbox| {
nu!(
cwd: dirs.test(),
"touch file..."
);
let path = dirs.test().join("file...");
assert!(path.exists());
})
}
#[test]
fn creates_file_four_dots() {
Playground::setup("create_test_1", |dirs, _sandbox| {
nu!(
cwd: dirs.test(),
"touch file...."
);
let path = dirs.test().join("file....");
assert!(path.exists());
})
}
#[test]
fn creates_file_four_dots_quotation_marks() {
Playground::setup("create_test_1", |dirs, _sandbox| {
nu!(
cwd: dirs.test(),
"touch 'file....'"
);
let path = dirs.test().join("file....");
assert!(path.exists());
})
}

View File

@ -33,6 +33,7 @@ pub fn expand_ndots(path: impl AsRef<Path>) -> PathBuf {
// find if we need to expand any >2 dot paths and early exit if not // find if we need to expand any >2 dot paths and early exit if not
let mut dots_count = 0u8; let mut dots_count = 0u8;
let mut not_separator_before_dot = false;
let ndots_present = { let ndots_present = {
for chr in path_str.chars() { for chr in path_str.chars() {
if chr == '.' { if chr == '.' {
@ -42,7 +43,7 @@ pub fn expand_ndots(path: impl AsRef<Path>) -> PathBuf {
// this path component had >2 dots // this path component had >2 dots
break; break;
} }
not_separator_before_dot = !(is_separator(chr) || chr.is_whitespace());
dots_count = 0; dots_count = 0;
} }
} }
@ -50,7 +51,7 @@ pub fn expand_ndots(path: impl AsRef<Path>) -> PathBuf {
dots_count > 2 dots_count > 2
}; };
if !ndots_present { if !ndots_present || not_separator_before_dot {
return path.as_ref().into(); return path.as_ref().into();
} }