char-slop/berry
multipurpose self-modifiable agentic harness
git clone https://git.t4t.associates/char-slop/berry
bc405c3
main
1import { assertEquals } from "@std/assert" ; 2import { withDom } from "@berry/util/dom.ts" ; 3import { code } from "./code.tsx" ; 4import type { HighlightRequest } from "./highlight-worker.ts" ; 5 6Deno . test ( "code highlights once on entering view and releases unmounted blocks" , async ( t ) => { 7const observed = new Set < Element >(); 8const requests :HighlightRequest [] = []; 9let workers = 0 ; 10let intersect :( target :Element , isIntersecting :boolean ) => void ; 11class Visibility { 12constructor ( callback :IntersectionObserverCallback ) { 13intersect = ( target , isIntersecting ) => { 14callback ( 15[{ target, isIntersecting} as IntersectionObserverEntry ], 16this as unknown as IntersectionObserver , 17); 18}; 19} 20observe ( target :Element ) { 21observed . add ( target ); 22} 23unobserve ( target :Element ) { 24observed . delete ( target ); 25} 26} 27class Highlighter { 28onmessage ?:( event :{ data :{ id :number ; html :string } }) => void ; 29constructor () { 30workers ++ ; 31} 32postMessage ( request :HighlightRequest ) { 33requests . push ( request ); 34queueMicrotask (() => 35this . onmessage ?.({ 36data :{ id :request . id , html :reply ( request ) }, 37}) 38); 39} 40} 41let reply = ( _ :HighlightRequest ) => "<a-k>const</a-k> x = 1;" ; 42const globals = { IntersectionObserver :Visibility , Worker :Highlighter }; 43await withDom ( async ( window ) => { 44const block = code ( "const x = 1;\n" , { language :"ts" }); 45const container = document . createElement ( "div" ); 46container . append ( block ); 47await t . step ( "detached and offscreen blocks stay plain without starting a worker" , async () => { 48assertEquals ( observed . size , 0 ); 49assertEquals ( workers , 0 ); 50document . body . append ( container ); 51await window . happyDOM . waitUntilComplete (); 52assertEquals ( observed . has ( block ), true ); 53intersect ( block , false ); 54assertEquals ( workers , 0 ); 55assertEquals ( block . querySelector ( ".code-text" )?. textContent , "const x = 1;" ); 56}); 57await t . step ( "entering view highlights once, preserving the source and gutter" , async () => { 58intersect ( block , true ); 59await window . happyDOM . waitUntilComplete (); 60assertEquals ( workers , 1 ); 61assertEquals ( requests . map (({ language, source}) => ({ language, source})), [ 62{ language :"typescript" , source :"const x = 1;" }, 63]); 64assertEquals ( block . querySelector ( "a-k" )?. textContent , "const" ); 65assertEquals ( block . querySelector ( ".code-text" )?. textContent , "const x = 1;" ); 66assertEquals ( observed . has ( block ), false ); 67intersect ( block , true ); 68container . remove (); 69document . body . append ( container ); 70await window . happyDOM . waitUntilComplete (); 71assertEquals ( requests . length , 1 ); 72assertEquals ( observed . has ( block ), false ); 73}); 74await t . step ( "blocks without a grammar do not request highlighting" , async () => { 75container . replaceChildren ( code ( "plain text" )); 76await window . happyDOM . waitUntilComplete (); 77assertEquals ( observed . size , 0 ); 78assertEquals ( requests . length , 1 ); 79}); 80await t . step ( "highlighted lines keep the newlines that copying reads" , async () => { 81reply = ( request ) => request . source ; 82const multiline = code ( "const x = 1;\nconst y = 2;" , { language :"ts" }); 83container . replaceChildren ( multiline ); 84await window . happyDOM . waitUntilComplete (); 85intersect ( multiline , true ); 86await window . happyDOM . waitUntilComplete (); 87const copied = [ ...multiline . querySelectorAll ( ".code-text" )]. map (( line ) => line . textContent ); 88assertEquals ( copied . join ( "" ), "const x = 1;\nconst y = 2;" ); 89}); 90}, { globals}); 91});