Skip to content

feat(assert): assert_true and assert_false accept a command with arguments - #999

Merged
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic
Aug 8, 2026
Merged

feat(assert): assert_true and assert_false accept a command with arguments#999
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Related #994

assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope

The argument used to be run as a single command word. Anything with arguments was looked up as a command whose name contained spaces — so the natural spelling was the broken one, and the workaround was an eval prefix nobody had documented until #993.

💡 Changes

Arguments are now passed through as arguments. Nothing is re-parsed, so a path containing a space survives — which the eval form cannot promise.

Additive by construction. With exactly one argument the old path runs unchanged, including the literal true/false/0/1 fast path and the eval prefix. Every existing call means what it meant. The literal check is guarded on argument count, because assert_true true --version is the command named true, not the boolean.

The exit code is captured with || exit_code=$? rather than a bare call — under --strict a failing command as a statement would abort the whole test.

🚫 Why not split the string instead

Splitting the single-argument form on whitespace would silently change what an existing string means, break arguments that legitimately contain spaces, and make the assertion sometimes-word-splitting. Passing real arguments needs no re-parsing at all.

✅ Verification

All eight shapes checked: literal true, literal 0, bare function, eval prefix, variadic, variadic with a space in a path, variadic assert_false, and true --version where the literal and the command collide.

5 new tests, RED first. make sa · make lint · bash build.sh bin -v✅ Build verified ✅ · 1713 sequential / 1672 parallel-simple-strict.

…ments
Closes#994.
assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope
The argument used to be run as a single command word. Anything with arguments
was looked up as a command whose name contained spaces, so the natural spelling
was the broken one and the workaround was an `eval ` prefix nobody had
documented until #993.
Arguments are now passed through as arguments. Nothing is re-parsed, so a path
containing a space survives -- which the eval form cannot promise.
Additive by construction: with exactly one argument the old path runs unchanged,
including the literal `true`/`false`/`0`/`1` fast path and the `eval ` prefix. So
every existing call means what it meant. The literal check is guarded on the
argument count, because `assert_true true --version` is the command named true,
not the boolean.
The exit code is captured with `|| exit_code=$?` rather than a bare call: under
--strict a failing command as a statement would abort the whole test.
The alternative of splitting the single-argument string on whitespace was
rejected. It would silently change what an existing string means, break
arguments that legitimately contain spaces, and make the assertion
sometimes-word-splitting. Passing real arguments needs no re-parsing at all.
Verified across all eight shapes: literal true, literal 0, bare function, eval
prefix, variadic, variadic with a space in a path, variadic assert_false, and
`true --version` where the literal and the command collide.
1713 sequential / 1672 parallel; baseline + 5, RED first.
@ChemaclassChemaclass added the enhancement New feature or request label Aug 8, 2026
@ChemaclassChemaclass self-assigned this Aug 8, 2026
@Chemaclass
Chemaclass merged commit 2061310 into mainAug 8, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the feat/994-assert-true-variadic branch August 8, 2026 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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" + '
feat(assert): assert_true and assert_false accept a command with arguments by Chemaclass · Pull Request #999 · TypedDevs/bashunit · GitHub
Skip to content

feat(assert): assert_true and assert_false accept a command with arguments - #999

Merged
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic
Aug 8, 2026
Merged

feat(assert): assert_true and assert_false accept a command with arguments#999
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Related #994

assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope

The argument used to be run as a single command word. Anything with arguments was looked up as a command whose name contained spaces — so the natural spelling was the broken one, and the workaround was an eval prefix nobody had documented until #993.

💡 Changes

Arguments are now passed through as arguments. Nothing is re-parsed, so a path containing a space survives — which the eval form cannot promise.

Additive by construction. With exactly one argument the old path runs unchanged, including the literal true/false/0/1 fast path and the eval prefix. Every existing call means what it meant. The literal check is guarded on argument count, because assert_true true --version is the command named true, not the boolean.

The exit code is captured with || exit_code=$? rather than a bare call — under --strict a failing command as a statement would abort the whole test.

🚫 Why not split the string instead

Splitting the single-argument form on whitespace would silently change what an existing string means, break arguments that legitimately contain spaces, and make the assertion sometimes-word-splitting. Passing real arguments needs no re-parsing at all.

