31 lines
1.8 KiB
TypeScript
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}`);
|
|
});
|