Skip to content

fix(assert): repair the no-perl snapshot placeholder fallback - #823

Merged
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback
Jul 16, 2026
Merged

fix(assert): repair the no-perl snapshot placeholder fallback#823
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

The new placeholder unit tests in #822 failed on Alpine (no perl) — correctly: the grep fallback of match_with_placeholder escaped regex metacharacters after substituting the placeholder with .*, escaping the wildcard itself, so fallback placeholders never worked.

💡 Changes

  • Build the fallback pattern exactly like the perl branch: placeholder → escape-proof token → escape metacharacters → token → .*. Verified locally with perl masked: literal match, metachar rejection, custom placeholder and mid-line placeholder all behave like the perl path.
  • Multi-line placeholders remain perl-only (grep is line-based); that unit test skips without perl and the limitation is documented.
  • Fixes the red Alpine jobs from test(snapshot): cover the placeholder matcher and normalization internals #822.

The Alpine CI runs of #822 caught the grep fallback of
snapshot::match_with_placeholder broken: it escaped regex metacharacters
AFTER substituting the placeholder with '.*', so the wildcard itself got
escaped and the pattern could never match — every placeholder assertion on a
perl-less system failed (or matched wrongly under busybox grep).
Build the pattern exactly like the perl branch instead: swap the placeholder
for an escape-proof token, escape the metacharacters, then expand the token
to '.*'. Multi-line placeholders remain perl-only (grep matches line-by-line);
the multi-line unit test now skips without perl and the fallback limitation is
documented inline.
Closes the red Alpine jobs introduced by #822.
@ChemaclassChemaclass added the bug Something isn't working label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit c117be6 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the fix/snapshot-placeholder-fallback branch July 16, 2026 05:47
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.

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" + '
fix(assert): repair the no-perl snapshot placeholder fallback by Chemaclass · Pull Request #823 · TypedDevs/bashunit · GitHub
Skip to content

fix(assert): repair the no-perl snapshot placeholder fallback - #823

Merged
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback
Jul 16, 2026
Merged

fix(assert): repair the no-perl snapshot placeholder fallback#823
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

The new placeholder unit tests in #822 failed on Alpine (no perl) — correctly: the grep fallback of match_with_placeholder escaped regex metacharacters after substituting the placeholder with .*, escaping the wildcard itself, so fallback placeholders never worked.

💡 Changes

  • Build the fallback pattern exactly like the perl branch: placeholder → escape-proof token → escape metacharacters → token → .*. Verified locally with perl masked: literal match, metachar rejection, custom placeholder and mid-line placeholder all behave like the perl path.
  • Multi-line placeholders remain perl-only (grep is line-based); that unit test skips without perl and the limitation is documented.
  • Fixes the red Alpine jobs from test(snapshot): cover the placeholder matcher and normalization internals #822.

