Files
joywayer 35216f75e7 feat: integrate room framework and isolated subgame bundles
Complete room UI and protocol integration, move game definitions and resources behind bundle entries, publish authoritative version XML, and document single-game builds. Include all current resource changes and experiment artifacts.
2026-09-09 03:13:18 +08:00

37 lines
2.4 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {startPlatformLocation,callPlatformSetting} from '../../YouleNexus/assets/framework/adapters/native/platform-native.ts';
test('browser location enters the legacy callback as JSON, with a fresh payload each time',()=>{
const results:string[]=[];
startPlatformLocation({kind:'browser'},value=>results.push(value as string));
startPlatformLocation({kind:'browser'},value=>results.push(value as string));
assert.equal(results.length,2);
assert.deepEqual(JSON.parse(results[0]),{
address:'江西省南昌市青云谱区施尧路靠近上海浦东发展银行(长天支行)',city:'南昌市',cityCode:'0791',country:'中国',
district:'青云谱区',latitude:28.623546,longitude:115.900333,province:'江西省',street:'施尧路',errorCode:0,
});
assert.equal(results[0],results[1]);
});
test('settings and WVJB preserve scalar and no-argument conventions without browser callbacks',()=>{
const calls:unknown[]=[];
const settings={startlocation:(...args:unknown[])=>calls.push(['location',...args]),
stopshake:(...args:unknown[])=>calls.push(['stop',...args]),voicePlaying:(n:number)=>calls.push(['voice',n]),
SwitchShake:(n:number)=>calls.push(['sound',n])};
const host={kind:'settings' as const,settings};
startPlatformLocation(host,()=>assert.fail('native must own its callback'));
callPlatformSetting(host,'stopshake');callPlatformSetting(host,'voicePlaying',0);callPlatformSetting(host,'SwitchShake',1);
const bridge={kind:'bridge' as const,call:(name:string,data:unknown)=>calls.push([name,data])};
startPlatformLocation(bridge,()=>assert.fail('bridge must own its callback'));
callPlatformSetting(bridge,'stopshake');callPlatformSetting(bridge,'voicePlaying',1);
assert.deepEqual(calls,[['location',2],['stop'],['voice',0],['sound',1],['startlocation',2],['stopshake',''],['voicePlaying',1]]);
});
test('browser setting commands complete, but malformed native hosts and native failures stay visible',()=>{
callPlatformSetting({kind:'browser'},'voicePlaying',0);
callPlatformSetting({kind:'browser'},'stopshake');
assert.throws(()=>callPlatformSetting({kind:'settings',settings:{}},'voicePlaying',1),/voicePlaying/);
assert.throws(()=>startPlatformLocation({kind:'settings',settings:{startlocation(){throw Error('native failed');}}},()=>assert.fail()),/native failed/);
});