28 lines
2.0 KiB
JavaScript
28 lines
2.0 KiB
JavaScript
const test=require('node:test');
|
|
const assert=require('node:assert/strict');
|
|
const vm=require('node:vm');
|
|
const {readWorldMap}=require('../lib/world-map');
|
|
|
|
test('world schematic preserves page boundaries, per-item collection and unexplored cells without writes',()=>{
|
|
const cells=[{x:1,y:2,page:1,mapId:7,regionId:2,l:true,pt:true},
|
|
{x:1,y:2,page:2,mapId:8,regionId:3,hidden:true}];
|
|
const locations=[{key:'a',type:'hpst',id:0,mapId:7,eventId:1,x:4,y:4,collected:true,official:true},
|
|
{key:'b',type:'hpst',id:0,mapId:7,eventId:2,x:4,y:4,collected:false,official:true},
|
|
{key:'c',type:'hpst',id:0,mapId:8,eventId:3,x:4,y:4,collected:null,official:false}];
|
|
const encyclopedia={items:[{type:'hpst',id:0,name:'强化',desc:'效果'}],locations};
|
|
const before=JSON.stringify({cells,encyclopedia});
|
|
const context=vm.createContext({encyclopedia,DataManager:{_thumbnailMapCell:{a:cells[0],b:cells[1]},
|
|
makePosKey:(x,y)=>x+':'+y,getThumbnailCell:(x,y,id)=>cells.find(c=>c.mapId===id),getCurrentThumbnailCell:()=>cells[1]},
|
|
$gameSystem:{isThumbnailActive:()=>false},$dataMapInfos:{},$dataRegion:{2:{name:'森林',exploreItem:[[7,1],[7,2],[7,9]]},3:{name:'里'}},
|
|
$gameMap:{mapId:()=>8},$gamePlayer:{_x:5,_y:6}});
|
|
const r=JSON.parse(vm.runInContext(`JSON.stringify((${readWorldMap.toString()})(encyclopedia))`,context));
|
|
assert.equal(r.cells.length,2);assert.equal(r.pages.length,2);
|
|
assert.deepEqual(r.markers.map(m=>m.collected),[true,false,null]);
|
|
assert.deepEqual(r.markers.map(m=>m.cellKey),['1:1:2','1:1:2','2:1:2']);
|
|
assert.equal(r.cells[0].walls.left,true);assert.equal(r.cells[0].exits.top,true);
|
|
assert.equal(r.cells[1].explored,false);assert.equal(r.cells[1].hidden,true);
|
|
assert.equal(r.player.cellKey,'2:1:2');assert.equal(r.markers[0].name,'强化');
|
|
assert.equal(r.coverage.mappedOfficial,2);assert.equal(r.coverage.officialTotal,3);assert.deepEqual(r.coverage.missing,['7:9']);
|
|
assert.equal(JSON.stringify({cells,encyclopedia}),before);
|
|
});
|