tynder
Version:
TypeScript friendly Data validator for JavaScript.
105 lines (99 loc) • 4.63 kB
text/typescript
import { TypeAssertion,
ValidationContext } from '../types';
import { validate,
isType,
assertType,
getType } from '../validator';
import { pick,
patch } from '../picker';
import { compile } from '../compiler';
import { generateTypeScriptCode } from '../codegen';
import { serialize,
deserialize,
deserializeFromObject } from '../serializer';
import { stereotypes as dateStereotypes } from '../stereotypes/date';
import { constraints as uniqueConstraints } from '../constraints/unique';
import primitivesSchema,
{ Schema as PrimitivesSchema } from '../../examples/schema/_compiled/primitives';
describe("fix-5", function() {
it("unique-1", function() {
const ty = getType(deserializeFromObject(primitivesSchema), PrimitivesSchema.NumberType);
expect(ty).toEqual({
kind: 'primitive',
primitiveName: 'number',
typeName: 'NumberType',
name: 'NumberType',
});
});
it("empty-string-literal-1", function() {
const schemas = [compile(`
type A = '';
type B = 'a';
`), compile(`
type A = "";
type B = "a";
`), compile(`
type A = \`\`;
type B = \`a\`;
`)];
for (const schema of schemas) {
{
expect(Array.from(schema.keys())).toEqual([
'A', 'B',
]);
}
for (const ty of [getType(deserialize(serialize(schema)), 'A'), getType(schema, 'A')]) {
const rhs: TypeAssertion = {
name: 'A',
typeName: 'A',
kind: 'primitive-value',
value: '',
};
expect(ty).toEqual(rhs);
expect(validate<string>(0, ty)).toEqual(null);
expect(validate<string>(1, ty)).toEqual(null);
expect(validate<string>(1.1, ty)).toEqual(null);
expect(validate<string>(BigInt(0), ty)).toEqual(null);
expect(validate<string>(BigInt(1), ty)).toEqual(null);
expect(validate<string>('', ty)).toEqual({value: ''});
expect(validate<string>('a', ty)).toEqual(null);
expect(validate<string>(false, ty)).toEqual(null);
expect(validate<string>(true, ty)).toEqual(null);
expect(validate<string>(null, ty)).toEqual(null);
expect(validate<string>(void 0, ty)).toEqual(null);
expect(validate<string>({}, ty)).toEqual(null);
expect(validate<string>([], ty)).toEqual(null);
expect(validate<string>(3, ty)).toEqual(null);
expect(validate<string>(BigInt(7), ty)).toEqual(null);
expect(validate<string>('XB', ty)).toEqual(null);
expect(validate<string>(true, ty)).toEqual(null);
}
for (const ty of [getType(deserialize(serialize(schema)), 'B'), getType(schema, 'B')]) {
const rhs: TypeAssertion = {
name: 'B',
typeName: 'B',
kind: 'primitive-value',
value: 'a',
};
expect(ty).toEqual(rhs);
expect(validate<string>(0, ty)).toEqual(null);
expect(validate<string>(1, ty)).toEqual(null);
expect(validate<string>(1.1, ty)).toEqual(null);
expect(validate<string>(BigInt(0), ty)).toEqual(null);
expect(validate<string>(BigInt(1), ty)).toEqual(null);
expect(validate<string>('', ty)).toEqual(null);
expect(validate<string>('a', ty)).toEqual({value: 'a'});
expect(validate<string>(false, ty)).toEqual(null);
expect(validate<string>(true, ty)).toEqual(null);
expect(validate<string>(null, ty)).toEqual(null);
expect(validate<string>(void 0, ty)).toEqual(null);
expect(validate<string>({}, ty)).toEqual(null);
expect(validate<string>([], ty)).toEqual(null);
expect(validate<string>(3, ty)).toEqual(null);
expect(validate<string>(BigInt(7), ty)).toEqual(null);
expect(validate<string>('XB', ty)).toEqual(null);
expect(validate<string>(true, ty)).toEqual(null);
}
}
});
});