Budget growing history and import recovery encoding
This commit is contained in:
@@ -72,3 +72,27 @@ test('cooperative preparation evaluates every unsafe occurrence and rejects erro
|
||||
assert.ok(await sealRecoveryImageAsync(17,1,1,nested(64,dataRecord({omitted:undefined}))));
|
||||
await assert.rejects(sealRecoveryImageAsync(17,0,1,{}),/corrupt_recovery_image/);
|
||||
});
|
||||
|
||||
test('primitive normalization and UTF-8 sizing occur inside the cooperative slice',async()=>{
|
||||
const {dataArray}=await import('../../src/lib/canvas-core/data-containers.ts');
|
||||
const {sealRecoveryImageAsync,sealedRecoveryByteLength}=await import('../../src/lib/canvas-runtime/recovery-encoding.ts');
|
||||
const input=dataArray(Array.from({length:1000},(_,i)=>'budgeted-中文😀-'+i)),stringify=JSON.stringify;
|
||||
let strings=0,tick=0,atFirstYield;
|
||||
JSON.stringify=function(value,...args){if(typeof value==='string'&&value.startsWith('budgeted-'))strings++;return Reflect.apply(stringify,this,[value,...args]);};
|
||||
try{
|
||||
const image=await sealRecoveryImageAsync(17,1,1,input,{now:()=>tick++,frameBudgetMs:1,yieldTask:async()=>{atFirstYield??=strings;}});
|
||||
assert.ok(atFirstYield>0&&atFirstYield<=128,'all scalar encoding ran before the first yield');
|
||||
assert.equal(strings,1000);assert.deepEqual(image.payload,input);
|
||||
assert.equal(sealedRecoveryByteLength(image),new TextEncoder().encode(stringify(image)).byteLength);
|
||||
}finally{JSON.stringify=stringify;}
|
||||
});
|
||||
|
||||
test('unknown proxies retain the synchronous codec trap order and callback count',async()=>{
|
||||
const {dataRecord}=await import('../../src/lib/canvas-core/data-containers.ts');
|
||||
const {sealRecoveryImageAsync}=await import('../../src/lib/canvas-runtime/recovery-encoding.ts');
|
||||
let events=[];
|
||||
const proxy=new Proxy({text:'external'},Object.fromEntries(['get','getPrototypeOf','getOwnPropertyDescriptor','ownKeys','isExtensible'].map(name=>[name,(...args)=>{events.push([name,String(args[1]??'')]);return Reflect[name](...args);}])));
|
||||
const payload=dataRecord({proxy}),expected=sealRecoveryImage(17,1,1,payload),before=events;events=[];
|
||||
const actual=await sealRecoveryImageAsync(17,1,1,payload);
|
||||
assert.deepEqual(actual,expected);assert.deepEqual(events,before);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user