From ef86038e7a2e236c47129f52ed474b5ff1b4ee20 Mon Sep 17 00:00:00 2001 From: Chemaclass Date: Thu, 29 Oct 2026 23:10:15 +0100 Subject: [PATCH] fix(assert): write snapshot flag values literally Closes #1402 --- CHANGELOG.md | 2 ++ src/assert/snapshot.sh | 4 ++-- tests/unit/assert/snapshot_test.sh | 24 ++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 067c59326..87befcb4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ ### Fixed +- Snapshots record and update literal `-n`, `-e`, `-E` and combined echo flag values correctly (#1402) + - `init` writes the bootstrap path and a custom tests directory to `.env` quoted, so a directory with a space runs afterwards instead of breaking every next run (#1411) - Failure source context stays inside a one-line test instead of listing the next function's assertions (#1420) - Parallel runs count tests under relative hidden paths and keep their results separate from matching visible paths (#1393) diff --git a/src/assert/snapshot.sh b/src/assert/snapshot.sh index 906c87c31..cdf92f8de 100644 --- a/src/assert/snapshot.sh +++ b/src/assert/snapshot.sh @@ -402,7 +402,7 @@ function bashunit::snapshot::initialize() { local path="$1" local content="$2" mkdir -p "$(dirname "$path")" - echo "$content" >"$path" + printf '%s\n' "$content" >"$path" bashunit::state::add_assertions_snapshot } @@ -431,7 +431,7 @@ function bashunit::snapshot::update() { ;; esac - echo "$actual" >"$path" + printf '%s\n' "$actual" >"$path" bashunit::state::add_assertions_snapshot return 0 } diff --git a/tests/unit/assert/snapshot_test.sh b/tests/unit/assert/snapshot_test.sh index 724a5093a..1eac6d28e 100644 --- a/tests/unit/assert/snapshot_test.sh +++ b/tests/unit/assert/snapshot_test.sh @@ -363,3 +363,27 @@ function test_regex_metacharacters_around_a_placeholder_are_literal() { assert_empty "$(assert_match_snapshot 'cost $5.00 (x) Z' "$snapshot")" assert_not_empty "$(assert_match_snapshot 'cost 999 (x) Z' "$snapshot")" } + +function provide_snapshot_option_values() { + bashunit::data_set -n + bashunit::data_set -e + bashunit::data_set -E + bashunit::data_set -neE +} + +# @data_provider provide_snapshot_option_values +function test_snapshot_records_option_values_and_matches_again() { + local path="$(bashunit::temp_dir)/flag.snapshot" + assert_match_snapshot "$1" "$path" + assert_same "$1" "$(<"$path")" + assert_empty "$(assert_match_snapshot "$1" "$path")" +} + +# @data_provider provide_snapshot_option_values +function test_snapshot_update_writes_option_values() { + local path="$(bashunit::temp_dir)/flag.snapshot" + printf 'previous\n' >"$path" + BASHUNIT_SNAPSHOT_UPDATE=true bashunit::snapshot::update "$path" "$1" + assert_same "$1" "$(<"$path")" + assert_empty "$(assert_match_snapshot "$1" "$path")" +}