✅ Verification

All eight shapes checked: literal true, literal 0, bare function, eval prefix, variadic, variadic with a space in a path, variadic assert_false, and true --version where the literal and the command collide.

5 new tests, RED first. make sa · make lint · bash build.sh bin -v✅ Build verified ✅ · 1713 sequential / 1672 parallel-simple-strict.

…ments
Closes#994.
assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope
The argument used to be run as a single command word. Anything with arguments
was looked up as a command whose name contained spaces, so the natural spelling
was the broken one and the workaround was an `eval ` prefix nobody had
documented until #993.
Arguments are now passed through as arguments. Nothing is re-parsed, so a path
containing a space survives -- which the eval form cannot promise.
Additive by construction: with exactly one argument the old path runs unchanged,
including the literal `true`/`false`/`0`/`1` fast path and the `eval ` prefix. So
every existing call means what it meant. The literal check is guarded on the
argument count, because `assert_true true --version` is the command named true,
not the boolean.
The exit code is captured with `|| exit_code=$?` rather than a bare call: under
--strict a failing command as a statement would abort the whole test.
The alternative of splitting the single-argument string on whitespace was
rejected. It would silently change what an existing string means, break
arguments that legitimately contain spaces, and make the assertion
sometimes-word-splitting. Passing real arguments needs no re-parsing at all.
Verified across all eight shapes: literal true, literal 0, bare function, eval
prefix, variadic, variadic with a space in a path, variadic assert_false, and
`true --version` where the literal and the command collide.
1713 sequential / 1672 parallel; baseline + 5, RED first.
@ChemaclassChemaclass added the enhancement New feature or request label Aug 8, 2026
@ChemaclassChemaclass self-assigned this Aug 8, 2026
@Chemaclass
Chemaclass merged commit 2061310 into mainAug 8, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the feat/994-assert-true-variadic branch August 8, 2026 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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('^' + ".*" + ' feat(assert): assert_true and assert_false accept a command with arguments by Chemaclass · Pull Request #999 · TypedDevs/bashunit · GitHub
Skip to content

feat(assert): assert_true and assert_false accept a command with arguments - #999

Merged
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic
Aug 8, 2026
Merged

feat(assert): assert_true and assert_false accept a command with arguments#999
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Related #994

assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope

The argument used to be run as a single command word. Anything with arguments was looked up as a command whose name contained spaces — so the natural spelling was the broken one, and the workaround was an eval prefix nobody had documented until #993.

💡 Changes

Arguments are now passed through as arguments. Nothing is re-parsed, so a path containing a space survives — which the eval form cannot promise.

Additive by construction. With exactly one argument the old path runs unchanged, including the literal true/false/0/1 fast path and the eval prefix. Every existing call means what it meant. The literal check is guarded on argument count, because assert_true true --version is the command named true, not the boolean.

The exit code is captured with || exit_code=$? rather than a bare call — under --strict a failing command as a statement would abort the whole test.

🚫 Why not split the string instead

Splitting the single-argument form on whitespace would silently change what an existing string means, break arguments that legitimately contain spaces, and make the assertion sometimes-word-splitting. Passing real arguments needs no re-parsing at all.

✅ Verification

All eight shapes checked: literal true, literal 0, bare function, eval prefix, variadic, variadic with a space in a path, variadic assert_false, and true --version where the literal and the command collide.

5 new tests, RED first. make sa · make lint · bash build.sh bin -v✅ Build verified ✅ · 1713 sequential / 1672 parallel-simple-strict.

…ments
Closes#994.
assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope
The argument used to be run as a single command word. Anything with arguments
was looked up as a command whose name contained spaces, so the natural spelling
was the broken one and the workaround was an `eval ` prefix nobody had
documented until #993.
Arguments are now passed through as arguments. Nothing is re-parsed, so a path
containing a space survives -- which the eval form cannot promise.
Additive by construction: with exactly one argument the old path runs unchanged,
including the literal `true`/`false`/`0`/`1` fast path and the `eval ` prefix. So
every existing call means what it meant. The literal check is guarded on the
argument count, because `assert_true true --version` is the command named true,
not the boolean.
The exit code is captured with `|| exit_code=$?` rather than a bare call: under
--strict a failing command as a statement would abort the whole test.
The alternative of splitting the single-argument string on whitespace was
rejected. It would silently change what an existing string means, break
arguments that legitimately contain spaces, and make the assertion
sometimes-word-splitting. Passing real arguments needs no re-parsing at all.
Verified across all eight shapes: literal true, literal 0, bare function, eval
prefix, variadic, variadic with a space in a path, variadic assert_false, and
`true --version` where the literal and the command collide.
1713 sequential / 1672 parallel; baseline + 5, RED first.
@ChemaclassChemaclass added the enhancement New feature or request label Aug 8, 2026
@ChemaclassChemaclass self-assigned this Aug 8, 2026
@Chemaclass
Chemaclass merged commit 2061310 into mainAug 8, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the feat/994-assert-true-variadic branch August 8, 2026 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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('^' + ".*" + ' feat(assert): assert_true and assert_false accept a command with arguments by Chemaclass · Pull Request #999 · TypedDevs/bashunit · GitHub
Skip to content

feat(assert): assert_true and assert_false accept a command with arguments - #999

Merged
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic
Aug 8, 2026
Merged

feat(assert): assert_true and assert_false accept a command with arguments#999
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Related #994

assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope

The argument used to be run as a single command word. Anything with arguments was looked up as a command whose name contained spaces — so the natural spelling was the broken one, and the workaround was an eval prefix nobody had documented until #993.

💡 Changes

Arguments are now passed through as arguments. Nothing is re-parsed, so a path containing a space survives — which the eval form cannot promise.

Additive by construction. With exactly one argument the old path runs unchanged, including the literal true/false/0/1 fast path and the eval prefix. Every existing call means what it meant. The literal check is guarded on argument count, because assert_true true --version is the command named true, not the boolean.

The exit code is captured with || exit_code=$? rather than a bare call — under --strict a failing command as a statement would abort the whole test.

🚫 Why not split the string instead

Splitting the single-argument form on whitespace would silently change what an existing string means, break arguments that legitimately contain spaces, and make the assertion sometimes-word-splitting. Passing real arguments needs no re-parsing at all.

✅ Verification

All eight shapes checked: literal true, literal 0, bare function, eval prefix, variadic, variadic with a space in a path, variadic assert_false, and true --version where the literal and the command collide.

5 new tests, RED first. make sa · make lint · bash build.sh bin -v✅ Build verified ✅ · 1713 sequential / 1672 parallel-simple-strict.

…ments
Closes#994.
assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope
The argument used to be run as a single command word. Anything with arguments
was looked up as a command whose name contained spaces, so the natural spelling
was the broken one and the workaround was an `eval ` prefix nobody had
documented until #993.
Arguments are now passed through as arguments. Nothing is re-parsed, so a path
containing a space survives -- which the eval form cannot promise.
Additive by construction: with exactly one argument the old path runs unchanged,
including the literal `true`/`false`/`0`/`1` fast path and the `eval ` prefix. So
every existing call means what it meant. The literal check is guarded on the
argument count, because `assert_true true --version` is the command named true,
not the boolean.
The exit code is captured with `|| exit_code=$?` rather than a bare call: under
--strict a failing command as a statement would abort the whole test.
The alternative of splitting the single-argument string on whitespace was
rejected. It would silently change what an existing string means, break
arguments that legitimately contain spaces, and make the assertion
sometimes-word-splitting. Passing real arguments needs no re-parsing at all.
Verified across all eight shapes: literal true, literal 0, bare function, eval
prefix, variadic, variadic with a space in a path, variadic assert_false, and
`true --version` where the literal and the command collide.
1713 sequential / 1672 parallel; baseline + 5, RED first.
@ChemaclassChemaclass added the enhancement New feature or request label Aug 8, 2026
@ChemaclassChemaclass self-assigned this Aug 8, 2026
@Chemaclass
Chemaclass merged commit 2061310 into mainAug 8, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the feat/994-assert-true-variadic branch August 8, 2026 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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" + ' feat(assert): assert_true and assert_false accept a command with arguments by Chemaclass · Pull Request #999 · TypedDevs/bashunit · GitHub
Skip to content

feat(assert): assert_true and assert_false accept a command with arguments - #999

Merged
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic
Aug 8, 2026
Merged

feat(assert): assert_true and assert_false accept a command with arguments#999
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Related #994

assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope

The argument used to be run as a single command word. Anything with arguments was looked up as a command whose name contained spaces — so the natural spelling was the broken one, and the workaround was an eval prefix nobody had documented until #993.

💡 Changes

Arguments are now passed through as arguments. Nothing is re-parsed, so a path containing a space survives — which the eval form cannot promise.

Additive by construction. With exactly one argument the old path runs unchanged, including the literal true/false/0/1 fast path and the eval prefix. Every existing call means what it meant. The literal check is guarded on argument count, because assert_true true --version is the command named true, not the boolean.

The exit code is captured with || exit_code=$? rather than a bare call — under --strict a failing command as a statement would abort the whole test.

🚫 Why not split the string instead

Splitting the single-argument form on whitespace would silently change what an existing string means, break arguments that legitimately contain spaces, and make the assertion sometimes-word-splitting. Passing real arguments needs no re-parsing at all.

✅ Verification

All eight shapes checked: literal true, literal 0, bare function, eval prefix, variadic, variadic with a space in a path, variadic assert_false, and true --version where the literal and the command collide.

5 new tests, RED first. make sa · make lint · bash build.sh bin -v✅ Build verified ✅ · 1713 sequential / 1672 parallel-simple-strict.

…ments
Closes#994.
assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope
The argument used to be run as a single command word. Anything with arguments
was looked up as a command whose name contained spaces, so the natural spelling
was the broken one and the workaround was an `eval ` prefix nobody had
documented until #993.
Arguments are now passed through as arguments. Nothing is re-parsed, so a path
containing a space survives -- which the eval form cannot promise.
Additive by construction: with exactly one argument the old path runs unchanged,
including the literal `true`/`false`/`0`/`1` fast path and the `eval ` prefix. So
every existing call means what it meant. The literal check is guarded on the
argument count, because `assert_true true --version` is the command named true,
not the boolean.
The exit code is captured with `|| exit_code=$?` rather than a bare call: under
--strict a failing command as a statement would abort the whole test.
The alternative of splitting the single-argument string on whitespace was
rejected. It would silently change what an existing string means, break
arguments that legitimately contain spaces, and make the assertion
sometimes-word-splitting. Passing real arguments needs no re-parsing at all.
Verified across all eight shapes: literal true, literal 0, bare function, eval
prefix, variadic, variadic with a space in a path, variadic assert_false, and
`true --version` where the literal and the command collide.
1713 sequential / 1672 parallel; baseline + 5, RED first.
@ChemaclassChemaclass added the enhancement New feature or request label Aug 8, 2026
@ChemaclassChemaclass self-assigned this Aug 8, 2026
@Chemaclass
Chemaclass merged commit 2061310 into mainAug 8, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the feat/994-assert-true-variadic branch August 8, 2026 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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('^' + ".*" + ' feat(assert): assert_true and assert_false accept a command with arguments by Chemaclass · Pull Request #999 · TypedDevs/bashunit · GitHub
Skip to content

feat(assert): assert_true and assert_false accept a command with arguments - #999

Merged
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic
Aug 8, 2026
Merged

feat(assert): assert_true and assert_false accept a command with arguments#999
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Related #994

assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope

The argument used to be run as a single command word. Anything with arguments was looked up as a command whose name contained spaces — so the natural spelling was the broken one, and the workaround was an eval prefix nobody had documented until #993.

💡 Changes

Arguments are now passed through as arguments. Nothing is re-parsed, so a path containing a space survives — which the eval form cannot promise.

Additive by construction. With exactly one argument the old path runs unchanged, including the literal true/false/0/1 fast path and the eval prefix. Every existing call means what it meant. The literal check is guarded on argument count, because assert_true true --version is the command named true, not the boolean.

The exit code is captured with || exit_code=$? rather than a bare call — under --strict a failing command as a statement would abort the whole test.

🚫 Why not split the string instead

Splitting the single-argument form on whitespace would silently change what an existing string means, break arguments that legitimately contain spaces, and make the assertion sometimes-word-splitting. Passing real arguments needs no re-parsing at all.

✅ Verification

All eight shapes checked: literal true, literal 0, bare function, eval prefix, variadic, variadic with a space in a path, variadic assert_false, and true --version where the literal and the command collide.

5 new tests, RED first. make sa · make lint · bash build.sh bin -v✅ Build verified ✅ · 1713 sequential / 1672 parallel-simple-strict.

…ments
Closes#994.
assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope
The argument used to be run as a single command word. Anything with arguments
was looked up as a command whose name contained spaces, so the natural spelling
was the broken one and the workaround was an `eval ` prefix nobody had
documented until #993.
Arguments are now passed through as arguments. Nothing is re-parsed, so a path
containing a space survives -- which the eval form cannot promise.
Additive by construction: with exactly one argument the old path runs unchanged,
including the literal `true`/`false`/`0`/`1` fast path and the `eval ` prefix. So
every existing call means what it meant. The literal check is guarded on the
argument count, because `assert_true true --version` is the command named true,
not the boolean.
The exit code is captured with `|| exit_code=$?` rather than a bare call: under
--strict a failing command as a statement would abort the whole test.
The alternative of splitting the single-argument string on whitespace was
rejected. It would silently change what an existing string means, break
arguments that legitimately contain spaces, and make the assertion
sometimes-word-splitting. Passing real arguments needs no re-parsing at all.
Verified across all eight shapes: literal true, literal 0, bare function, eval
prefix, variadic, variadic with a space in a path, variadic assert_false, and
`true --version` where the literal and the command collide.
1713 sequential / 1672 parallel; baseline + 5, RED first.
@ChemaclassChemaclass added the enhancement New feature or request label Aug 8, 2026
@ChemaclassChemaclass self-assigned this Aug 8, 2026
@Chemaclass
Chemaclass merged commit 2061310 into mainAug 8, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the feat/994-assert-true-variadic branch August 8, 2026 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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('^' + ".*" + ' feat(assert): assert_true and assert_false accept a command with arguments by Chemaclass · Pull Request #999 · TypedDevs/bashunit · GitHub
Skip to content

feat(assert): assert_true and assert_false accept a command with arguments - #999

Merged
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic
Aug 8, 2026
Merged

feat(assert): assert_true and assert_false accept a command with arguments#999
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Related #994

assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope

The argument used to be run as a single command word. Anything with arguments was looked up as a command whose name contained spaces — so the natural spelling was the broken one, and the workaround was an eval prefix nobody had documented until #993.

💡 Changes

Arguments are now passed through as arguments. Nothing is re-parsed, so a path containing a space survives — which the eval form cannot promise.

Additive by construction. With exactly one argument the old path runs unchanged, including the literal true/false/0/1 fast path and the eval prefix. Every existing call means what it meant. The literal check is guarded on argument count, because assert_true true --version is the command named true, not the boolean.

The exit code is captured with || exit_code=$? rather than a bare call — under --strict a failing command as a statement would abort the whole test.

🚫 Why not split the string instead

Splitting the single-argument form on whitespace would silently change what an existing string means, break arguments that legitimately contain spaces, and make the assertion sometimes-word-splitting. Passing real arguments needs no re-parsing at all.

✅ Verification

All eight shapes checked: literal true, literal 0, bare function, eval prefix, variadic, variadic with a space in a path, variadic assert_false, and true --version where the literal and the command collide.

5 new tests, RED first. make sa · make lint · bash build.sh bin -v✅ Build verified ✅ · 1713 sequential / 1672 parallel-simple-strict.

…ments
Closes#994.
assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope
The argument used to be run as a single command word. Anything with arguments
was looked up as a command whose name contained spaces, so the natural spelling
was the broken one and the workaround was an `eval ` prefix nobody had
documented until #993.
Arguments are now passed through as arguments. Nothing is re-parsed, so a path
containing a space survives -- which the eval form cannot promise.
Additive by construction: with exactly one argument the old path runs unchanged,
including the literal `true`/`false`/`0`/`1` fast path and the `eval ` prefix. So
every existing call means what it meant. The literal check is guarded on the
argument count, because `assert_true true --version` is the command named true,
not the boolean.
The exit code is captured with `|| exit_code=$?` rather than a bare call: under
--strict a failing command as a statement would abort the whole test.
The alternative of splitting the single-argument string on whitespace was
rejected. It would silently change what an existing string means, break
arguments that legitimately contain spaces, and make the assertion
sometimes-word-splitting. Passing real arguments needs no re-parsing at all.
Verified across all eight shapes: literal true, literal 0, bare function, eval
prefix, variadic, variadic with a space in a path, variadic assert_false, and
`true --version` where the literal and the command collide.
1713 sequential / 1672 parallel; baseline + 5, RED first.
@ChemaclassChemaclass added the enhancement New feature or request label Aug 8, 2026
@ChemaclassChemaclass self-assigned this Aug 8, 2026
@Chemaclass
Chemaclass merged commit 2061310 into mainAug 8, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the feat/994-assert-true-variadic branch August 8, 2026 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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); } })(); })(); feat(assert): assert_true and assert_false accept a command with arguments by Chemaclass · Pull Request #999 · TypedDevs/bashunit · GitHub
Skip to content

