forked from extern/nushell
Move nu-path tests to integration tests (#4015)
* Move nu-path tests to integration tests To prevent circular dependency between nu-path and nu-test-support crates. * Fmt
This commit is contained in:
parent
c164ef5489
commit
8bcbc8eeb3
@ -1,412 +0,0 @@
|
|||||||
// use std::path::Path;
|
|
||||||
|
|
||||||
// use nu_test_support::fs::Stub::EmptyFile;
|
|
||||||
// use nu_test_support::playground::Playground;
|
|
||||||
|
|
||||||
// use nu_path::{canonicalize, canonicalize_with};
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let mut spam = dirs.test().clone();
|
|
||||||
// spam.push("spam.txt");
|
|
||||||
|
|
||||||
// let actual = canonicalize(spam).expect("Failed to canonicalize");
|
|
||||||
|
|
||||||
// assert!(actual.ends_with("spam.txt"));
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_unicode_path() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("🚒.txt")]);
|
|
||||||
|
|
||||||
// let mut spam = dirs.test().clone();
|
|
||||||
// spam.push("🚒.txt");
|
|
||||||
|
|
||||||
// let actual = canonicalize(spam).expect("Failed to canonicalize");
|
|
||||||
|
|
||||||
// assert!(actual.ends_with("🚒.txt"));
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[ignore]
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_non_utf8_path() {
|
|
||||||
// // TODO
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("spam.txt", dirs.test()).expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_unicode_path_relative_to_unicode_path_with_spaces() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("e-$ èрт🚒♞中片-j");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("e-$ èрт🚒♞中片-j/🚒.txt")]);
|
|
||||||
|
|
||||||
// let mut relative_to = dirs.test().clone();
|
|
||||||
// relative_to.push("e-$ èрт🚒♞中片-j");
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("🚒.txt", relative_to).expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("e-$ èрт🚒♞中片-j/🚒.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[ignore]
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_non_utf8_path_relative_to_non_utf8_path_with_spaces() {
|
|
||||||
// // TODO
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_absolute_path_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let mut absolute_path = dirs.test().clone();
|
|
||||||
// absolute_path.push("spam.txt");
|
|
||||||
|
|
||||||
// let actual = canonicalize_with(&absolute_path, "non/existent/directory")
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let expected = absolute_path;
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_dot() {
|
|
||||||
// let actual = canonicalize(".").expect("Failed to canonicalize");
|
|
||||||
// let expected = std::env::current_dir().expect("Could not get current directory");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_many_dots() {
|
|
||||||
// let actual = canonicalize("././/.//////./././//.///").expect("Failed to canonicalize");
|
|
||||||
// let expected = std::env::current_dir().expect("Could not get current directory");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_dot_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("./spam.txt", dirs.test()).expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_many_dots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("././/.//////./././//.////spam.txt", dirs.test())
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_double_dot() {
|
|
||||||
// let actual = canonicalize("..").expect("Failed to canonicalize");
|
|
||||||
// let cwd = std::env::current_dir().expect("Could not get current directory");
|
|
||||||
// let expected = cwd
|
|
||||||
// .parent()
|
|
||||||
// .expect("Could not get parent of current directory");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_double_dot_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual =
|
|
||||||
// canonicalize_with("foo/../spam.txt", dirs.test()).expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_many_double_dots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo/bar/baz");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("foo/bar/baz/../../../spam.txt", dirs.test())
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_ndots() {
|
|
||||||
// let actual = canonicalize("...").expect("Failed to canonicalize");
|
|
||||||
// let cwd = std::env::current_dir().expect("Could not get current directory");
|
|
||||||
// let expected = cwd
|
|
||||||
// .parent()
|
|
||||||
// .expect("Could not get parent of current directory")
|
|
||||||
// .parent()
|
|
||||||
// .expect("Could not get parent of a parent of current directory");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_3_ndots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo/bar");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual =
|
|
||||||
// canonicalize_with("foo/bar/.../spam.txt", dirs.test()).expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_many_3_ndots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo/bar/baz/eggs/sausage/bacon");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual = canonicalize_with(
|
|
||||||
// "foo/bar/baz/eggs/sausage/bacon/.../.../.../spam.txt",
|
|
||||||
// dirs.test(),
|
|
||||||
// )
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_4_ndots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo/bar/baz");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("foo/bar/baz/..../spam.txt", dirs.test())
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_many_4_ndots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo/bar/baz/eggs/sausage/bacon");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let actual = canonicalize_with(
|
|
||||||
// "foo/bar/baz/eggs/sausage/bacon/..../..../spam.txt",
|
|
||||||
// dirs.test(),
|
|
||||||
// )
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_path_with_way_too_many_dots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo/bar/baz/eggs/sausage/bacon/vikings");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
|
|
||||||
// let mut relative_to = dirs.test().clone();
|
|
||||||
// relative_to.push("foo/bar/baz/eggs/sausage/bacon/vikings");
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("././..////././...///././.....///spam.txt", relative_to)
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_unicode_path_with_way_too_many_dots_relative_to_unicode_path_with_spaces() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo/áčěéí +šř=é/baz/eggs/e-$ èрт🚒♞中片-j/bacon/öäöä öäöä");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("🚒.txt")]);
|
|
||||||
|
|
||||||
// let mut relative_to = dirs.test().clone();
|
|
||||||
// relative_to.push("foo/áčěéí +šř=é/baz/eggs/e-$ èрт🚒♞中片-j/bacon/öäöä öäöä");
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("././..////././...///././.....///🚒.txt", relative_to)
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("🚒.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_tilde() {
|
|
||||||
// let tilde_path = "~";
|
|
||||||
|
|
||||||
// let actual = canonicalize(tilde_path).expect("Failed to canonicalize");
|
|
||||||
|
|
||||||
// assert!(actual.is_absolute());
|
|
||||||
// assert!(!actual.starts_with("~"));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_tilde_relative_to() {
|
|
||||||
// let tilde_path = "~";
|
|
||||||
|
|
||||||
// let actual =
|
|
||||||
// canonicalize_with(tilde_path, "non/existent/path").expect("Failed to canonicalize");
|
|
||||||
|
|
||||||
// assert!(actual.is_absolute());
|
|
||||||
// assert!(!actual.starts_with("~"));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[cfg(not(target_arch = "wasm32"))]
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_symlink() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
// sandbox.symlink("spam.txt", "link_to_spam.txt");
|
|
||||||
|
|
||||||
// let mut symlink_path = dirs.test().clone();
|
|
||||||
// symlink_path.push("link_to_spam.txt");
|
|
||||||
|
|
||||||
// let actual = canonicalize(symlink_path).expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[cfg(not(target_arch = "wasm32"))]
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_symlink_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
// sandbox.symlink("spam.txt", "link_to_spam.txt");
|
|
||||||
|
|
||||||
// let actual =
|
|
||||||
// canonicalize_with("link_to_spam.txt", dirs.test()).expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[cfg(not(target_arch = "wasm32"))]
|
|
||||||
// #[cfg(not(windows))] // seems like Windows symlink requires existing file or dir
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_symlink_loop_relative_to_should_fail() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// // sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
// sandbox.symlink("spam.txt", "link_to_spam.txt");
|
|
||||||
// sandbox.symlink("link_to_spam.txt", "spam.txt");
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("link_to_spam.txt", dirs.test());
|
|
||||||
|
|
||||||
// assert!(actual.is_err());
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[cfg(not(target_arch = "wasm32"))]
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_nested_symlink_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
|
||||||
// sandbox.symlink("spam.txt", "link_to_spam.txt");
|
|
||||||
// sandbox.symlink("link_to_spam.txt", "link_to_link_to_spam.txt");
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("link_to_link_to_spam.txt", dirs.test())
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[cfg(not(target_arch = "wasm32"))]
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_nested_symlink_within_symlink_dir_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
|
||||||
// sandbox.mkdir("foo/bar/baz");
|
|
||||||
// sandbox.with_files(vec![EmptyFile("foo/bar/baz/spam.txt")]);
|
|
||||||
// sandbox.symlink("foo/bar/baz/spam.txt", "foo/bar/link_to_spam.txt");
|
|
||||||
// sandbox.symlink("foo/bar/link_to_spam.txt", "foo/link_to_link_to_spam.txt");
|
|
||||||
// sandbox.symlink("foo", "link_to_foo");
|
|
||||||
|
|
||||||
// let actual = canonicalize_with("link_to_foo/link_to_link_to_spam.txt", dirs.test())
|
|
||||||
// .expect("Failed to canonicalize");
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("foo/bar/baz/spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_should_fail() {
|
|
||||||
// let path = Path::new("/foo/bar/baz"); // hopefully, this path does not exist
|
|
||||||
|
|
||||||
// assert!(canonicalize(path).is_err());
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn canonicalize_with_should_fail() {
|
|
||||||
// let relative_to = "/foo";
|
|
||||||
// let path = "bar/baz";
|
|
||||||
|
|
||||||
// assert!(canonicalize_with(path, relative_to).is_err());
|
|
||||||
// }
|
|
@ -1,294 +0,0 @@
|
|||||||
// use std::path::PathBuf;
|
|
||||||
|
|
||||||
// use nu_test_support::playground::Playground;
|
|
||||||
|
|
||||||
// use nu_path::{expand_path, expand_path_with};
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_and_without_relative() {
|
|
||||||
// let relative_to = "/foo/bar";
|
|
||||||
// let path = "../..";
|
|
||||||
// let full_path = "/foo/bar/../..";
|
|
||||||
|
|
||||||
// assert_eq!(expand_path(full_path), expand_path_with(path, relative_to),);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_relative() {
|
|
||||||
// let relative_to = "/foo/bar";
|
|
||||||
// let path = "../..";
|
|
||||||
|
|
||||||
// assert_eq!(PathBuf::from("/"), expand_path_with(path, relative_to),);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_no_change() {
|
|
||||||
// let path = "/foo/bar";
|
|
||||||
|
|
||||||
// let actual = expand_path(&path);
|
|
||||||
|
|
||||||
// assert_eq!(actual, PathBuf::from(path));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_unicode_path_no_change() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let mut spam = dirs.test().clone();
|
|
||||||
// spam.push("🚒.txt");
|
|
||||||
|
|
||||||
// let actual = expand_path(spam);
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("🚒.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[ignore]
|
|
||||||
// #[test]
|
|
||||||
// fn expand_non_utf8_path() {
|
|
||||||
// // TODO
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with("spam.txt", dirs.test());
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_unicode_path_relative_to_unicode_path_with_spaces() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let mut relative_to = dirs.test().clone();
|
|
||||||
// relative_to.push("e-$ èрт🚒♞中片-j");
|
|
||||||
|
|
||||||
// let actual = expand_path_with("🚒.txt", relative_to);
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("e-$ èрт🚒♞中片-j/🚒.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[ignore]
|
|
||||||
// #[test]
|
|
||||||
// fn expand_non_utf8_path_relative_to_non_utf8_path_with_spaces() {
|
|
||||||
// // TODO
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_absolute_path_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let mut absolute_path = dirs.test().clone();
|
|
||||||
// absolute_path.push("spam.txt");
|
|
||||||
|
|
||||||
// let actual = expand_path_with(&absolute_path, "non/existent/directory");
|
|
||||||
// let expected = absolute_path;
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_dot() {
|
|
||||||
// let actual = expand_path(".");
|
|
||||||
// let expected = PathBuf::from(".");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_many_dots() {
|
|
||||||
// let actual = expand_path("././/.//////./././//.///");
|
|
||||||
// let expected = PathBuf::from("././././././.");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_dot_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with("./spam.txt", dirs.test());
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_double_dot() {
|
|
||||||
// let actual = expand_path("..");
|
|
||||||
// let expected = PathBuf::from("..");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_dot_double_dot() {
|
|
||||||
// let actual = expand_path("./..");
|
|
||||||
// let expected = PathBuf::from("./..");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_double_dot_dot() {
|
|
||||||
// let actual = expand_path("../.");
|
|
||||||
// let expected = PathBuf::from("..");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_many_dots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with("././/.//////./././//.////spam.txt", dirs.test());
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_double_dot_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with("foo/../spam.txt", dirs.test());
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_many_double_dots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with("foo/bar/baz/../../../spam.txt", dirs.test());
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_ndots() {
|
|
||||||
// let actual = expand_path("...");
|
|
||||||
// let mut expected = PathBuf::from("..");
|
|
||||||
// expected.push("..");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_normal_path_ndots() {
|
|
||||||
// let actual = expand_path("foo/bar/baz/...");
|
|
||||||
// let expected = PathBuf::from("foo");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_3_ndots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with("foo/bar/.../spam.txt", dirs.test());
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_many_3_ndots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with(
|
|
||||||
// "foo/bar/baz/eggs/sausage/bacon/.../.../.../spam.txt",
|
|
||||||
// dirs.test(),
|
|
||||||
// );
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_4_ndots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with("foo/bar/baz/..../spam.txt", dirs.test());
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_many_4_ndots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let actual = expand_path_with(
|
|
||||||
// "foo/bar/baz/eggs/sausage/bacon/..../..../spam.txt",
|
|
||||||
// dirs.test(),
|
|
||||||
// );
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_with_way_too_many_dots_relative_to() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let mut relative_to = dirs.test().clone();
|
|
||||||
// relative_to.push("foo/bar/baz/eggs/sausage/bacon/vikings");
|
|
||||||
|
|
||||||
// let actual = expand_path_with("././..////././...///././.....///spam.txt", relative_to);
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("spam.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_unicode_path_with_way_too_many_dots_relative_to_unicode_path_with_spaces() {
|
|
||||||
// Playground::setup("nu_path_test_1", |dirs, _| {
|
|
||||||
// let mut relative_to = dirs.test().clone();
|
|
||||||
// relative_to.push("foo/áčěéí +šř=é/baz/eggs/e-$ èрт🚒♞中片-j/bacon/öäöä öäöä");
|
|
||||||
|
|
||||||
// let actual = expand_path_with("././..////././...///././.....///🚒.txt", relative_to);
|
|
||||||
// let mut expected = dirs.test().clone();
|
|
||||||
// expected.push("🚒.txt");
|
|
||||||
|
|
||||||
// assert_eq!(actual, expected);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_tilde() {
|
|
||||||
// let tilde_path = "~";
|
|
||||||
|
|
||||||
// let actual = expand_path(tilde_path);
|
|
||||||
|
|
||||||
// assert!(actual.is_absolute());
|
|
||||||
// assert!(!actual.starts_with("~"));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #[test]
|
|
||||||
// fn expand_path_tilde_relative_to() {
|
|
||||||
// let tilde_path = "~";
|
|
||||||
|
|
||||||
// let actual = expand_path_with(tilde_path, "non/existent/path");
|
|
||||||
|
|
||||||
// assert!(actual.is_absolute());
|
|
||||||
// assert!(!actual.starts_with("~"));
|
|
||||||
// }
|
|
@ -1,3 +1 @@
|
|||||||
mod canonicalize;
|
|
||||||
mod expand_path;
|
|
||||||
mod util;
|
mod util;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
extern crate nu_test_support;
|
extern crate nu_test_support;
|
||||||
|
|
||||||
|
mod path;
|
||||||
mod plugins;
|
mod plugins;
|
||||||
mod shell;
|
mod shell;
|
||||||
|
412
tests/path/canonicalize.rs
Normal file
412
tests/path/canonicalize.rs
Normal file
@ -0,0 +1,412 @@
|
|||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
use nu_test_support::fs::Stub::EmptyFile;
|
||||||
|
use nu_test_support::playground::Playground;
|
||||||
|
|
||||||
|
use nu_path::{canonicalize, canonicalize_with};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let mut spam = dirs.test().clone();
|
||||||
|
spam.push("spam.txt");
|
||||||
|
|
||||||
|
let actual = canonicalize(spam).expect("Failed to canonicalize");
|
||||||
|
|
||||||
|
assert!(actual.ends_with("spam.txt"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_unicode_path() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("🚒.txt")]);
|
||||||
|
|
||||||
|
let mut spam = dirs.test().clone();
|
||||||
|
spam.push("🚒.txt");
|
||||||
|
|
||||||
|
let actual = canonicalize(spam).expect("Failed to canonicalize");
|
||||||
|
|
||||||
|
assert!(actual.ends_with("🚒.txt"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[ignore]
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_non_utf8_path() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual = canonicalize_with("spam.txt", dirs.test()).expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_unicode_path_relative_to_unicode_path_with_spaces() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("e-$ èрт🚒♞中片-j");
|
||||||
|
sandbox.with_files(vec![EmptyFile("e-$ èрт🚒♞中片-j/🚒.txt")]);
|
||||||
|
|
||||||
|
let mut relative_to = dirs.test().clone();
|
||||||
|
relative_to.push("e-$ èрт🚒♞中片-j");
|
||||||
|
|
||||||
|
let actual = canonicalize_with("🚒.txt", relative_to).expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("e-$ èрт🚒♞中片-j/🚒.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[ignore]
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_non_utf8_path_relative_to_non_utf8_path_with_spaces() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_absolute_path_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let mut absolute_path = dirs.test().clone();
|
||||||
|
absolute_path.push("spam.txt");
|
||||||
|
|
||||||
|
let actual = canonicalize_with(&absolute_path, "non/existent/directory")
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let expected = absolute_path;
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_dot() {
|
||||||
|
let actual = canonicalize(".").expect("Failed to canonicalize");
|
||||||
|
let expected = std::env::current_dir().expect("Could not get current directory");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_many_dots() {
|
||||||
|
let actual = canonicalize("././/.//////./././//.///").expect("Failed to canonicalize");
|
||||||
|
let expected = std::env::current_dir().expect("Could not get current directory");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_dot_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual = canonicalize_with("./spam.txt", dirs.test()).expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_many_dots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual = canonicalize_with("././/.//////./././//.////spam.txt", dirs.test())
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_double_dot() {
|
||||||
|
let actual = canonicalize("..").expect("Failed to canonicalize");
|
||||||
|
let cwd = std::env::current_dir().expect("Could not get current directory");
|
||||||
|
let expected = cwd
|
||||||
|
.parent()
|
||||||
|
.expect("Could not get parent of current directory");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_double_dot_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo");
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual =
|
||||||
|
canonicalize_with("foo/../spam.txt", dirs.test()).expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_many_double_dots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo/bar/baz");
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual = canonicalize_with("foo/bar/baz/../../../spam.txt", dirs.test())
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_ndots() {
|
||||||
|
let actual = canonicalize("...").expect("Failed to canonicalize");
|
||||||
|
let cwd = std::env::current_dir().expect("Could not get current directory");
|
||||||
|
let expected = cwd
|
||||||
|
.parent()
|
||||||
|
.expect("Could not get parent of current directory")
|
||||||
|
.parent()
|
||||||
|
.expect("Could not get parent of a parent of current directory");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_3_ndots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo/bar");
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual =
|
||||||
|
canonicalize_with("foo/bar/.../spam.txt", dirs.test()).expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_many_3_ndots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo/bar/baz/eggs/sausage/bacon");
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual = canonicalize_with(
|
||||||
|
"foo/bar/baz/eggs/sausage/bacon/.../.../.../spam.txt",
|
||||||
|
dirs.test(),
|
||||||
|
)
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_4_ndots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo/bar/baz");
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual = canonicalize_with("foo/bar/baz/..../spam.txt", dirs.test())
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_many_4_ndots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo/bar/baz/eggs/sausage/bacon");
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let actual = canonicalize_with(
|
||||||
|
"foo/bar/baz/eggs/sausage/bacon/..../..../spam.txt",
|
||||||
|
dirs.test(),
|
||||||
|
)
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_path_with_way_too_many_dots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo/bar/baz/eggs/sausage/bacon/vikings");
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
|
||||||
|
let mut relative_to = dirs.test().clone();
|
||||||
|
relative_to.push("foo/bar/baz/eggs/sausage/bacon/vikings");
|
||||||
|
|
||||||
|
let actual = canonicalize_with("././..////././...///././.....///spam.txt", relative_to)
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_unicode_path_with_way_too_many_dots_relative_to_unicode_path_with_spaces() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo/áčěéí +šř=é/baz/eggs/e-$ èрт🚒♞中片-j/bacon/öäöä öäöä");
|
||||||
|
sandbox.with_files(vec![EmptyFile("🚒.txt")]);
|
||||||
|
|
||||||
|
let mut relative_to = dirs.test().clone();
|
||||||
|
relative_to.push("foo/áčěéí +šř=é/baz/eggs/e-$ èрт🚒♞中片-j/bacon/öäöä öäöä");
|
||||||
|
|
||||||
|
let actual = canonicalize_with("././..////././...///././.....///🚒.txt", relative_to)
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("🚒.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_tilde() {
|
||||||
|
let tilde_path = "~";
|
||||||
|
|
||||||
|
let actual = canonicalize(tilde_path).expect("Failed to canonicalize");
|
||||||
|
|
||||||
|
assert!(actual.is_absolute());
|
||||||
|
assert!(!actual.starts_with("~"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_tilde_relative_to() {
|
||||||
|
let tilde_path = "~";
|
||||||
|
|
||||||
|
let actual =
|
||||||
|
canonicalize_with(tilde_path, "non/existent/path").expect("Failed to canonicalize");
|
||||||
|
|
||||||
|
assert!(actual.is_absolute());
|
||||||
|
assert!(!actual.starts_with("~"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_symlink() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
sandbox.symlink("spam.txt", "link_to_spam.txt");
|
||||||
|
|
||||||
|
let mut symlink_path = dirs.test().clone();
|
||||||
|
symlink_path.push("link_to_spam.txt");
|
||||||
|
|
||||||
|
let actual = canonicalize(symlink_path).expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_symlink_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
sandbox.symlink("spam.txt", "link_to_spam.txt");
|
||||||
|
|
||||||
|
let actual =
|
||||||
|
canonicalize_with("link_to_spam.txt", dirs.test()).expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
#[cfg(not(windows))] // seems like Windows symlink requires existing file or dir
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_symlink_loop_relative_to_should_fail() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
// sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
sandbox.symlink("spam.txt", "link_to_spam.txt");
|
||||||
|
sandbox.symlink("link_to_spam.txt", "spam.txt");
|
||||||
|
|
||||||
|
let actual = canonicalize_with("link_to_spam.txt", dirs.test());
|
||||||
|
|
||||||
|
assert!(actual.is_err());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_nested_symlink_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![EmptyFile("spam.txt")]);
|
||||||
|
sandbox.symlink("spam.txt", "link_to_spam.txt");
|
||||||
|
sandbox.symlink("link_to_spam.txt", "link_to_link_to_spam.txt");
|
||||||
|
|
||||||
|
let actual = canonicalize_with("link_to_link_to_spam.txt", dirs.test())
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_nested_symlink_within_symlink_dir_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, sandbox| {
|
||||||
|
sandbox.mkdir("foo/bar/baz");
|
||||||
|
sandbox.with_files(vec![EmptyFile("foo/bar/baz/spam.txt")]);
|
||||||
|
sandbox.symlink("foo/bar/baz/spam.txt", "foo/bar/link_to_spam.txt");
|
||||||
|
sandbox.symlink("foo/bar/link_to_spam.txt", "foo/link_to_link_to_spam.txt");
|
||||||
|
sandbox.symlink("foo", "link_to_foo");
|
||||||
|
|
||||||
|
let actual = canonicalize_with("link_to_foo/link_to_link_to_spam.txt", dirs.test())
|
||||||
|
.expect("Failed to canonicalize");
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("foo/bar/baz/spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_should_fail() {
|
||||||
|
let path = Path::new("/foo/bar/baz"); // hopefully, this path does not exist
|
||||||
|
|
||||||
|
assert!(canonicalize(path).is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn canonicalize_with_should_fail() {
|
||||||
|
let relative_to = "/foo";
|
||||||
|
let path = "bar/baz";
|
||||||
|
|
||||||
|
assert!(canonicalize_with(path, relative_to).is_err());
|
||||||
|
}
|
294
tests/path/expand_path.rs
Normal file
294
tests/path/expand_path.rs
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use nu_test_support::playground::Playground;
|
||||||
|
|
||||||
|
use nu_path::{expand_path, expand_path_with};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_and_without_relative() {
|
||||||
|
let relative_to = "/foo/bar";
|
||||||
|
let path = "../..";
|
||||||
|
let full_path = "/foo/bar/../..";
|
||||||
|
|
||||||
|
assert_eq!(expand_path(full_path), expand_path_with(path, relative_to),);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_relative() {
|
||||||
|
let relative_to = "/foo/bar";
|
||||||
|
let path = "../..";
|
||||||
|
|
||||||
|
assert_eq!(PathBuf::from("/"), expand_path_with(path, relative_to),);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_no_change() {
|
||||||
|
let path = "/foo/bar";
|
||||||
|
|
||||||
|
let actual = expand_path(&path);
|
||||||
|
|
||||||
|
assert_eq!(actual, PathBuf::from(path));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_unicode_path_no_change() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let mut spam = dirs.test().clone();
|
||||||
|
spam.push("🚒.txt");
|
||||||
|
|
||||||
|
let actual = expand_path(spam);
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("🚒.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[ignore]
|
||||||
|
#[test]
|
||||||
|
fn expand_non_utf8_path() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with("spam.txt", dirs.test());
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_unicode_path_relative_to_unicode_path_with_spaces() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let mut relative_to = dirs.test().clone();
|
||||||
|
relative_to.push("e-$ èрт🚒♞中片-j");
|
||||||
|
|
||||||
|
let actual = expand_path_with("🚒.txt", relative_to);
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("e-$ èрт🚒♞中片-j/🚒.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[ignore]
|
||||||
|
#[test]
|
||||||
|
fn expand_non_utf8_path_relative_to_non_utf8_path_with_spaces() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_absolute_path_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let mut absolute_path = dirs.test().clone();
|
||||||
|
absolute_path.push("spam.txt");
|
||||||
|
|
||||||
|
let actual = expand_path_with(&absolute_path, "non/existent/directory");
|
||||||
|
let expected = absolute_path;
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_dot() {
|
||||||
|
let actual = expand_path(".");
|
||||||
|
let expected = PathBuf::from(".");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_many_dots() {
|
||||||
|
let actual = expand_path("././/.//////./././//.///");
|
||||||
|
let expected = PathBuf::from("././././././.");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_dot_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with("./spam.txt", dirs.test());
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_double_dot() {
|
||||||
|
let actual = expand_path("..");
|
||||||
|
let expected = PathBuf::from("..");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_dot_double_dot() {
|
||||||
|
let actual = expand_path("./..");
|
||||||
|
let expected = PathBuf::from("./..");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_double_dot_dot() {
|
||||||
|
let actual = expand_path("../.");
|
||||||
|
let expected = PathBuf::from("..");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_many_dots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with("././/.//////./././//.////spam.txt", dirs.test());
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_double_dot_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with("foo/../spam.txt", dirs.test());
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_many_double_dots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with("foo/bar/baz/../../../spam.txt", dirs.test());
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_ndots() {
|
||||||
|
let actual = expand_path("...");
|
||||||
|
let mut expected = PathBuf::from("..");
|
||||||
|
expected.push("..");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_normal_path_ndots() {
|
||||||
|
let actual = expand_path("foo/bar/baz/...");
|
||||||
|
let expected = PathBuf::from("foo");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_3_ndots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with("foo/bar/.../spam.txt", dirs.test());
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_many_3_ndots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with(
|
||||||
|
"foo/bar/baz/eggs/sausage/bacon/.../.../.../spam.txt",
|
||||||
|
dirs.test(),
|
||||||
|
);
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_4_ndots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with("foo/bar/baz/..../spam.txt", dirs.test());
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_many_4_ndots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let actual = expand_path_with(
|
||||||
|
"foo/bar/baz/eggs/sausage/bacon/..../..../spam.txt",
|
||||||
|
dirs.test(),
|
||||||
|
);
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_with_way_too_many_dots_relative_to() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let mut relative_to = dirs.test().clone();
|
||||||
|
relative_to.push("foo/bar/baz/eggs/sausage/bacon/vikings");
|
||||||
|
|
||||||
|
let actual = expand_path_with("././..////././...///././.....///spam.txt", relative_to);
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("spam.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_unicode_path_with_way_too_many_dots_relative_to_unicode_path_with_spaces() {
|
||||||
|
Playground::setup("nu_path_test_1", |dirs, _| {
|
||||||
|
let mut relative_to = dirs.test().clone();
|
||||||
|
relative_to.push("foo/áčěéí +šř=é/baz/eggs/e-$ èрт🚒♞中片-j/bacon/öäöä öäöä");
|
||||||
|
|
||||||
|
let actual = expand_path_with("././..////././...///././.....///🚒.txt", relative_to);
|
||||||
|
let mut expected = dirs.test().clone();
|
||||||
|
expected.push("🚒.txt");
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_tilde() {
|
||||||
|
let tilde_path = "~";
|
||||||
|
|
||||||
|
let actual = expand_path(tilde_path);
|
||||||
|
|
||||||
|
assert!(actual.is_absolute());
|
||||||
|
assert!(!actual.starts_with("~"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn expand_path_tilde_relative_to() {
|
||||||
|
let tilde_path = "~";
|
||||||
|
|
||||||
|
let actual = expand_path_with(tilde_path, "non/existent/path");
|
||||||
|
|
||||||
|
assert!(actual.is_absolute());
|
||||||
|
assert!(!actual.starts_with("~"));
|
||||||
|
}
|
2
tests/path/mod.rs
Normal file
2
tests/path/mod.rs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
mod canonicalize;
|
||||||
|
mod expand_path;
|
Loading…
Reference in New Issue
Block a user