The Alpine CI runs of #822 caught the grep fallback of
snapshot::match_with_placeholder broken: it escaped regex metacharacters
AFTER substituting the placeholder with '.*', so the wildcard itself got
escaped and the pattern could never match — every placeholder assertion on a
perl-less system failed (or matched wrongly under busybox grep).
Build the pattern exactly like the perl branch instead: swap the placeholder
for an escape-proof token, escape the metacharacters, then expand the token
to '.*'. Multi-line placeholders remain perl-only (grep matches line-by-line);
the multi-line unit test now skips without perl and the fallback limitation is
documented inline.
Closes the red Alpine jobs introduced by #822.
@ChemaclassChemaclass added the bug Something isn't working label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit c117be6 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the fix/snapshot-placeholder-fallback branch July 16, 2026 05:47
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.

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('^' + ".*" + ' fix(assert): repair the no-perl snapshot placeholder fallback by Chemaclass · Pull Request #823 · TypedDevs/bashunit · GitHub
Skip to content

fix(assert): repair the no-perl snapshot placeholder fallback - #823

Merged
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback
Jul 16, 2026
Merged

fix(assert): repair the no-perl snapshot placeholder fallback#823
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

The new placeholder unit tests in #822 failed on Alpine (no perl) — correctly: the grep fallback of match_with_placeholder escaped regex metacharacters after substituting the placeholder with .*, escaping the wildcard itself, so fallback placeholders never worked.

💡 Changes

  • Build the fallback pattern exactly like the perl branch: placeholder → escape-proof token → escape metacharacters → token → .*. Verified locally with perl masked: literal match, metachar rejection, custom placeholder and mid-line placeholder all behave like the perl path.
  • Multi-line placeholders remain perl-only (grep is line-based); that unit test skips without perl and the limitation is documented.
  • Fixes the red Alpine jobs from test(snapshot): cover the placeholder matcher and normalization internals #822.

The Alpine CI runs of #822 caught the grep fallback of
snapshot::match_with_placeholder broken: it escaped regex metacharacters
AFTER substituting the placeholder with '.*', so the wildcard itself got
escaped and the pattern could never match — every placeholder assertion on a
perl-less system failed (or matched wrongly under busybox grep).
Build the pattern exactly like the perl branch instead: swap the placeholder
for an escape-proof token, escape the metacharacters, then expand the token
to '.*'. Multi-line placeholders remain perl-only (grep matches line-by-line);
the multi-line unit test now skips without perl and the fallback limitation is
documented inline.
Closes the red Alpine jobs introduced by #822.
@ChemaclassChemaclass added the bug Something isn't working label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit c117be6 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the fix/snapshot-placeholder-fallback branch July 16, 2026 05:47
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.

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('^' + ".*" + ' fix(assert): repair the no-perl snapshot placeholder fallback by Chemaclass · Pull Request #823 · TypedDevs/bashunit · GitHub
Skip to content

fix(assert): repair the no-perl snapshot placeholder fallback - #823

Merged
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback
Jul 16, 2026
Merged

fix(assert): repair the no-perl snapshot placeholder fallback#823
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

The new placeholder unit tests in #822 failed on Alpine (no perl) — correctly: the grep fallback of match_with_placeholder escaped regex metacharacters after substituting the placeholder with .*, escaping the wildcard itself, so fallback placeholders never worked.

💡 Changes

  • Build the fallback pattern exactly like the perl branch: placeholder → escape-proof token → escape metacharacters → token → .*. Verified locally with perl masked: literal match, metachar rejection, custom placeholder and mid-line placeholder all behave like the perl path.
  • Multi-line placeholders remain perl-only (grep is line-based); that unit test skips without perl and the limitation is documented.
  • Fixes the red Alpine jobs from test(snapshot): cover the placeholder matcher and normalization internals #822.

The Alpine CI runs of #822 caught the grep fallback of
snapshot::match_with_placeholder broken: it escaped regex metacharacters
AFTER substituting the placeholder with '.*', so the wildcard itself got
escaped and the pattern could never match — every placeholder assertion on a
perl-less system failed (or matched wrongly under busybox grep).
Build the pattern exactly like the perl branch instead: swap the placeholder
for an escape-proof token, escape the metacharacters, then expand the token
to '.*'. Multi-line placeholders remain perl-only (grep matches line-by-line);
the multi-line unit test now skips without perl and the fallback limitation is
documented inline.
Closes the red Alpine jobs introduced by #822.
@ChemaclassChemaclass added the bug Something isn't working label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit c117be6 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the fix/snapshot-placeholder-fallback branch July 16, 2026 05:47
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.

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" + ' fix(assert): repair the no-perl snapshot placeholder fallback by Chemaclass · Pull Request #823 · TypedDevs/bashunit · GitHub
Skip to content

fix(assert): repair the no-perl snapshot placeholder fallback - #823

Merged
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback
Jul 16, 2026
Merged

fix(assert): repair the no-perl snapshot placeholder fallback#823
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

The new placeholder unit tests in #822 failed on Alpine (no perl) — correctly: the grep fallback of match_with_placeholder escaped regex metacharacters after substituting the placeholder with .*, escaping the wildcard itself, so fallback placeholders never worked.

💡 Changes

  • Build the fallback pattern exactly like the perl branch: placeholder → escape-proof token → escape metacharacters → token → .*. Verified locally with perl masked: literal match, metachar rejection, custom placeholder and mid-line placeholder all behave like the perl path.
  • Multi-line placeholders remain perl-only (grep is line-based); that unit test skips without perl and the limitation is documented.
  • Fixes the red Alpine jobs from test(snapshot): cover the placeholder matcher and normalization internals #822.

The Alpine CI runs of #822 caught the grep fallback of
snapshot::match_with_placeholder broken: it escaped regex metacharacters
AFTER substituting the placeholder with '.*', so the wildcard itself got
escaped and the pattern could never match — every placeholder assertion on a
perl-less system failed (or matched wrongly under busybox grep).
Build the pattern exactly like the perl branch instead: swap the placeholder
for an escape-proof token, escape the metacharacters, then expand the token
to '.*'. Multi-line placeholders remain perl-only (grep matches line-by-line);
the multi-line unit test now skips without perl and the fallback limitation is
documented inline.
Closes the red Alpine jobs introduced by #822.
@ChemaclassChemaclass added the bug Something isn't working label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit c117be6 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the fix/snapshot-placeholder-fallback branch July 16, 2026 05:47
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.

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('^' + ".*" + ' fix(assert): repair the no-perl snapshot placeholder fallback by Chemaclass · Pull Request #823 · TypedDevs/bashunit · GitHub
Skip to content

fix(assert): repair the no-perl snapshot placeholder fallback - #823

Merged
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback
Jul 16, 2026
Merged

fix(assert): repair the no-perl snapshot placeholder fallback#823
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

The new placeholder unit tests in #822 failed on Alpine (no perl) — correctly: the grep fallback of match_with_placeholder escaped regex metacharacters after substituting the placeholder with .*, escaping the wildcard itself, so fallback placeholders never worked.

💡 Changes

  • Build the fallback pattern exactly like the perl branch: placeholder → escape-proof token → escape metacharacters → token → .*. Verified locally with perl masked: literal match, metachar rejection, custom placeholder and mid-line placeholder all behave like the perl path.
  • Multi-line placeholders remain perl-only (grep is line-based); that unit test skips without perl and the limitation is documented.
  • Fixes the red Alpine jobs from test(snapshot): cover the placeholder matcher and normalization internals #822.

The Alpine CI runs of #822 caught the grep fallback of
snapshot::match_with_placeholder broken: it escaped regex metacharacters
AFTER substituting the placeholder with '.*', so the wildcard itself got
escaped and the pattern could never match — every placeholder assertion on a
perl-less system failed (or matched wrongly under busybox grep).
Build the pattern exactly like the perl branch instead: swap the placeholder
for an escape-proof token, escape the metacharacters, then expand the token
to '.*'. Multi-line placeholders remain perl-only (grep matches line-by-line);
the multi-line unit test now skips without perl and the fallback limitation is
documented inline.
Closes the red Alpine jobs introduced by #822.
@ChemaclassChemaclass added the bug Something isn't working label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit c117be6 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the fix/snapshot-placeholder-fallback branch July 16, 2026 05:47
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.

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); } })(); })(); fix(assert): repair the no-perl snapshot placeholder fallback by Chemaclass · Pull Request #823 · TypedDevs/bashunit · GitHub
Skip to content