feat(assert): assert_true and assert_false accept a command with arguments - #999

Merged
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic
Aug 8, 2026
Merged

feat(assert): assert_true and assert_false accept a command with arguments#999
Chemaclass merged 1 commit into
mainfrom
feat/994-assert-true-variadic

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

Related #994

assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope

The argument used to be run as a single command word. Anything with arguments was looked up as a command whose name contained spaces — so the natural spelling was the broken one, and the workaround was an eval prefix nobody had documented until #993.

💡 Changes

Arguments are now passed through as arguments. Nothing is re-parsed, so a path containing a space survives — which the eval form cannot promise.

Additive by construction. With exactly one argument the old path runs unchanged, including the literal true/false/0/1 fast path and the eval prefix. Every existing call means what it meant. The literal check is guarded on argument count, because assert_true true --version is the command named true, not the boolean.

The exit code is captured with || exit_code=$? rather than a bare call — under --strict a failing command as a statement would abort the whole test.

🚫 Why not split the string instead

Splitting the single-argument form on whitespace would silently change what an existing string means, break arguments that legitimately contain spaces, and make the assertion sometimes-word-splitting. Passing real arguments needs no re-parsing at all.

✅ Verification

All eight shapes checked: literal true, literal 0, bare function, eval prefix, variadic, variadic with a space in a path, variadic assert_false, and true --version where the literal and the command collide.

