Skip to content

Commit

Permalink
#2592: Fixes unit tests dependent on echo on windows (#2602)
Browse files Browse the repository at this point in the history
Co-authored-by: Boy van Duuren <boy.van.duuren@rabobank.nl>
  • Loading branch information
boyvanduuren and rbbcd authored Sep 8, 2023
1 parent f49278c commit d6e11b5
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 84 deletions.
8 changes: 7 additions & 1 deletion .github/workflows/CICD.yml
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,13 @@ jobs:
- name: Run tests
shell: bash
run: $BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}
run: |
if [[ ${{ matrix.job.os }} = windows-* ]]
then
powershell.exe -command "$BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}"
else
$BUILD_CMD test --locked --target=${{ matrix.job.target }} ${{ steps.test-options.outputs.CARGO_TEST_OPTIONS}}
fi
- name: Run bat
shell: bash
Expand Down
5 changes: 5 additions & 0 deletions tests/examples/bat-windows.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Make sure that the pager gets executed
--paging=always

# Output a dummy message for the integration test and system wide config test.
--pager="echo.bat dummy-pager-from-config"
205 changes: 126 additions & 79 deletions tests/integration_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ use utils::mocked_pagers;

const EXAMPLES_DIR: &str = "tests/examples";

fn get_config() -> &'static str {
if cfg!(windows) {
"bat-windows.conf"
} else {
"bat.conf"
}
}

#[test]
fn basic() {
bat()
Expand Down Expand Up @@ -589,37 +597,49 @@ fn do_not_exit_directory() {
}

#[test]
#[serial]
fn pager_basic() {
bat()
.env("PAGER", "echo pager-output")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("pager-output\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat()
.env("PAGER", mocked_pagers::from("echo pager-output"))
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("pager-output\n").normalize());
});
}

#[test]
#[serial]
fn pager_basic_arg() {
bat()
.arg("--pager=echo pager-output")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("pager-output\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat()
.arg(format!(
"--pager={}",
mocked_pagers::from("echo pager-output")
))
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("pager-output\n").normalize());
});
}

#[test]
#[serial]
fn pager_overwrite() {
bat()
.env("PAGER", "echo other-pager")
.env("BAT_PAGER", "echo pager-output")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("pager-output\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat()
.env("PAGER", mocked_pagers::from("echo other-pager"))
.env("BAT_PAGER", mocked_pagers::from("echo pager-output"))
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("pager-output\n").normalize());
});
}

#[test]
Expand All @@ -635,55 +655,73 @@ fn pager_disable() {
}

#[test]
#[serial]
fn pager_arg_override_env_withconfig() {
bat_with_config()
.env("BAT_CONFIG_PATH", "bat.conf")
.env("PAGER", "echo another-pager")
.env("BAT_PAGER", "echo other-pager")
.arg("--pager=echo pager-output")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("pager-output\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat_with_config()
.env("BAT_CONFIG_PATH", get_config())
.env("PAGER", mocked_pagers::from("echo another-pager"))
.env("BAT_PAGER", mocked_pagers::from("echo other-pager"))
.arg(format!(
"--pager={}",
mocked_pagers::from("echo pager-output")
))
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("pager-output\n").normalize());
});
}

#[test]
#[serial]
fn pager_arg_override_env_noconfig() {
bat()
.env("PAGER", "echo another-pager")
.env("BAT_PAGER", "echo other-pager")
.arg("--pager=echo pager-output")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("pager-output\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat()
.env("PAGER", mocked_pagers::from("echo another-pager"))
.env("BAT_PAGER", mocked_pagers::from("echo other-pager"))
.arg(format!(
"--pager={}",
mocked_pagers::from("echo pager-output")
))
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("pager-output\n").normalize());
});
}

