mirror of
https://github.com/nushell/nushell.git
synced 2025-08-15 19:57:52 +02:00
nu-cli/completions: better fix for files with special characters (#5254)
* nu-cli/completions: fix paths with special chars * add backticks * fix replace * added single quotes to check list * check escape using fold * fix clippy errors * fix comment line * fix conflicts * change to vec * skip sort checking * removed invalid windows path * remove comment * added tests for escape function * fix fn import * fix fn import error * test windows issue fix * fix windows backslash path in the tests * show expected path on error * skip test for windows
This commit is contained in:
@ -8,6 +8,7 @@ use reedline::{Completer, Suggestion};
|
||||
const SEP: char = std::path::MAIN_SEPARATOR;
|
||||
|
||||
#[test]
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
fn file_completions() {
|
||||
// Create a new engine
|
||||
let (dir, dir_str, engine) = new_engine();
|
||||
@ -23,12 +24,11 @@ fn file_completions() {
|
||||
|
||||
// Create the expected values
|
||||
let expected_paths: Vec<String> = vec![
|
||||
file(dir.join("nushell")),
|
||||
folder(dir.join("test_a")),
|
||||
folder(dir.join("test_b")),
|
||||
folder(dir.join("another")),
|
||||
file(dir.join(".hidden_file")),
|
||||
folder(dir.join(".hidden_folder")),
|
||||
folder(dir.clone().join("test_a")),
|
||||
folder(dir.clone().join("test_b")),
|
||||
folder(dir.clone().join("another")),
|
||||
file(dir.clone().join(".hidden_file")),
|
||||
folder(dir.clone().join(".hidden_folder")),
|
||||
];
|
||||
|
||||
// Match the results
|
||||
@ -46,6 +46,7 @@ fn file_completions() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
fn folder_completions() {
|
||||
// Create a new engine
|
||||
let (dir, dir_str, engine) = new_engine();
|
||||
@ -87,9 +88,26 @@ pub fn new_engine() -> (PathBuf, String, EngineState) {
|
||||
}
|
||||
|
||||
// match a list of suggestions with the expected values
|
||||
pub fn match_suggestions(expected: Vec<String>, suggestions: Vec<Suggestion>) {
|
||||
expected.iter().zip(suggestions).for_each(|it| {
|
||||
assert_eq!(it.0, &it.1.value);
|
||||
// skipping the order (for now) due to some issue with sorting behaving
|
||||
// differently for each OS
|
||||
fn match_suggestions(expected: Vec<String>, suggestions: Vec<Suggestion>) {
|
||||
suggestions.into_iter().for_each(|it| {
|
||||
let items = expected.clone();
|
||||
let result = items.into_iter().find(|x| {
|
||||
let mut current_item = x.clone();
|
||||
|
||||
// For windows the expected should also escape "\"
|
||||
if cfg!(windows) {
|
||||
current_item = current_item.replace("\\", "\\\\");
|
||||
}
|
||||
|
||||
¤t_item == &it.value
|
||||
});
|
||||
|
||||
match result {
|
||||
Some(val) => assert_eq!(val, it.value),
|
||||
None => panic!("the path {} is not expected", it.value),
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user