Files
youle_cocos/cocoscreator_projects/framework-tests/presentation/profile-auth.test.ts
T

31 lines
1.8 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {readFileSync} from 'node:fs';
import {runInNewContext} from 'node:vm';
import {validateProfileAuth} from '../../YouleNexus/assets/framework/presentation/profile-auth.ts';
const root=new URL('../../../projects/Game_Surface_3/js/00_Surface/',import.meta.url);
const source=readFileSync(new URL('05_Func.js',root),'utf8');
const districts=readFileSync(new URL('03_Banwords.js',root),'utf8');
const context:any={};
runInNewContext(districts.slice(districts.indexOf('var GB2260 ='),districts.indexOf(';',districts.indexOf('var GB2260 ='))+1)
+source.slice(source.indexOf('var IDValidator ='),source.indexOf('Func.subString ='))+';validator=new IDValidator();',context);
test('auth follows source name check and known checksum outcomes',()=>{
assert.equal(validateProfileAuth('张','11010519491231002X'),'name');
assert.equal(validateProfileAuth('测试','11010519491231002X'),null);
assert.equal(validateProfileAuth('测试','11010519491231002x'),null);
assert.equal(validateProfileAuth('测试','110105194912310020'),'id');
assert.equal(validateProfileAuth('测试',''),'id');
assert.equal(validateProfileAuth('测试','110105491231002'),null);
});
test('ID validation matches the original validator including legacy date and address semantics',()=>{
const ids=['','11010519491231002X','110105194912310020','110105491231002','110105491332002','999999491231002',
'110199491231002','110105490231002','110105490000002','11010549aa31abc',' 11010519491231002X','11010519491231002X '];
for(const base of ['11010519491231002X','110105491231002'])for(let i=0;i<base.length;i++){
for(const ch of ['0','9','A','x'])ids.push(base.slice(0,i)+ch+base.slice(i+1));
}
for(const id of ids)assert.equal(validateProfileAuth('测试',id)===null,context.validator.isValid(id),`parity for ${id}`);
});