5 new tests, RED first. make sa · make lint · bash build.sh bin -v✅ Build verified ✅ · 1713 sequential / 1672 parallel-simple-strict.

…ments
Closes#994.
assert_true test -d /tmp
assert_true grep -q foo ./file
assert_false test -d /nope
The argument used to be run as a single command word. Anything with arguments
was looked up as a command whose name contained spaces, so the natural spelling
was the broken one and the workaround was an `eval ` prefix nobody had
documented until #993.
Arguments are now passed through as arguments. Nothing is re-parsed, so a path
containing a space survives -- which the eval form cannot promise.
Additive by construction: with exactly one argument the old path runs unchanged,
including the literal `true`/`false`/`0`/`1` fast path and the `eval ` prefix. So
every existing call means what it meant. The literal check is guarded on the
argument count, because `assert_true true --version` is the command named true,
not the boolean.
The exit code is captured with `|| exit_code=$?` rather than a bare call: under
--strict a failing command as a statement would abort the whole test.
The alternative of splitting the single-argument string on whitespace was
rejected. It would silently change what an existing string means, break
arguments that legitimately contain spaces, and make the assertion
sometimes-word-splitting. Passing real arguments needs no re-parsing at all.
Verified across all eight shapes: literal true, literal 0, bare function, eval
prefix, variadic, variadic with a space in a path, variadic assert_false, and
`true --version` where the literal and the command collide.
1713 sequential / 1672 parallel; baseline + 5, RED first.
@ChemaclassChemaclass added the enhancement New feature or request label Aug 8, 2026
@ChemaclassChemaclass self-assigned this Aug 8, 2026
@Chemaclass
Chemaclass merged commit 2061310 into mainAug 8, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the feat/994-assert-true-variadic branch August 8, 2026 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass