27 lines
2.2 KiB
JavaScript
27 lines
2.2 KiB
JavaScript
const fs = require('fs'), vm = require('vm'), assert = require('assert').strict;
|
|
const ts = require('C:/ProgramData/cocos/editors/Creator/3.8.7/resources/app.asar.unpacked/node_modules/typescript');
|
|
const data = new Map(); let current = { username: 'player001' }, fail = false;
|
|
const store = { get length(){ return data.size; }, key: i => [...data.keys()][i], getItem: k => data.get(k) ?? null,
|
|
setItem: (k, v) => { if(fail) throw Error('storage unavailable'); data.set(k,v); } };
|
|
function load(){const exports={};vm.runInNewContext(ts.transpileModule(fs.readFileSync('assets/games/profile/ProfileData.ts','utf8'),
|
|
// Exercise legacy array-only spread lowering used by mini-game builds.
|
|
{compilerOptions:{module:ts.ModuleKind.CommonJS,target:ts.ScriptTarget.ES5,downlevelIteration:false}}).outputText,
|
|
{exports,require: p => p==='cc'?{sys:{localStorage:store}}:{authService:()=>({requireSession:()=>{if(!current)throw Error('login required');return current}})}});return exports;}
|
|
const profile=load();
|
|
assert.equal(profile.playerName('player001'),'player001');
|
|
assert.equal(profile.playerName('星河旅人'),'星河旅人');
|
|
data.set('prism.profile.player001','旧昵称');
|
|
assert.equal(load().playerName('player001'),'player001');
|
|
assert.equal(profile.savePlayerName,undefined);
|
|
current={username:'player002'};
|
|
data.set('prism.auth.save.player001',JSON.stringify({baseData:{maxScore:900}}));
|
|
data.set('prism.auth.save.player002',JSON.stringify({baseData:{maxScore:1200}}));
|
|
data.set('prism.auth.save.corrupt','invalid');
|
|
data.set('prism.auth.save.negative',JSON.stringify({baseData:{maxScore:-1}}));
|
|
let rank=profile.localRanking();assert.equal(rank.list.length,62);assert.equal(rank.my.rank,60);assert.equal(rank.my.score,1200);
|
|
current={username:'player001'};rank=profile.localRanking();assert.equal(rank.my.nickname,'player001');assert.equal(rank.my.rank,61);
|
|
current=null;assert.throws(()=>profile.localRanking());
|
|
const ui=fs.readFileSync('assets/games/profile/ProfileUI.ts','utf8');
|
|
assert.ok(!/EditBox|ProfileDialog|Button.EventType.CLICK|savePlayerName/.test(ui));
|
|
console.log('PASS: registration names, legacy nickname ignored, preserved opponents, score sorting and display-only profile');
|