@@ -283,24 +283,49 @@ describe("world-packs primitives", () => {
283283 assert . deepEqual ( version , [ 2 , 0 , 1 ] ) ;
284284 } ) ;
285285
286- it ( "scanDestOccupancy 走 readPackDirOccupancy(含 kind)" , async ( ) => {
287- const { scanDestOccupancy } = await import ( "./dist/world-packs.js" ) ;
288- const parent = path . join ( tmp , "occupancy-scan" ) ;
289- const dir = path . join ( parent , "[BP] Occ" ) ;
290- const uuid = "cccccccc-cccc-cccc-cccc-cccccccccccc" ;
291- writeManifest ( dir , {
292- name : "OccPack" ,
293- uuid,
294- version : [ 2 , 3 , 4 ] ,
295- type : "data" ,
286+ it ( "scanDestOccupancy 走 readPackDirOccupancy(完整 + 残缺 header)" , async ( ) => {
287+ const { scanDestOccupancy, readPackDirOccupancy } = await import ( "./dist/world-packs.js" ) ;
288+ const dest = path . join ( tmp , "occupancy-dry" ) ;
289+ const fullDir = path . join ( dest , "[RP] Full" ) ;
290+ writeManifest ( fullDir , {
291+ name : "Full Pack" ,
292+ uuid : "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ,
293+ version : [ 2 , 1 , 0 ] ,
294+ type : "resources" ,
296295 } ) ;
297- const rows = scanDestOccupancy ( parent ) ;
298- assert . equal ( rows . length , 1 ) ;
299- assert . equal ( rows [ 0 ] . folderName , "[BP] Occ" ) ;
300- assert . equal ( rows [ 0 ] . uuid , uuid ) ;
301- assert . deepEqual ( rows [ 0 ] . version , [ 2 , 3 , 4 ] ) ;
302- assert . equal ( rows [ 0 ] . name , "OccPack" ) ;
303- assert . equal ( rows [ 0 ] . kind , "behavior" ) ;
296+ const partialDir = path . join ( dest , "[RP] Partial" ) ;
297+ fs . mkdirSync ( partialDir , { recursive : true } ) ;
298+ fs . writeFileSync (
299+ path . join ( partialDir , "manifest.json" ) ,
300+ JSON . stringify ( {
301+ format_version : 2 ,
302+ header : {
303+ name : "Partial" ,
304+ uuid : "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" ,
305+ version : [ 3 , 0 , 0 ] ,
306+ } ,
307+ modules : [ ] ,
308+ } )
309+ ) ;
310+
311+ const fullFacts = readPackDirOccupancy ( fullDir ) ;
312+ assert . equal ( fullFacts ?. uuid , "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ) ;
313+ assert . deepEqual ( fullFacts ?. version , [ 2 , 1 , 0 ] ) ;
314+ assert . equal ( fullFacts ?. name , "Full Pack" ) ;
315+ assert . equal ( fullFacts ?. kind , "resource" ) ;
316+
317+ const partialFacts = readPackDirOccupancy ( partialDir ) ;
318+ assert . equal ( partialFacts ?. uuid , "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" ) ;
319+ assert . deepEqual ( partialFacts ?. version , [ 3 , 0 , 0 ] ) ;
320+ assert . equal ( partialFacts ?. kind , undefined ) ;
321+
322+ const occ = scanDestOccupancy ( dest ) ;
323+ assert . equal ( occ . length , 2 ) ;
324+ const byUuid = new Map ( occ . map ( ( o ) => [ o . uuid , o ] ) ) ;
325+ assert . equal ( byUuid . get ( "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ) ?. name , "Full Pack" ) ;
326+ assert . equal ( byUuid . get ( "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ) ?. kind , "resource" ) ;
327+ assert . equal ( byUuid . get ( "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" ) ?. version ?. [ 0 ] , 3 ) ;
328+ assert . equal ( byUuid . get ( "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" ) ?. name , undefined ) ;
304329 } ) ;
305330
306331 it ( "decidePackInstallPlan 表驱动" , async ( ) => {
0 commit comments