import test from 'node:test'; import assert from 'node:assert/strict'; import {readFileSync} from 'node:fs'; import vm from 'node:vm'; function runtime(search) { let config; const classes=new Set(); const links=[{}]; const document={documentElement:{classList:{toggle:(name,on)=>on?classes.add(name):classes.delete(name)}},getElementById:()=>({addEventListener(){},hidden:false}),querySelector:()=>({hidden:false}),querySelectorAll:()=>links,hasFocus:()=>true}; const window={matchMedia:()=>({matches:false,addEventListener(){}})}; vm.runInNewContext(read('presentations/less-prompting-more-shipping/runtime.js'),{window,document,location:{search},URLSearchParams,RevealNotes:{},Reveal:{initialize:c=>{config=c;},configure(){}}}); return {config,classes,links}; } test('embed isolates URL, focus and deck links without autoplay; print stays standalone',()=>{ const embed=runtime('?embed'); assert.equal(embed.config.hash,false); assert.equal(embed.config.embedded,true); assert.equal(embed.config.autoSlide,0); assert.equal(embed.config.keyboard[70],null); assert.equal(embed.config.keyboard[83],null); assert.equal(typeof embed.config.keyboardCondition,'function'); assert(embed.classes.has('embedded')); assert.equal(embed.links[0].target,'_top'); for(const query of ['', '?print-pdf', '?embed&print-pdf']) { const {config,classes}=runtime(query); assert.equal(config.hash,true);assert(!classes.has('embedded')); } }); const read=p=>readFileSync(p,'utf8'); test('homepage replaces teaser with titled single-source playable stage below existing cards',()=>{ const home=read('src/pages/index.tsx'); assert.match(home,/