69 lines
3.4 KiB
TypeScript
69 lines
3.4 KiB
TypeScript
|
|
import { defineSchema, parseSchema, parseValue, createValidator } from './index';
|
||
|
|
|
||
|
|
console.log('=== Testing Schema Parser ===\n');
|
||
|
|
|
||
|
|
const testCases = [
|
||
|
|
{ schema: 'string', value: 'hello', description: 'Simple string' },
|
||
|
|
{ schema: 'number', value: '42', description: 'Simple number' },
|
||
|
|
{ schema: 'boolean', value: 'true', description: 'Simple boolean' },
|
||
|
|
{ schema: '[string; number]', value: '[hello; 42]', description: 'Tuple' },
|
||
|
|
{ schema: '[string; number]', value: 'hello; 42', description: 'Tuple without brackets' },
|
||
|
|
{ schema: 'string[]', value: '[hello; world; test]', description: 'Array of strings' },
|
||
|
|
{ schema: 'string[]', value: 'hello; world; test', description: 'Array without brackets' },
|
||
|
|
{ schema: 'number[]', value: '[1; 2; 3; 4]', description: 'Array of numbers' },
|
||
|
|
{ schema: '[string; number][]', value: '[[a; 1]; [b; 2]; [c; 3]]', description: 'Array of tuples' },
|
||
|
|
{ schema: '[string; number][]', value: '[a; 1]; [b; 2]; [c; 3]', description: 'Array of tuples without outer brackets' },
|
||
|
|
{ schema: 'word-smith', value: 'word-smith', description: 'String with hyphen' },
|
||
|
|
{ schema: 'string', value: 'hello\\;world', description: 'Escaped semicolon' },
|
||
|
|
{ schema: 'string', value: 'hello\\[world', description: 'Escaped bracket' },
|
||
|
|
{ schema: 'string', value: 'hello\\\\world', description: 'Escaped backslash' },
|
||
|
|
{ schema: '[string; string]', value: 'hello\\;world; test', description: 'Tuple with escaped semicolon' },
|
||
|
|
];
|
||
|
|
|
||
|
|
testCases.forEach(({ schema, value, description }) => {
|
||
|
|
try {
|
||
|
|
console.log(`Test: ${description}`);
|
||
|
|
console.log(` Schema: ${schema}`);
|
||
|
|
console.log(` Value: "${value}"`);
|
||
|
|
|
||
|
|
const parsed = defineSchema(schema);
|
||
|
|
const parsedValue = parsed.parse(value);
|
||
|
|
const isValid = parsed.validator(parsedValue);
|
||
|
|
|
||
|
|
console.log(` Parsed: ${JSON.stringify(parsedValue)}`);
|
||
|
|
console.log(` Valid: ${isValid}`);
|
||
|
|
console.log(' ✓ Passed\n');
|
||
|
|
} catch (error) {
|
||
|
|
console.log(` ✗ Failed: ${(error as Error).message}\n`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log('=== Testing Validation ===\n');
|
||
|
|
|
||
|
|
const stringSchema = defineSchema('string');
|
||
|
|
console.log('String schema validation:');
|
||
|
|
console.log(` "hello" is valid: ${stringSchema.validator('hello')}`);
|
||
|
|
console.log(` 42 is valid: ${stringSchema.validator(42)}\n`);
|
||
|
|
|
||
|
|
const numberSchema = defineSchema('number');
|
||
|
|
console.log('Number schema validation:');
|
||
|
|
console.log(` 42 is valid: ${numberSchema.validator(42)}`);
|
||
|
|
console.log(` "42" is valid: ${numberSchema.validator('42')}\n`);
|
||
|
|
|
||
|
|
const tupleSchema = defineSchema('[string; number; boolean]');
|
||
|
|
console.log('Tuple [string; number; boolean] validation:');
|
||
|
|
console.log(` ["hello", 42, true] is valid: ${tupleSchema.validator(['hello', 42, true])}`);
|
||
|
|
console.log(` ["hello", "42", true] is valid: ${tupleSchema.validator(['hello', '42', true])}\n`);
|
||
|
|
|
||
|
|
const arraySchema = defineSchema('number[]');
|
||
|
|
console.log('Array number[] validation:');
|
||
|
|
console.log(` [1, 2, 3] is valid: ${arraySchema.validator([1, 2, 3])}`);
|
||
|
|
console.log(` [1, "2", 3] is valid: ${arraySchema.validator([1, '2', 3])}\n`);
|
||
|
|
|
||
|
|
const arrayOfTuplesSchema = defineSchema('[string; number][]');
|
||
|
|
console.log('Array of tuples [string; number][] validation:');
|
||
|
|
console.log(` [["a", 1], ["b", 2]] is valid: ${arrayOfTuplesSchema.validator([['a', 1], ['b', 2]])}`);
|
||
|
|
console.log(` [["a", "1"], ["b", 2]] is valid: ${arrayOfTuplesSchema.validator([['a', '1'], ['b', 2]])}\n`);
|
||
|
|
|
||
|
|
console.log('=== All tests completed ===');
|