mirror of
https://github.com/sharkdp/fd.git
synced 2024-09-28 21:11:30 +02:00
Add tests for global ignore file
This commit is contained in:
parent
7c86c7d585
commit
fd707b42c2
@ -20,6 +20,9 @@ pub struct TestEnv {
|
|||||||
|
|
||||||
/// Normalize each line by sorting the whitespace-separated words
|
/// Normalize each line by sorting the whitespace-separated words
|
||||||
normalize_line: bool,
|
normalize_line: bool,
|
||||||
|
|
||||||
|
/// Temporary directory for storing test config (global ignore file)
|
||||||
|
config_dir: Option<TempDir>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create the working directory and the test files.
|
/// Create the working directory and the test files.
|
||||||
@ -59,6 +62,16 @@ fn create_working_directory(
|
|||||||
Ok(temp_dir)
|
Ok(temp_dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn create_config_directory_with_global_ignore(ignore_file_content: &str) -> io::Result<TempDir> {
|
||||||
|
let config_dir = tempfile::Builder::new().prefix("fd-config").tempdir()?;
|
||||||
|
let fd_dir = config_dir.path().join("fd");
|
||||||
|
fs::create_dir(&fd_dir)?;
|
||||||
|
let mut ignore_file = fs::File::create(fd_dir.join("ignore"))?;
|
||||||
|
ignore_file.write_all(ignore_file_content.as_bytes())?;
|
||||||
|
|
||||||
|
Ok(config_dir)
|
||||||
|
}
|
||||||
|
|
||||||
/// Find the *fd* executable.
|
/// Find the *fd* executable.
|
||||||
fn find_fd_exe() -> PathBuf {
|
fn find_fd_exe() -> PathBuf {
|
||||||
// Tests exe is in target/debug/deps, the *fd* exe is in target/debug
|
// Tests exe is in target/debug/deps, the *fd* exe is in target/debug
|
||||||
@ -150,6 +163,7 @@ impl TestEnv {
|
|||||||
temp_dir,
|
temp_dir,
|
||||||
fd_exe,
|
fd_exe,
|
||||||
normalize_line: false,
|
normalize_line: false,
|
||||||
|
config_dir: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +172,16 @@ impl TestEnv {
|
|||||||
temp_dir: self.temp_dir,
|
temp_dir: self.temp_dir,
|
||||||
fd_exe: self.fd_exe,
|
fd_exe: self.fd_exe,
|
||||||
normalize_line: normalize,
|
normalize_line: normalize,
|
||||||
|
config_dir: self.config_dir,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn global_ignore_file(self, content: &str) -> TestEnv {
|
||||||
|
let config_dir =
|
||||||
|
create_config_directory_with_global_ignore(content).expect("config directory");
|
||||||
|
TestEnv {
|
||||||
|
config_dir: Some(config_dir),
|
||||||
|
..self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,13 +230,8 @@ impl TestEnv {
|
|||||||
path: P,
|
path: P,
|
||||||
args: &[&str],
|
args: &[&str],
|
||||||
) -> process::Output {
|
) -> process::Output {
|
||||||
// Setup *fd* command.
|
|
||||||
let mut cmd = process::Command::new(&self.fd_exe);
|
|
||||||
cmd.current_dir(self.temp_dir.path().join(path));
|
|
||||||
cmd.arg("--no-global-ignore-file").args(args);
|
|
||||||
|
|
||||||
// Run *fd*.
|
// Run *fd*.
|
||||||
let output = cmd.output().expect("fd output");
|
let output = self.run_command(path.as_ref(), args);
|
||||||
|
|
||||||
// Check for exit status.
|
// Check for exit status.
|
||||||
if !output.status.success() {
|
if !output.status.success() {
|
||||||
@ -288,6 +307,21 @@ impl TestEnv {
|
|||||||
self.assert_error_subdirectory(".", args, Some(expected))
|
self.assert_error_subdirectory(".", args, Some(expected))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn run_command(&self, path: &Path, args: &[&str]) -> process::Output {
|
||||||
|
// Setup *fd* command.
|
||||||
|
let mut cmd = process::Command::new(&self.fd_exe);
|
||||||
|
cmd.current_dir(self.temp_dir.path().join(path));
|
||||||
|
if let Some(config_dir) = &self.config_dir {
|
||||||
|
cmd.env("XDG_CONFIG_HOME", config_dir.path());
|
||||||
|
} else {
|
||||||
|
cmd.arg("--no-global-ignore-file");
|
||||||
|
}
|
||||||
|
cmd.args(args);
|
||||||
|
|
||||||
|
// Run *fd*.
|
||||||
|
cmd.output().expect("fd output")
|
||||||
|
}
|
||||||
|
|
||||||
/// Assert that calling *fd* in the specified path under the root working directory,
|
/// Assert that calling *fd* in the specified path under the root working directory,
|
||||||
/// and with the specified arguments produces an error with the expected message.
|
/// and with the specified arguments produces an error with the expected message.
|
||||||
fn assert_error_subdirectory<P: AsRef<Path>>(
|
fn assert_error_subdirectory<P: AsRef<Path>>(
|
||||||
@ -296,13 +330,7 @@ impl TestEnv {
|
|||||||
args: &[&str],
|
args: &[&str],
|
||||||
expected: Option<&str>,
|
expected: Option<&str>,
|
||||||
) -> process::ExitStatus {
|
) -> process::ExitStatus {
|
||||||
// Setup *fd* command.
|
let output = self.run_command(path.as_ref(), args);
|
||||||
let mut cmd = process::Command::new(&self.fd_exe);
|
|
||||||
cmd.current_dir(self.temp_dir.path().join(path));
|
|
||||||
cmd.arg("--no-global-ignore-file").args(args);
|
|
||||||
|
|
||||||
// Run *fd*.
|
|
||||||
let output = cmd.output().expect("fd output");
|
|
||||||
|
|
||||||
if let Some(expected) = expected {
|
if let Some(expected) = expected {
|
||||||
// Normalize both expected and actual output.
|
// Normalize both expected and actual output.
|
||||||
|
@ -879,6 +879,45 @@ fn test_no_ignore_aliases() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_global_ignore() {
|
||||||
|
let te = TestEnv::new(DEFAULT_DIRS, DEFAULT_FILES).global_ignore_file("one");
|
||||||
|
te.assert_output(
|
||||||
|
&[],
|
||||||
|
"a.foo
|
||||||
|
e1 e2
|
||||||
|
symlink",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test_case("--unrestricted", ".hidden.foo
|
||||||
|
a.foo
|
||||||
|
fdignored.foo
|
||||||
|
gitignored.foo
|
||||||
|
one/b.foo
|
||||||
|
one/two/c.foo
|
||||||
|
one/two/C.Foo2
|
||||||
|
one/two/three/d.foo
|
||||||
|
one/two/three/directory_foo/"; "unrestricted")]
|
||||||
|
#[test_case("--no-ignore", "a.foo
|
||||||
|
fdignored.foo
|
||||||
|
gitignored.foo
|
||||||
|
one/b.foo
|
||||||
|
one/two/c.foo
|
||||||
|
one/two/C.Foo2
|
||||||
|
one/two/three/d.foo
|
||||||
|
one/two/three/directory_foo/"; "no-ignore")]
|
||||||
|
#[test_case("--no-global-ignore-file", "a.foo
|
||||||
|
one/b.foo
|
||||||
|
one/two/c.foo
|
||||||
|
one/two/C.Foo2
|
||||||
|
one/two/three/d.foo
|
||||||
|
one/two/three/directory_foo/"; "no-global-ignore-file")]
|
||||||
|
fn test_no_global_ignore(flag: &str, expected_output: &str) {
|
||||||
|
let te = TestEnv::new(DEFAULT_DIRS, DEFAULT_FILES).global_ignore_file("one");
|
||||||
|
te.assert_output(&[flag, "foo"], expected_output);
|
||||||
|
}
|
||||||
|
|
||||||
/// Symlinks (--follow)
|
/// Symlinks (--follow)
|
||||||
#[test]
|
#[test]
|
||||||
fn test_follow() {
|
fn test_follow() {
|
||||||
|
Loading…
Reference in New Issue
Block a user