Skip to content

Commit 2a49418

Browse files
committed
chore: optimize runner
calculate assertions with regex instead of subshells for each number
1 parent a7961ca commit 2a49418

2 files changed

Lines changed: 25 additions & 38 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
- Add `assert_not_called`
1111
- Improve `find_total_tests` performance
1212
- Added `assert_match_snapshot_ignore_colors`
13+
- Optimize `runner::parse_result_sync`
1314

1415
## [0.19.1](https://github.com/TypedDevs/bashunit/compare/0.19.0...0.19.1) - 2025-05-23
1516

src/runner.sh

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,11 @@ function runner::functions_for_script() {
5454

5555
# Filter the names down to the ones defined in the script, sort them by line number
5656
shopt -s extdebug
57-
for f in $all_fn_names; do
58-
declare -F "$f" | grep "$script"
59-
done | sort -k2 -n | awk '{print $1}'
57+
# shellcheck disable=SC2086
58+
declare -F $all_fn_names |
59+
awk -v s="$script" '$3 == s {print $1" " $2}' |
60+
sort -k2 -n |
61+
awk '{print $1}'
6062
shopt -u extdebug
6163
}
6264

@@ -349,41 +351,25 @@ function runner::parse_result_sync() {
349351
local fn_name=$1
350352
local execution_result=$2
351353

352-
local assertions_failed=$(\
353-
echo "$execution_result" |\
354-
tail -n 1 |\
355-
sed -E -e 's/.*##ASSERTIONS_FAILED=([0-9]*)##.*/\1/g'\
356-
)
357-
358-
local assertions_passed=$(\
359-
echo "$execution_result" |\
360-
tail -n 1 |\
361-
sed -E -e 's/.*##ASSERTIONS_PASSED=([0-9]*)##.*/\1/g'\
362-
)
363-
364-
local assertions_skipped=$(\
365-
echo "$execution_result" |\
366-
tail -n 1 |\
367-
sed -E -e 's/.*##ASSERTIONS_SKIPPED=([0-9]*)##.*/\1/g'\
368-
)
369-
370-
local assertions_incomplete=$(\
371-
echo "$execution_result" |\
372-
tail -n 1 |\
373-
sed -E -e 's/.*##ASSERTIONS_INCOMPLETE=([0-9]*)##.*/\1/g'\
374-
)
375-
376-
local assertions_snapshot=$(\
377-
echo "$execution_result" |\
378-
tail -n 1 |\
379-
sed -E -e 's/.*##ASSERTIONS_SNAPSHOT=([0-9]*)##.*/\1/g'\
380-
)
381-
382-
local test_exit_code=$(\
383-
echo "$execution_result" |\
384-
tail -n 1 |\
385-
sed -E -e 's/.*##TEST_EXIT_CODE=([0-9]*)##.*/\1/g'\
386-
)
354+
local result_line
355+
result_line=$(echo "$execution_result" | tail -n 1)
356+
357+
local regex='ASSERTIONS_FAILED=([0-9]*)##ASSERTIONS_PASSED=([0-9]*)##ASSERTIONS_SKIPPED=([0-9]*)##ASSERTIONS_INCOMPLETE=([0-9]*)##ASSERTIONS_SNAPSHOT=([0-9]*)##TEST_EXIT_CODE=([0-9]*)'
358+
if [[ $result_line =~ $regex ]]; then
359+
local assertions_failed="${BASH_REMATCH[1]}"
360+
local assertions_passed="${BASH_REMATCH[2]}"
361+
local assertions_skipped="${BASH_REMATCH[3]}"
362+
local assertions_incomplete="${BASH_REMATCH[4]}"
363+
local assertions_snapshot="${BASH_REMATCH[5]}"
364+
local test_exit_code="${BASH_REMATCH[6]}"
365+
else
366+
local assertions_failed=0
367+
local assertions_passed=0
368+
local assertions_skipped=0
369+
local assertions_incomplete=0
370+
local assertions_snapshot=0
371+
local test_exit_code=0
372+
fi
387373

388374
log "debug" "[SYNC]" "fn_name:$fn_name" "execution_result:$execution_result"
389375

0 commit comments

Comments
 (0)