Skip to content

Commit

Permalink
Add test for systemwide config file support
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Patrick Pichler committed Nov 28, 2021
1 parent 8afc9a8 commit 6d69225
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 35 deletions.
28 changes: 27 additions & 1 deletion .github/workflows/CICD.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,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
Expand All @@ -97,6 +97,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
Expand Down
2 changes: 1 addition & 1 deletion tests/examples/bat.conf
Original file line number Diff line number Diff line change
@@ -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"
5 changes: 5 additions & 0 deletions tests/examples/system_config/bat/config
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.
--pager="echo dummy-pager-from-system-config"
34 changes: 1 addition & 33 deletions tests/integration_tests.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
use assert_cmd::cargo::CommandCargoExt;
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;

Expand All @@ -27,41 +25,11 @@ mod unix {
use unix::*;

mod utils;
use utils::command::{bat, bat_raw_command, bat_with_config};
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()
Expand Down
29 changes: 29 additions & 0 deletions tests/system_wide_config.rs
Original file line number Diff line number Diff line change
@@ -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());
}
33 changes: 33 additions & 0 deletions tests/utils/command.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
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
}

pub fn bat_raw_command() -> Command {
let mut cmd = bat_raw_command_with_config();
cmd.arg("--no-config");
cmd
}

pub fn bat_with_config() -> assert_cmd::Command {
assert_cmd::Command::from_std(bat_raw_command_with_config())
}

pub fn bat() -> assert_cmd::Command {
assert_cmd::Command::from_std(bat_raw_command())
}
1 change: 1 addition & 0 deletions tests/utils/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
pub mod command;
pub mod mocked_pagers;

0 comments on commit 6d69225

Please sign in to comment.