Adds the missing 'assert_file_not_contains' function Closes https://github.com/bats-core/bats-file/issues/60
diff --git a/src/file.bash b/src/file.bash index 355c580..28192b5 100644 --- a/src/file.bash +++ b/src/file.bash
@@ -548,6 +548,31 @@ | fail fi } +# Fail and display path of the file (or directory) if it does contain a string. +# This function is the logical complement of `assert_file_contains'. +# +# Globals: +# BATSLIB_FILE_PATH_REM +# BATSLIB_FILE_PATH_ADD +# Arguments: +# $1 - path +# $2 - regex +# Returns: +# 0 - file does not contain regex +# 1 - otherwise +# Outputs: +# STDERR - details, on failure +assert_file_not_contains() { + local -r file="$1" + local -r regex="$2" + if grep -q "$regex" "$file"; then + local -r rem="${BATSLIB_FILE_PATH_REM-}" + local -r add="${BATSLIB_FILE_PATH_ADD-}" + batslib_print_kv_single 4 'path' "${file/$rem/$add}" 'regex' "$regex" \ + | batslib_decorate 'file contains regex' \ + | fail + fi +} # Fail and display path of the file (or directory) if it is not empty. # This function is the logical complement of `assert_file_not_empty'. #
diff --git a/test/67-assert-10-assert_file_not_contains.bats b/test/67-assert-10-assert_file_not_contains.bats new file mode 100644 index 0000000..f495a7f --- /dev/null +++ b/test/67-assert-10-assert_file_not_contains.bats
@@ -0,0 +1,43 @@ +#!/usr/bin/env bats +load 'test_helper' +fixtures 'empty' +# Correctness +@test 'assert_file_not_contains() <file>: returns 0 and displays content if <file> does not match string' { + local -r file="${TEST_FIXTURE_ROOT}/dir/non-empty-file" + run assert_file_not_contains "$file" "XXX" + [ "$status" -eq 0 ] +} +@test 'assert_file_not_contains() <file>: returns 1 and displays content if <file> does match string' { + local -r file="${TEST_FIXTURE_ROOT}/dir/non-empty-file" + run assert_file_not_contains "$file" "Not empty" + [ "$status" -eq 1 ] +} +# Transforming path +@test 'assert_file_not_contains() <file>: replace prefix of displayed path' { + local -r BATSLIB_FILE_PATH_REM="#${TEST_FIXTURE_ROOT}" + local -r BATSLIB_FILE_PATH_ADD='..' + run assert_file_not_contains "${TEST_FIXTURE_ROOT}/dir/non-empty-file" "Not empty" + [ "$status" -eq 1 ] +} +@test 'assert_file_not_contains() <file>: replace suffix of displayed path' { + local -r BATSLIB_FILE_PATH_REM='%non-empty-file' + local -r BATSLIB_FILE_PATH_ADD='..' + run assert_file_not_contains "${TEST_FIXTURE_ROOT}/dir/non-empty-file" "Not empty" + [ "$status" -eq 1 ] +} +@test 'assert_file_not_contains() <file>: replace infix of displayed path' { + local -r BATSLIB_FILE_PATH_REM='dir' + local -r BATSLIB_FILE_PATH_ADD='..' + run assert_file_not_contains "${TEST_FIXTURE_ROOT}/dir/non-empty-file" "Not empty" + [ "$status" -eq 1 ] +} +@test 'assert_file_not_contains() <file>: show missing regex in case of failure' { + local -r file="${TEST_FIXTURE_ROOT}/dir/non-empty-file" + run assert_file_not_contains "$file" "Not empty" + [ "$status" -eq 1 ] + [ "${#lines[@]}" -eq 4 ] + [ "${lines[0]}" == '-- file does not contain regex --' ] + [ "${lines[1]}" == "path : $file" ] + [ "${lines[2]}" == "regex : Not empty" ] + [ "${lines[3]}" == '--' ] +}