|
- 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');
- });
|