Skip to content

fix: Test failures on Bash 5.3 macOS (nix-shell) - #913

Merged
Chemaclass merged 7 commits into
TypedDevs:mainfrom
tricktron:fix-nix-darwin-test-failures
Jul 28, 2026
Merged

fix: Test failures on Bash 5.3 macOS (nix-shell)#913
Chemaclass merged 7 commits into
TypedDevs:mainfrom
tricktron:fix-nix-darwin-test-failures

Conversation

@tricktron

Copy link
Copy Markdown
Contributor

Background

Closes #912.

I first stumbled on this issue in NixOS/nixpkgs#543029.

If merged we can update and simplify the bashunit derivation in nixpkgs and all tests will pass even in the sandbox on darwin.

Changes

  • render_diff didn't bypass external diff tools. Anyone with e.g. difftastic got broken output (2 failures)
  • shell_time() and one acceptance test used LC_ALL=C inside $(), which segfaults on Bash 5.3 macOS. I removed since it was unnecessary in both places (5 failures).

Checklist

  • I updated the CHANGELOG.md to reflect the new feature or fix
  • I updated the documentation to reflect the changes

Users with diff.external configured (e.g. difftastic) get broken
diff output because git delegates to the external tool, which ignores
--word-diff and produces a different format.
Bash 5.3 on macOS segfaults (exit 139) when LC_ALL is set inside
a command substitution that reads the magic EPOCHREALTIME variable.

Besides, force the console_results_test to use the perl clock path on
Bash 5+.
Bash 5.3 on macOS segfaults when LC_ALL=C is used as a temporary
env prefix inside $() command substitutions. The LC_ALL=C LANG=C
was unnecessary here: the asserted strings ('failed', 'Error')
come from bashunit's own output, not locale-dependent messages.
/tmp is not writable inside the nix sandbox on darwin, causing all init
tests to fail with 'Permission denied'.
@Chemaclass Chemaclass added the bug Something isn't working label Jul 28, 2026
The JUnit time reads still used a bare LC_ALL=C awk prefix, the same
form that segfaults inside $() on Bash 5.3.9 macOS. C is required here
(it keeps awk's radix a dot in the XML), so pass it through env instead
of removing it.
Nothing guarded either fix: no CI job runs Bash 5.3 macOS or sets
diff.external, so both regressions could return unnoticed.

@Chemaclass Chemaclass left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice catch, and thanks for the clear reproducer in #912. That made both bugs easy to confirm. You got here first, so I'm merging yours and closing my #914.

I pushed a few small things on top so you don't have to round-trip:

  • src/reports.sh had the same LC_ALL=C prefix in its two JUnit time reads, so --report-junit would still crash on Bash 5.3. There the C locale is actually doing something (it keeps awk printing 1.234 and not 1,234), so I used env LC_ALL=C awk instead of removing it.
  • A test for each fix. CI can't catch these on its own: no runner has diff.external set, and none runs Bash 5.3 on macOS. Both tests fail without your changes.
  • A short comment next to each removal so nobody puts the prefix back, plus the CHANGELOG entries moved to the top of Fixed with the (#912) link.

Dropping LC_ALL=C LANG=C from the acceptance test was the right call. Those assertions only look at bashunit's own output, and the Spanish/Brazilian/Japanese jobs run the acceptance tests too, so they'd have told us otherwise.

All green here on macOS Bash 3.2 (make test, --parallel, make sa, make lint). Thanks again!

@Chemaclass
Chemaclass merged commit 9a9087a into TypedDevs:main Jul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
Contributor Author

@Chemaclass Wow, you are fast. Thank you. Let me know when you have cut a new release with tag, then I start bumping and simplifying the nix derivation.

@Chemaclass

Copy link
Copy Markdown
Member

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 test failures on Bash 5.3 macOS (nix-shell)

2 participants