@@ -102,7 +102,8 @@ function bashunit::runner::load_test_files() {
102102 local spinner_pid=$!
103103 bashunit::parallel::aggregate_test_results " $TEMP_DIR_PARALLEL_TEST_SUITE "
104104 # Kill the spinner once the aggregation finishes
105- disown " $spinner_pid " && kill " $spinner_pid " & > /dev/null
105+ disown " $spinner_pid " 2> /dev/null || true
106+ kill " $spinner_pid " 2> /dev/null || true
106107 printf " \r \r" # Clear the spinner output
107108 local script_id
108109 for script_id in " ${scripts_ids[@]+" ${scripts_ids[@]} " } " ; do
@@ -342,6 +343,12 @@ function bashunit::runner::call_test_functions() {
342343
343344 bashunit::helper::check_duplicate_functions " $script " || true
344345
346+ # Check if test file opts out of test-level parallelism
347+ local allow_test_parallel=true
348+ if grep -q " ^# bashunit: no-parallel-tests" " $script " 2> /dev/null; then
349+ allow_test_parallel=false
350+ fi
351+
345352 local -a provider_data=()
346353 local provider_data_count=0
347354 local -a parsed_data=()
@@ -362,8 +369,12 @@ function bashunit::runner::call_test_functions() {
362369 done <<< " $(bashunit::helper::get_provider_data " $fn_name " " $script " )"
363370
364371 # No data provider found
365- if [[ " $provider_data_count " -eq 0 ]]; then
366- bashunit::runner::run_test " $script " " $fn_name "
372+ if [ " $provider_data_count " -eq 0 ]; then
373+ if bashunit::parallel::is_enabled && [ " $allow_test_parallel " = true ]; then
374+ bashunit::runner::run_test " $script " " $fn_name " &
375+ else
376+ bashunit::runner::run_test " $script " " $fn_name "
377+ fi
367378 unset -v fn_name
368379 continue
369380 fi
@@ -375,14 +386,23 @@ function bashunit::runner::call_test_functions() {
375386 parsed_data_count=0
376387 local line
377388 while IFS= read -r line; do
378- [[ -z " $line " ] ] && continue
389+ [ -z " $line " ] && continue
379390 parsed_data[parsed_data_count]=" $( bashunit::helper::decode_base64 " ${line} " ) "
380391 parsed_data_count=$(( parsed_data_count + 1 ))
381392 done <<< " $(bashunit::runner::parse_data_provider_args " $data " )"
382- bashunit::runner::run_test " $script " " $fn_name " ${parsed_data+" ${parsed_data[@]} " }
393+ if bashunit::parallel::is_enabled && [ " $allow_test_parallel " = true ]; then
394+ bashunit::runner::run_test " $script " " $fn_name " ${parsed_data+" ${parsed_data[@]} " } &
395+ else
396+ bashunit::runner::run_test " $script " " $fn_name " ${parsed_data+" ${parsed_data[@]} " }
397+ fi
383398 done
384399 unset -v fn_name
385400 done
401+
402+ # Wait for all parallel tests within this file to complete
403+ if bashunit::parallel::is_enabled && [ " $allow_test_parallel " = true ]; then
404+ wait
405+ fi
386406}
387407
388408function bashunit::runner::call_bench_functions() {
0 commit comments