Release 0.43.0
Release 0.43.0 reports whether your tests enter loops. It also reduces the extra processes started by checks, called assertions, and by tests running at the same time. Existing checks keep their behavior, so you do not need to rewrite tests.
Find loops your tests never enter
The report now includes while, until, for, and select loops. Each loop body counts as one possible path through the code, called a branch. That path is marked reached when the loop runs at least once. A test with only empty input can leave the loop body untested even when the surrounding function runs successfully (#855).
bashunit tests/ --coverage --coverage-paths src/For a function that processes a list, include both an empty-list case and a case with at least one item. The first checks what happens when the loop is skipped; the second reaches its body. The report now makes that missing test case visible. It records whether the loop was entered, rather than treating each pass through the loop as a separate path.
Fewer processes for the same checks
Text checks such as assert_contains, assert_matches, and checks of the start and end of a value no longer start an extra shell process to join their arguments. Checks of arrays, dates, durations, JSON, files, and folders also find their failure labels without starting a shell process to capture a value. The labels and comparisons stay the same (#844).
Tests running at the same time now name result files using a sequence number assigned by the test run. This replaces creating and renaming a temporary file for every test. Tests supplied with different sets of input values also avoid the chain of commands previously used to make those inputs safe for filenames. Results are still collected in the same way (#851).
bashunit --parallel tests/These changes reduce repeated work as the number of checks and tests grows. They add no new options and do not change how you run the tests.
See the full changelog for 0.43.0 on GitHub.