diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml index 124c7e311e..710bd4f2b9 100644 --- a/.github/workflows/CICD.yml +++ b/.github/workflows/CICD.yml @@ -96,7 +96,7 @@ jobs: uses: actions-rs/cargo@v1 with: command: test - args: --locked --release -- --ignored + args: --locked --release --test assets -- --ignored - name: Syntax highlighting regression test run: tests/syntax-tests/regression_test.sh - name: List of languages @@ -106,6 +106,32 @@ jobs: - name: Test custom assets run: tests/syntax-tests/test_custom_assets.sh + test_with_system_config: + name: Run tests with system wide configuration + runs-on: ubuntu-20.04 + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Prepare environment variables + run: | + echo "BAT_SYSTEM_CONFIG_PREFIX=$GITHUB_WORKSPACE/tests/examples/system_config" >> $GITHUB_ENV + - name: Install Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + default: true + profile: minimal + - name: Build and install bat + uses: actions-rs/cargo@v1 + with: + command: install + args: --locked --path . + - name: Run unit tests + uses: actions-rs/cargo@v1 + with: + command: test + args: --locked --test system_wide_config -- --ignored + documentation: name: Documentation runs-on: ubuntu-20.04 diff --git a/tests/examples/bat.conf b/tests/examples/bat.conf index 614ab40da6..4756cd8eac 100644 --- a/tests/examples/bat.conf +++ b/tests/examples/bat.conf @@ -1,5 +1,5 @@ # Make sure that the pager gets executed --paging=always -# Output a dummy message for the integration test. +# Output a dummy message for the integration test and system wide config test. --pager="echo dummy-pager-from-config" diff --git a/tests/examples/system_config/bat/config b/tests/examples/system_config/bat/config new file mode 100644 index 0000000000..0750e8f55f --- /dev/null +++ b/tests/examples/system_config/bat/config @@ -0,0 +1,5 @@ +# Make sure that the pager gets executed +--paging=always + +# Output a dummy message for the integration test. +--pager="echo dummy-pager-from-system-config" diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 5648f252cd..5e6d5981c8 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -3,7 +3,6 @@ use predicates::boolean::PredicateBooleanExt; use predicates::{prelude::predicate, str::PredicateStrExt}; use serial_test::serial; use std::path::Path; -use std::process::Command; use std::str::from_utf8; use tempfile::tempdir; @@ -28,41 +27,14 @@ mod unix { use unix::*; mod utils; +use utils::command::{bat, bat_with_config}; + +#[cfg(unix)] +use utils::command::bat_raw_command; use utils::mocked_pagers; const EXAMPLES_DIR: &str = "tests/examples"; -fn bat_raw_command_with_config() -> Command { - let mut cmd = Command::cargo_bin("bat").unwrap(); - cmd.current_dir("tests/examples"); - cmd.env_remove("BAT_CACHE_PATH"); - cmd.env_remove("BAT_CONFIG_DIR"); - cmd.env_remove("BAT_CONFIG_PATH"); - cmd.env_remove("BAT_OPTS"); - cmd.env_remove("BAT_PAGER"); - cmd.env_remove("BAT_STYLE"); - cmd.env_remove("BAT_TABS"); - cmd.env_remove("BAT_THEME"); - cmd.env_remove("COLORTERM"); - cmd.env_remove("NO_COLOR"); - cmd.env_remove("PAGER"); - cmd -} - -fn bat_raw_command() -> Command { - let mut cmd = bat_raw_command_with_config(); - cmd.arg("--no-config"); - cmd -} - -fn bat_with_config() -> assert_cmd::Command { - assert_cmd::Command::from_std(bat_raw_command_with_config()) -} - -fn bat() -> assert_cmd::Command { - assert_cmd::Command::from_std(bat_raw_command()) -} - #[test] fn basic() { bat() diff --git a/tests/system_wide_config.rs b/tests/system_wide_config.rs new file mode 100644 index 0000000000..7c2a9972df --- /dev/null +++ b/tests/system_wide_config.rs @@ -0,0 +1,29 @@ +use predicates::{prelude::predicate, str::PredicateStrExt}; + +mod utils; +use utils::command::bat_with_config; + +// This test is ignored, as it needs a special system wide config put into place. +// In order to run this tests, use `cargo test --test system_wide_config -- --ignored` +#[test] +#[ignore] +fn use_systemwide_config() { + bat_with_config() + .arg("test.txt") + .assert() + .success() + .stdout(predicate::eq("dummy-pager-from-system-config\n").normalize()); +} + +// This test is ignored, as it needs a special system wide config put into place +// In order to run this tests, use `cargo test --test system_wide_config -- --ignored` +#[test] +#[ignore] +fn config_overrides_system_config() { + bat_with_config() + .env("BAT_CONFIG_PATH", "bat.conf") + .arg("test.txt") + .assert() + .success() + .stdout(predicate::eq("dummy-pager-from-config\n").normalize()); +} diff --git a/tests/utils/command.rs b/tests/utils/command.rs new file mode 100644 index 0000000000..64cb0baff8 --- /dev/null +++ b/tests/utils/command.rs @@ -0,0 +1,36 @@ +use assert_cmd::cargo::CommandCargoExt; +use std::process::Command; + +pub fn bat_raw_command_with_config() -> Command { + let mut cmd = Command::cargo_bin("bat").unwrap(); + cmd.current_dir("tests/examples"); + cmd.env_remove("BAT_CACHE_PATH"); + cmd.env_remove("BAT_CONFIG_DIR"); + cmd.env_remove("BAT_CONFIG_PATH"); + cmd.env_remove("BAT_OPTS"); + cmd.env_remove("BAT_PAGER"); + cmd.env_remove("BAT_STYLE"); + cmd.env_remove("BAT_TABS"); + cmd.env_remove("BAT_THEME"); + cmd.env_remove("COLORTERM"); + cmd.env_remove("NO_COLOR"); + cmd.env_remove("PAGER"); + cmd +} + +#[cfg(test)] +pub fn bat_raw_command() -> Command { + let mut cmd = bat_raw_command_with_config(); + cmd.arg("--no-config"); + cmd +} + +#[cfg(test)] +pub fn bat_with_config() -> assert_cmd::Command { + assert_cmd::Command::from_std(bat_raw_command_with_config()) +} + +#[cfg(test)] +pub fn bat() -> assert_cmd::Command { + assert_cmd::Command::from_std(bat_raw_command()) +} diff --git a/tests/utils/mod.rs b/tests/utils/mod.rs index 724efc5bfa..ca1a747a98 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -1 +1,2 @@ +pub mod command; pub mod mocked_pagers;