@@ -17,17 +17,37 @@ setup() {
1717
1818teardown () {
1919 remove_bats_test_dirs
20+ rm -rf " $BATS_TMPDIR /bin"
2021}
2122
2223emit_debug_info () {
2324 printf ' STATUS: %s\nOUTPUT:\n%s\n' " $status " " $output " >&2
2425}
2526
27+ create_failing_test_stub () {
28+ local cmd_name=" $1 "
29+ local cmd_path=" $BATS_TMPDIR /bin/$cmd_name "
30+
31+ if [[ ! -d " $BATS_TMPDIR /bin" ]]; then
32+ mkdir -p " $BATS_TMPDIR /bin"
33+ fi
34+ printf ' %s\n' ' printf "ARG: \"%s\"\n" "$@"' ' exit 1' > " $cmd_path "
35+ chmod 755 " $cmd_path "
36+ PATH=" $BATS_TMPDIR /bin:$PATH "
37+ hash " $cmd_name "
38+ }
39+
40+ remove_failing_test_stub () {
41+ local cmd_name=" $1 "
42+ rm -f " $BATS_TMPDIR /bin/$cmd_name "
43+ hash " $cmd_name "
44+ }
45+
2646run_assertion_test () {
2747 set " $DISABLE_BATS_SHELL_OPTIONS "
2848 setup_assertion_test " $@ "
2949 restore_bats_shell_options
30- run " $BATS_TEST_ROOTDIR /$EXPECT_ASSERTION_TEST_SCRIPT "
50+ run " $ASSERTION_TEST_ROOTDIR /$EXPECT_ASSERTION_TEST_SCRIPT "
3151}
3252
3353setup_assertion_test () {
@@ -59,7 +79,7 @@ check_failure_output() {
5979}
6080
6181__check_failure_output () {
62- local test_script=" $BATS_TEST_ROOTDIR /$EXPECT_ASSERTION_TEST_SCRIPT "
82+ local test_script=" $ASSERTION_TEST_ROOTDIR /$EXPECT_ASSERTION_TEST_SCRIPT "
6383 local assertion_line=" ${ASSERTION%% $' \n ' * } "
6484 local expected_output
6585 local result=' 0'
@@ -83,6 +103,10 @@ __check_failure_output() {
83103 return " $result "
84104}
85105
106+ check_matches () {
107+ [[ " $1 " =~ $2 ]]
108+ }
109+
86110@test " $SUITE : printf_with_error" {
87111 run printf_with_error ' foo bar baz'
88112 emit_debug_info
@@ -113,6 +137,58 @@ __check_failure_output() {
113137 [ " $output " == " $err_msg " ]
114138}
115139
140+ @test " $SUITE : fail to create assertion test script parent dir" {
141+ create_failing_test_stub ' mkdir'
142+ run __run_assertion_test_script
143+ remove_failing_test_stub ' mkdir'
144+
145+ local expected
146+ printf -v expected ' %s\n' ' ARG: "-p"' " ARG: \" ${ASSERTION_TEST_SCRIPT%/* } \" "
147+ expected+=' Failed to create parent directory for assertion test script: '
148+ expected+=" $ASSERTION_TEST_SCRIPT "
149+
150+ printf ' EXPECTED OUTPUT:\n%s\n' " $expected "
151+ emit_debug_info
152+ [ " $status " -eq ' 1' ]
153+ [ " $output " == " $expected " ]
154+ }
155+
156+ @test " $SUITE : fail to create the assertion test script" {
157+ skip_if_cannot_trigger_file_permission_failure
158+ mkdir " $ASSERTION_TEST_ROOTDIR "
159+ chmod ugo-w " $ASSERTION_TEST_ROOTDIR "
160+ run __run_assertion_test_script
161+
162+ local printf_err_pattern=" $_GO_CORE_DIR /lib/bats/assertion-test-helpers: "
163+ printf_err_pattern+=" line [1-9][0-9]*: $ASSERTION_TEST_SCRIPT : "
164+ printf_err_pattern+=' Permission denied'
165+ printf ' EXPECTED PRINTF ERROR PATTERN:\n%s\n' " $printf_err_pattern " >&2
166+
167+ local err_msg=" Failed to create assertion test script: $ASSERTION_TEST_SCRIPT "
168+ printf ' EXPECTED FAILURE MESSAGE:\n%s\n' " $err_msg " >&2
169+
170+ emit_debug_info
171+ [ " $status " -eq ' 1' ]
172+ check_matches " ${lines[0]} " " $printf_err_pattern "
173+ [ " ${lines[1]} " == " $err_msg " ]
174+ }
175+
176+ @test " $SUITE : fail to set permissions for the assertion test script" {
177+ create_failing_test_stub ' chmod'
178+ run __run_assertion_test_script
179+ remove_failing_test_stub ' chmod'
180+
181+ local expected
182+ printf -v expected ' %s\n' ' ARG: "755"' " ARG: \" $ASSERTION_TEST_SCRIPT \" "
183+ expected+=' Failed to set permissions for assertion test script: '
184+ expected+=" $ASSERTION_TEST_SCRIPT "
185+
186+ printf ' EXPECTED OUTPUT:\n%s\n' " $expected "
187+ emit_debug_info
188+ [ " $status " -eq ' 1' ]
189+ [ " $output " == " $expected " ]
190+ }
191+
116192@test " $SUITE : successful assertion" {
117193 run_assertion_test ' success'
118194 emit_debug_info
0 commit comments