als-store
Version:
Library for streamlined file management and advanced data caching, featuring intelligent file searching, dynamic cache control, and flexible file operations
80 lines (66 loc) • 2.83 kB
JavaScript
const { nameToParams, paramsToName, encode, decode } = require('../lib/name-params')
const assert = require('node:assert')
const { describe, it } = require('node:test')
describe('Filename encoding and decoding', () => {
// Тесты для encode
it('encode replaces invalid characters', () => {
assert(encode('age>20') === 'age_x3E20');
assert(encode('file:name') === 'file_x3Aname');
});
it('encode replaces reserved names', () => {
const r = new RegExp(/^_r/)
assert(r.test(encode('con')))
assert(r.test(encode('lpt1')))
});
it('decode restores invalid characters', () => {
assert(decode('age_x3E20') === 'age>20');
assert(decode('file_x3Aname') === 'file:name');
});
it('decode restores reserved names', () => {
const encodedCon = encode('con');
const encodedLpt1 = encode('lpt1');
assert(decode(encodedCon) === 'con');
assert(decode(encodedLpt1) === 'lpt1');
});
// Тестирование обратимости
it('encode and decode are reversible', () => {
const originalString = 'test>file:con';
const encodedString = encode(originalString);
assert(decode(encodedString) === originalString);
});
});
describe('Filename encoding and decoding edge cases', () => {
it('correctly handles empty strings', () => {
assert(encode('') === '');
assert(decode('') === undefined);
});
it('leaves strings without invalid characters unchanged', () => {
const validString = 'validFilename123';
assert(encode(validString) === validString);
assert(decode(validString) === validString);
});
it('handles invalid characters in various positions', () => {
assert(encode('>age') === '_x3Eage');
assert(encode('age>') === 'age_x3E');
assert(encode('a>ge') === 'a_x3Ege');
});
it('processes multiple consecutive invalid characters', () => {
assert(encode('>>') === '_x3E_x3E');
assert(decode('_x3E_x3E') === '>>');
});
});
describe('paramsToName and nameToParams', () => {
it('dots in a middle', () => {
assert(paramsToName(['value1',undefined,'value2',undefined,'value3']) === 'value1..value2..value3')
assert.deepEqual(nameToParams('value1..value2..value3'),['value1',undefined,'value2',undefined,'value3'])
})
it('dots at the end', () => {
assert(paramsToName(['value1',undefined,'value2',undefined,undefined]) === 'value1..value2')
assert.deepEqual(nameToParams('value1..value2'),['value1',undefined,'value2'])
})
it('empty string',() => {
assert.throws(() => paramsToName([]))
assert(paramsToName([undefined]) === '[^]')
assert.deepEqual(nameToParams('[^]'),[undefined])
})
})