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'.
@ChemaclassChemaclass 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.

@ChemaclassChemaclass 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:mainJul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
ContributorAuthor

@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

@tricktron

Copy link
Copy Markdown
ContributorAuthor

Thanks @Chemaclass. I opened the Nixpkgs PR in NixOS/nixpkgs#547099

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

Labels

bugSomething 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

@tricktron@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix: Test failures on Bash 5.3 macOS (nix-shell) by tricktron · Pull Request #913 · TypedDevs/bashunit · GitHub
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'.
@ChemaclassChemaclass 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.

@ChemaclassChemaclass 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:mainJul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
ContributorAuthor

@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

@tricktron

Copy link
Copy Markdown
ContributorAuthor

Thanks @Chemaclass. I opened the Nixpkgs PR in NixOS/nixpkgs#547099

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

Labels

bugSomething 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

@tricktron@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix: Test failures on Bash 5.3 macOS (nix-shell) by tricktron · Pull Request #913 · TypedDevs/bashunit · GitHub
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'.
@ChemaclassChemaclass 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.

@ChemaclassChemaclass 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:mainJul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
ContributorAuthor

@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

@tricktron

Copy link
Copy Markdown
ContributorAuthor

Thanks @Chemaclass. I opened the Nixpkgs PR in NixOS/nixpkgs#547099

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

Labels

bugSomething 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

@tricktron@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix: Test failures on Bash 5.3 macOS (nix-shell) by tricktron · Pull Request #913 · TypedDevs/bashunit · GitHub
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'.
@ChemaclassChemaclass 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.

@ChemaclassChemaclass 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:mainJul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
ContributorAuthor

@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

@tricktron

Copy link
Copy Markdown
ContributorAuthor

Thanks @Chemaclass. I opened the Nixpkgs PR in NixOS/nixpkgs#547099

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

Labels

bugSomething 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

@tricktron@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' fix: Test failures on Bash 5.3 macOS (nix-shell) by tricktron · Pull Request #913 · TypedDevs/bashunit · GitHub
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'.
@ChemaclassChemaclass 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.

@ChemaclassChemaclass 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:mainJul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
ContributorAuthor

@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

@tricktron

Copy link
Copy Markdown
ContributorAuthor

Thanks @Chemaclass. I opened the Nixpkgs PR in NixOS/nixpkgs#547099

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

Labels

bugSomething 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

@tricktron@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix: Test failures on Bash 5.3 macOS (nix-shell) by tricktron · Pull Request #913 · TypedDevs/bashunit · GitHub
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'.
@ChemaclassChemaclass 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.

@ChemaclassChemaclass 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:mainJul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
ContributorAuthor

@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

@tricktron

Copy link
Copy Markdown
ContributorAuthor

Thanks @Chemaclass. I opened the Nixpkgs PR in NixOS/nixpkgs#547099

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

Labels

bugSomething 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

@tricktron@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix: Test failures on Bash 5.3 macOS (nix-shell) by tricktron · Pull Request #913 · TypedDevs/bashunit · GitHub
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'.
@ChemaclassChemaclass 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.

@ChemaclassChemaclass 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:mainJul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
ContributorAuthor

@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

@tricktron

Copy link
Copy Markdown
ContributorAuthor

Thanks @Chemaclass. I opened the Nixpkgs PR in NixOS/nixpkgs#547099

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

Labels

bugSomething 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

@tricktron@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); fix: Test failures on Bash 5.3 macOS (nix-shell) by tricktron · Pull Request #913 · TypedDevs/bashunit · GitHub
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'.
@ChemaclassChemaclass 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.

@ChemaclassChemaclass 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:mainJul 28, 2026
37 checks passed
@tricktron

Copy link
Copy Markdown
ContributorAuthor

@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

@tricktron

Copy link
Copy Markdown
ContributorAuthor

Thanks @Chemaclass. I opened the Nixpkgs PR in NixOS/nixpkgs#547099

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

Labels

bugSomething 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

@tricktron@Chemaclass