Release 0.48.0
Release 0.48.0 makes coverage reports faster and explains more clearly why a run failed. It also fixes cases where running tests at the same time could report success while silently missing tests.
Faster coverage and HTML reports
Coverage reports show which lines of code your tests ran. bashunit now does less repeated work when reading those results. In measurements of this repository, a coverage run fell from 16.2 seconds to 2.9 seconds, while creating an HTML report for 128 files fell from 58.7 seconds to 3.1 seconds (#1092, #1117). Other projects will have different timings.
The HTML test report now includes a Failures section with each failed test's name, file, line and message. It also counts risky tests (which may not have checked anything) and flaky tests (which passed only after a retry). Special characters in test titles are written safely so they cannot become HTML code (#1251, #1252, #1249). Coverage reports also handle filenames containing |, < or &.
On Bash 3.x, --verbose explains that coverage cannot count code run in a separate shell process. On supported newer shells, coverage now keeps the results from commands run inside $(...) instead of losing them (#1112, #1101).
Missing tests become visible failures
Repeated test-function names are detected when tests run at the same time. A data provider, the function that supplies inputs for a test, now produces a named error if it is missing or returns no inputs. The test no longer disappears behind “No tests found” (#1147, #1145).
A setup file that fails to load now makes the run fail wherever that file is needed. Trying to write a report to a folder gives a clear error. Asking for a speed measurement where there are no benchmark functions also fails. Automated checks can now catch these problems instead of treating them as successful runs.
Reports that other tools can read
JUnit reports now contain valid XML. Stopping a parallel run after a failure no longer mixes terminal messages into reports read by other tools. TAP, another test-report format, handles # in names so # SKIP cannot accidentally make a test look skipped (#1239, #1243, #1119).
assert_exec can now check a command that is expected to fail even with --strict. Comparisons preserve literal backslashes, and a supplied test input ending in a backslash reaches the test unchanged. The docs also explain lowercase test_ names, passing installer options by position, and giving each set of test inputs its own saved expected output.
See the full changelog for 0.48.0 on GitHub.