import test from 'node:test'; import assert from 'node:assert/strict'; import {parseGraphicDocument} from '../src/lib/graphic-document.ts'; const item={id:'one',kind:'text',name:'标题',text:'',x:20,y:20,w:300,h:100,fill:'#123456',size:32,hidden:false,locked:false}; const doc={name:'作品',background:'#ffffff',items:[item]}; test('graphic backup restores editable text and ignores unrelated properties',()=>{assert.deepEqual(parseGraphicDocument(JSON.stringify({...doc,extra:'ignored'})),doc)}); test('graphic backup rejects corrupted layers, duplicate IDs and unbounded geometry',()=>{for(const items of [[{...item,text:null}],[item,item],[{...item,x:Infinity}],[{...item,w:-1}],[{...item,fill:'url(https://example.com)'}]])assert.throws(()=>parseGraphicDocument(JSON.stringify({...doc,items})));}); test('graphic backup disallows active SVG and remote image loads',()=>{for(const src of ['https://example.com/image.png','javascript:alert(1)','data:image/svg+xml;base64,PHN2Zz4='])assert.throws(()=>parseGraphicDocument(JSON.stringify({...doc,items:[{...item,kind:'image',src}]})));});