import { describe, expect, it } from 'vitest'; import { WebLoadStarter } from '@motajs/loader'; import { SaveCompression } from '@user/data-common'; import { CoreState } from '../src/core'; /** 按 08-08 约定的 CoreState 装配创建一个独立状态实例 */ function createCoreState(): CoreState { return new CoreState({ loadStarter: new WebLoadStarter(), coreURL: 'placeholder' }); } describe('Node CoreState factory', () => { // 验证无参数工厂创建的状态实例不会共享勇士、地图、事件存储和存档系统 it('creates independent mutable data-side instances', () => { const first = createCoreState(); const second = createCoreState(); expect(first).not.toBe(second); expect(first.hero).not.toBe(second.hero); expect(first.hero.attribute).not.toBe(second.hero.attribute); expect(first.eventStore).not.toBe(second.eventStore); first.hero.getModifiableAttribute().set('hp', 99); expect(second.hero.attribute.getFinalAttribute('hp')).not.toBe(99); const map = first.maps.createMap('isolated-floor', 1, 1); map.setActiveStatus(true); const layer = map.addLayer('event'); layer.setMapRef(new Uint32Array([7])); expect(second.maps.getMap('isolated-floor')).toBeNull(); const saved = first.maps.saveState(SaveCompression.NoCompression); const savedFloor = saved.floors.get('isolated-floor'); const savedLayer = savedFloor?.layers.get(0); if (!savedLayer?.fullMap) throw new Error('missing isolated map snapshot'); savedLayer.fullMap[0] = 99; expect(layer.getBlock(0, 0)).toBe(7); }); });