import test from 'node:test'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import {createRequire} from 'node:module'; const requireWeb=createRequire(new URL('../../unreal_tran_web/package.json',import.meta.url)); const ts=requireWeb('typescript'); const source=fs.readFileSync(new URL('../../unreal_tran_web/src/utils/workspaceTabCloseGuards.ts',import.meta.url),'utf8'); const compiled=ts.transpileModule(source,{compilerOptions:{target:ts.ScriptTarget.ES2022,module:ts.ModuleKind.ESNext}}).outputText; const {registerWorkspaceTabCloseGuard:register,prepareWorkspaceTabsClose:prepare}=await import(`data:text/javascript;base64,${Buffer.from(compiled).toString('base64')}`); test('closing one selected scene checks its cached guard, leaves unrelated workspaces alone',async()=>{ const seen=[];const a=register({key:()=>'/scene/a',prepare:()=>{seen.push('a');return true}}),b=register({key:()=>'/scene/b',prepare:()=>{seen.push('b');return true}}); try {const commit=await prepare(['/scene/b']);assert.equal(typeof commit,'function');commit();assert.deepEqual(seen,['b']);}finally{a();b();} }); test('cancel or failed save in a later tab never commits earlier draft discard',async()=>{ let discarded=false;const a=register({key:()=>'/a',prepare:()=>()=>{discarded=true}}),b=register({key:()=>'/b',prepare:()=>false}); try{assert.equal(await prepare(['/a','/b']),false);assert.equal(discarded,false);}finally{a();b();} }); test('all successful confirmations commit together and unmounted guards are removed',async()=>{ let commits=0;const a=register({key:()=>'/a',prepare:()=>()=>{commits++}}),b=register({key:()=>'/b',prepare:()=>()=>{commits++}}); b();try{const commit=await prepare(['/a','/b']);assert.equal(commits,0);commit();assert.equal(commits,1);}finally{a();} assert.equal(typeof await prepare(['/a','/b']),'function'); });