139 lines
No EOL
3.6 KiB
JavaScript
139 lines
No EOL
3.6 KiB
JavaScript
// Base32 Test Suite
|
|
const base32 = require('./base32.js');
|
|
|
|
// Test cases
|
|
const tests = [
|
|
// 1. Basic encoding/decoding
|
|
{
|
|
name: '基础编码/解码测试',
|
|
input: 'Hello, World!',
|
|
expected: 'JBSWY3DPFQQFO33SNRSCC==='
|
|
},
|
|
// 2. Empty string
|
|
{
|
|
name: '空字符串测试',
|
|
input: '',
|
|
expected: ''
|
|
},
|
|
// 3. Unicode characters
|
|
{
|
|
name: 'Unicode字符测试',
|
|
input: '你好,世界!',
|
|
expected: '4S4K3DZNEOZTG5TF'
|
|
},
|
|
// 4. Special characters
|
|
{
|
|
name: '特殊字符测试',
|
|
input: '!@#$%^&*()',
|
|
expected: 'IVLF4UKEJRGUU==='
|
|
},
|
|
// 5. Long string
|
|
{
|
|
name: '长字符串测试',
|
|
input: 'A'.repeat(100),
|
|
expected: 'IFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQKBIFAUCQ======'
|
|
}
|
|
];
|
|
|
|
// Custom alphabet test
|
|
const customAlphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUV';
|
|
|
|
// Run tests
|
|
console.log('=== Base32 Test Suite ===\n');
|
|
|
|
// 1. Standard Tests
|
|
console.log('1. Standard Tests:');
|
|
tests.forEach(test => {
|
|
try {
|
|
const encoded = base32.encode(test.input);
|
|
const decoded = new TextDecoder().decode(base32.decode(encoded));
|
|
const passed = encoded === test.expected && decoded === test.input;
|
|
|
|
console.log(`${test.name}:`);
|
|
console.log(` Input: ${test.input}`);
|
|
console.log(` Encoded: ${encoded}`);
|
|
console.log(` Decoded: ${decoded}`);
|
|
console.log(` Result: ${passed ? '✓ 通过' : '✗ 失败'}\n`);
|
|
} catch (e) {
|
|
console.log(` Error: ${e.message}\n`);
|
|
}
|
|
});
|
|
|
|
// 2. Custom Alphabet Tests
|
|
console.log('2. Custom Alphabet Tests:');
|
|
try {
|
|
base32.setCustomAlphabet(customAlphabet);
|
|
const input = 'Hello';
|
|
const encoded = base32.encode(input);
|
|
const decoded = new TextDecoder().decode(base32.decode(encoded));
|
|
console.log(`Custom alphabet encoding:`);
|
|
console.log(` Input: ${input}`);
|
|
console.log(` Encoded: ${encoded}`);
|
|
console.log(` Decoded: ${decoded}`);
|
|
console.log(` Result: ${decoded === input ? '✓ 通过' : '✗ 失败'}\n`);
|
|
} catch (e) {
|
|
console.log(` Error: ${e.message}\n`);
|
|
}
|
|
|
|
// 3. Error Handling Tests
|
|
console.log('3. Error Handling Tests:');
|
|
|
|
// Invalid input type
|
|
try {
|
|
base32.encode(null);
|
|
console.log('Invalid input type test: ✗ 失败 (应该抛出错误)');
|
|
} catch (e) {
|
|
console.log(`Invalid input type test: ✓ 通过 (${e.type})`);
|
|
}
|
|
|
|
// Invalid Base32 string
|
|
try {
|
|
base32.decode('!@#$');
|
|
console.log('Invalid Base32 string test: ✗ 失败 (应该抛出错误)');
|
|
} catch (e) {
|
|
console.log(`Invalid Base32 string test: ✓ 通过 (${e.type})`);
|
|
}
|
|
|
|
// Invalid padding
|
|
try {
|
|
base32.decode('JBSWY3DP=', { strict: true });
|
|
console.log('Invalid padding test: ✗ 失败 (应该抛出错误)');
|
|
} catch (e) {
|
|
console.log(`Invalid padding test: ✓ 通过 (${e.type})`);
|
|
}
|
|
|
|
// 4. Utility Function Tests
|
|
console.log('\n4. Utility Function Tests:');
|
|
|
|
// isValid
|
|
console.log('isValid tests:');
|
|
[
|
|
'JBSWY3DP',
|
|
'JBSWY3DP======',
|
|
'invalid!',
|
|
''
|
|
].forEach(input => {
|
|
console.log(` "${input}": ${base32.isValid(input)}`);
|
|
});
|
|
|
|
// normalize
|
|
console.log('\nnormalize tests:');
|
|
[
|
|
'jbswy3dp',
|
|
'JBSWY3DP',
|
|
'JBSWY3DP======'
|
|
].forEach(input => {
|
|
try {
|
|
console.log(` "${input}" -> "${base32.normalize(input)}"`);
|
|
} catch (e) {
|
|
console.log(` "${input}" Error: ${e.message}`);
|
|
}
|
|
});
|
|
|
|
// encodedLength
|
|
console.log('\nencodedLength tests:');
|
|
[5, 10, 15].forEach(len => {
|
|
console.log(` Input length ${len}:`);
|
|
console.log(` With padding: ${base32.encodedLength(len)}`);
|
|
console.log(` Without padding: ${base32.encodedLength(len, { noPadding: true })}`);
|
|
}); |