From 6b660ef63a94154c0e0ce05ae898b3283c090c4b Mon Sep 17 00:00:00 2001 From: Patrick Pichler Date: Thu, 28 Oct 2021 13:52:59 +0200 Subject: [PATCH] Add test for systemwide config file support There is now a new stage in the CICD workflow present, which will build `bat` with the `BAT_SYSTEM_CONFIG_PREFIX` set to load the config file from `/tests/examples/system_config/bat/config`, plus a basic set of tests, to ensure the feature is working as expected. By default the tests are set to ignored, as they need special setup before they can be run. --- .github/workflows/CICD.yml | 28 ++++++++++++++++++- tests/examples/bat.conf | 2 +- tests/examples/system_config/bat/config | 5 ++++ tests/integration_tests.rs | 36 +++---------------------- tests/system_wide_config.rs | 29 ++++++++++++++++++++ tests/utils/command.rs | 36 +++++++++++++++++++++++++ tests/utils/mod.rs | 1 + 7 files changed, 103 insertions(+), 34 deletions(-) create mode 100644 tests/examples/system_config/bat/config create mode 100644 tests/system_wide_config.rs create mode 100644 tests/utils/command.rs diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml index 124c7e31..710bd4f2 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 614ab40d..4756cd8e 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 00000000..0750e8f5 --- /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 67df34f8..3baac02b 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 00000000..7c2a9972 --- /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 00000000..64cb0baf --- /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 724efc5b..ca1a747a 100644 --- a/tests/utils/mod.rs +++ b/tests/utils/mod.rs @@ -1 +1,2 @@ +pub mod command; pub mod mocked_pagers;