fix(assert): repair the no-perl snapshot placeholder fallback - #823

Merged
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback
Jul 16, 2026
Merged

fix(assert): repair the no-perl snapshot placeholder fallback#823
Chemaclass merged 1 commit into
mainfrom
fix/snapshot-placeholder-fallback

Conversation

@Chemaclass

Copy link
Copy Markdown
Member

🤔 Background

The new placeholder unit tests in #822 failed on Alpine (no perl) — correctly: the grep fallback of match_with_placeholder escaped regex metacharacters after substituting the placeholder with .*, escaping the wildcard itself, so fallback placeholders never worked.

💡 Changes

  • Build the fallback pattern exactly like the perl branch: placeholder → escape-proof token → escape metacharacters → token → .*. Verified locally with perl masked: literal match, metachar rejection, custom placeholder and mid-line placeholder all behave like the perl path.
  • Multi-line placeholders remain perl-only (grep is line-based); that unit test skips without perl and the limitation is documented.
  • Fixes the red Alpine jobs from test(snapshot): cover the placeholder matcher and normalization internals #822.

The Alpine CI runs of #822 caught the grep fallback of
snapshot::match_with_placeholder broken: it escaped regex metacharacters
AFTER substituting the placeholder with '.*', so the wildcard itself got
escaped and the pattern could never match — every placeholder assertion on a
perl-less system failed (or matched wrongly under busybox grep).
Build the pattern exactly like the perl branch instead: swap the placeholder
for an escape-proof token, escape the metacharacters, then expand the token
to '.*'. Multi-line placeholders remain perl-only (grep matches line-by-line);
the multi-line unit test now skips without perl and the fallback limitation is
documented inline.
Closes the red Alpine jobs introduced by #822.
@ChemaclassChemaclass added the bug Something isn't working label Jul 16, 2026
@ChemaclassChemaclass self-assigned this Jul 16, 2026
@Chemaclass
Chemaclass merged commit c117be6 into mainJul 16, 2026
37 checks passed
@Chemaclass
Chemaclass deleted the fix/snapshot-placeholder-fallback branch July 16, 2026 05:47
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.

1 participant

@Chemaclass