#[test]
#[serial]
fn pager_env_bat_pager_override_config() {
bat_with_config()
.env("BAT_CONFIG_PATH", "bat.conf")
.env("PAGER", "echo other-pager")
.env("BAT_PAGER", "echo pager-output")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("pager-output\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat_with_config()
.env("BAT_CONFIG_PATH", get_config())
.env("PAGER", mocked_pagers::from("echo other-pager"))
.env("BAT_PAGER", mocked_pagers::from("echo pager-output"))
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("pager-output\n").normalize());
});
}

#[test]
#[serial]
fn pager_env_pager_nooverride_config() {
bat_with_config()
.env("BAT_CONFIG_PATH", "bat.conf")
.env("PAGER", "echo other-pager")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("dummy-pager-from-config\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat_with_config()
.env("BAT_CONFIG_PATH", get_config())
.env("PAGER", mocked_pagers::from("echo other-pager"))
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("dummy-pager-from-config\n").normalize());
});
}

#[test]
Expand Down Expand Up @@ -809,15 +847,18 @@ fn alias_pager_disable() {
}

#[test]
#[serial]
fn alias_pager_disable_long_overrides_short() {
bat()
.env("PAGER", "echo pager-output")
.arg("-P")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("pager-output\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat()
.env("PAGER", mocked_pagers::from("echo pager-output"))
.arg("-P")
.arg("--paging=always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("pager-output\n").normalize());
});
}

#[test]
Expand All @@ -844,14 +885,17 @@ fn pager_failed_to_parse() {
}

#[test]
#[serial]
fn env_var_bat_paging() {
bat()
.env("BAT_PAGER", "echo pager-output")
.env("BAT_PAGING", "always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("pager-output\n"));
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat()
.env("BAT_PAGER", mocked_pagers::from("echo pager-output"))
.env("BAT_PAGING", "always")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("pager-output\n").normalize());
});
}

#[test]
Expand Down Expand Up @@ -912,13 +956,16 @@ fn config_location_from_bat_config_dir_variable() {
}

#[test]
#[serial]
fn config_read_arguments_from_file() {
bat_with_config()
.env("BAT_CONFIG_PATH", "bat.conf")
.arg("test.txt")
.assert()
.success()
.stdout(predicate::eq("dummy-pager-from-config\n").normalize());
mocked_pagers::with_mocked_versions_of_more_and_most_in_path(|| {
bat_with_config()
.env("BAT_CONFIG_PATH", get_config())
.arg("test.txt")
.assert()
.success()
.stdout(predicate::str::contains("dummy-pager-from-config\n").normalize());
});
}

#[cfg(unix)]
Expand Down
1 change: 1 addition & 0 deletions tests/mocked-pagers/echo.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ECHO %*
18 changes: 14 additions & 4 deletions tests/utils/mocked_pagers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,16 @@ fn get_mocked_pagers_dir() -> PathBuf {
/// On Unix: 'most' -> 'most'
/// On Windows: 'most' -> 'most.bat'
pub fn from(base: &str) -> String {
if cfg!(windows) {
format!("{}.bat", base)
} else {
String::from(base)
let mut cmd_and_args = shell_words::split(base).unwrap();
let suffix = if cfg!(windows) { ".bat" } else { "" };
let mut out_cmd = format!("{}{}", cmd_and_args.first().unwrap(), suffix);

if (cmd_and_args.len() > 1) {
out_cmd.push(' ');
out_cmd.push_str(cmd_and_args[1..].to_vec().join(" ").as_str());
}

out_cmd
}

/// Prepends a directory to the PATH environment variable
Expand Down Expand Up @@ -62,6 +67,11 @@ pub fn with_mocked_versions_of_more_and_most_in_path(actual_test: fn()) {
.assert()
.success()
.stdout(predicate::str::contains("I am most"));
Command::new(from("echo"))
.arg("foobar")
.assert()
.success()
.stdout(predicate::str::contains("foobar"));

// Now run the actual test
actual_test();
Expand Down

0 comments on commit d6e11b5

Please sign in to comment.