Skip to main content
Module

x/zod/__tests__/primitive.test.ts

TypeScript-first schema validation with static type inference
Extremely Popular
Go to Latest
File
// @ts-ignore TS6133import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";const test = Deno.test;
import { util } from "../helpers/util.ts";import * as z from "../index.ts";import { Mocker } from "./Mocker.ts";
const literalStringSchema = z.literal("asdf");const literalNumberSchema = z.literal(12);const literalBooleanSchema = z.literal(true);const literalBigIntSchema = z.literal(BigInt(42));const MySymbol = Symbol("stuff");const literalSymbolSchema = z.literal(MySymbol);const stringSchema = z.string();const numberSchema = z.number();const bigintSchema = z.bigint();const booleanSchema = z.boolean();const dateSchema = z.date();const symbolSchema = z.symbol();
const nullSchema = z.null();const undefinedSchema = z.undefined();const stringSchemaOptional = z.string().optional();const stringSchemaNullable = z.string().nullable();const numberSchemaOptional = z.number().optional();const numberSchemaNullable = z.number().nullable();const bigintSchemaOptional = z.bigint().optional();const bigintSchemaNullable = z.bigint().nullable();const booleanSchemaOptional = z.boolean().optional();const booleanSchemaNullable = z.boolean().nullable();const dateSchemaOptional = z.date().optional();const dateSchemaNullable = z.date().nullable();const symbolSchemaOptional = z.symbol().optional();const symbolSchemaNullable = z.symbol().nullable();
const val = new Mocker();
test("literal string correct", () => { expect(literalStringSchema.parse("asdf")).toBe("asdf");});
test("literal string incorrect", () => { const f = () => literalStringSchema.parse("not_asdf"); expect(f).toThrow();});
test("literal string number", () => { const f = () => literalStringSchema.parse(123); expect(f).toThrow();});
test("literal string boolean", () => { const f = () => literalStringSchema.parse(true); expect(f).toThrow();});
test("literal string boolean", () => { const f = () => literalStringSchema.parse(true); expect(f).toThrow();});
test("literal string object", () => { const f = () => literalStringSchema.parse({}); expect(f).toThrow();});
test("literal number correct", () => { expect(literalNumberSchema.parse(12)).toBe(12);});
test("literal number incorrect", () => { const f = () => literalNumberSchema.parse(13); expect(f).toThrow();});
test("literal number number", () => { const f = () => literalNumberSchema.parse(val.string); expect(f).toThrow();});
test("literal number boolean", () => { const f = () => literalNumberSchema.parse(val.boolean); expect(f).toThrow();});
test("literal number object", () => { const f = () => literalStringSchema.parse({}); expect(f).toThrow();});
test("literal boolean correct", () => { expect(literalBooleanSchema.parse(true)).toBe(true);});
test("literal boolean incorrect", () => { const f = () => literalBooleanSchema.parse(false); expect(f).toThrow();});
test("literal boolean number", () => { const f = () => literalBooleanSchema.parse("asdf"); expect(f).toThrow();});
test("literal boolean boolean", () => { const f = () => literalBooleanSchema.parse(123); expect(f).toThrow();});
test("literal boolean object", () => { const f = () => literalBooleanSchema.parse({}); expect(f).toThrow();});
test("literal bigint correct", () => { expect(literalBigIntSchema.parse(BigInt(42))).toBe(BigInt(42));});
test("literal bigint incorrect", () => { const f = () => literalBigIntSchema.parse(BigInt(43)); expect(f).toThrow();});
test("literal bigint number", () => { const f = () => literalBigIntSchema.parse("asdf"); expect(f).toThrow();});
test("literal bigint boolean", () => { const f = () => literalBigIntSchema.parse(123); expect(f).toThrow();});
test("literal bigint object", () => { const f = () => literalBigIntSchema.parse({}); expect(f).toThrow();});
test("literal symbol", () => { util.assertEqual<z.infer<typeof literalSymbolSchema>, typeof MySymbol>(true); literalSymbolSchema.parse(MySymbol); expect(() => literalSymbolSchema.parse(Symbol("asdf"))).toThrow();});
test("parse stringSchema string", () => { stringSchema.parse(val.string);});
test("parse stringSchema number", () => { const f = () => stringSchema.parse(val.number); expect(f).toThrow();});
test("parse stringSchema boolean", () => { const f = () => stringSchema.parse(val.boolean); expect(f).toThrow();});
test("parse stringSchema undefined", () => { const f = () => stringSchema.parse(val.undefined); expect(f).toThrow();});
test("parse stringSchema null", () => { const f = () => stringSchema.parse(val.null); expect(f).toThrow();});
test("parse numberSchema string", () => { const f = () => numberSchema.parse(val.string); expect(f).toThrow();});
test("parse numberSchema number", () => { numberSchema.parse(val.number);});
test("parse numberSchema bigint", () => { const f = () => numberSchema.parse(val.bigint); expect(f).toThrow();});
test("parse numberSchema boolean", () => { const f = () => numberSchema.parse(val.boolean); expect(f).toThrow();});
test("parse numberSchema undefined", () => { const f = () => numberSchema.parse(val.undefined); expect(f).toThrow();});
test("parse numberSchema null", () => { const f = () => numberSchema.parse(val.null); expect(f).toThrow();});
test("parse bigintSchema string", () => { const f = () => bigintSchema.parse(val.string); expect(f).toThrow();});
test("parse bigintSchema number", () => { const f = () => bigintSchema.parse(val.number); expect(f).toThrow();});
test("parse bigintSchema bigint", () => { bigintSchema.parse(val.bigint);});
test("parse bigintSchema boolean", () => { const f = () => bigintSchema.parse(val.boolean); expect(f).toThrow();});
test("parse bigintSchema undefined", () => { const f = () => bigintSchema.parse(val.undefined); expect(f).toThrow();});
test("parse bigintSchema null", () => { const f = () => bigintSchema.parse(val.null); expect(f).toThrow();});
test("parse booleanSchema string", () => { const f = () => booleanSchema.parse(val.string); expect(f).toThrow();});
test("parse booleanSchema number", () => { const f = () => booleanSchema.parse(val.number); expect(f).toThrow();});
test("parse booleanSchema boolean", () => { booleanSchema.parse(val.boolean);});
test("parse booleanSchema undefined", () => { const f = () => booleanSchema.parse(val.undefined); expect(f).toThrow();});
test("parse booleanSchema null", () => { const f = () => booleanSchema.parse(val.null); expect(f).toThrow();});
// ==============
test("parse dateSchema string", () => { const f = () => dateSchema.parse(val.string); expect(f).toThrow();});
test("parse dateSchema number", () => { const f = () => dateSchema.parse(val.number); expect(f).toThrow();});
test("parse dateSchema boolean", () => { const f = () => dateSchema.parse(val.boolean); expect(f).toThrow();});
test("parse dateSchema date", () => { dateSchema.parse(val.date);});
test("parse dateSchema undefined", () => { const f = () => dateSchema.parse(val.undefined); expect(f).toThrow();});
test("parse dateSchema null", () => { const f = () => dateSchema.parse(val.null); expect(f).toThrow();});
test("parse dateSchema invalid date", async () => { try { await dateSchema.parseAsync(new Date("invalid")); } catch (err) { expect((err as z.ZodError).issues[0].code).toEqual( z.ZodIssueCode.invalid_date ); }});// ==============
test("parse symbolSchema string", () => { const f = () => symbolSchema.parse(val.string); expect(f).toThrow();});
test("parse symbolSchema number", () => { const f = () => symbolSchema.parse(val.number); expect(f).toThrow();});
test("parse symbolSchema boolean", () => { const f = () => symbolSchema.parse(val.boolean); expect(f).toThrow();});
test("parse symbolSchema date", () => { const f = () => symbolSchema.parse(val.date); expect(f).toThrow();});
test("parse symbolSchema symbol", () => { symbolSchema.parse(val.symbol);});
test("parse symbolSchema undefined", () => { const f = () => symbolSchema.parse(val.undefined); expect(f).toThrow();});
test("parse symbolSchema null", () => { const f = () => symbolSchema.parse(val.null); expect(f).toThrow();});
// ==============
test("parse undefinedSchema string", () => { const f = () => undefinedSchema.parse(val.string); expect(f).toThrow();});
test("parse undefinedSchema number", () => { const f = () => undefinedSchema.parse(val.number); expect(f).toThrow();});
test("parse undefinedSchema boolean", () => { const f = () => undefinedSchema.parse(val.boolean); expect(f).toThrow();});
test("parse undefinedSchema undefined", () => { undefinedSchema.parse(val.undefined);});
test("parse undefinedSchema null", () => { const f = () => undefinedSchema.parse(val.null); expect(f).toThrow();});
test("parse nullSchema string", () => { const f = () => nullSchema.parse(val.string); expect(f).toThrow();});
test("parse nullSchema number", () => { const f = () => nullSchema.parse(val.number); expect(f).toThrow();});
test("parse nullSchema boolean", () => { const f = () => nullSchema.parse(val.boolean); expect(f).toThrow();});
test("parse nullSchema undefined", () => { const f = () => nullSchema.parse(val.undefined); expect(f).toThrow();});
test("parse nullSchema null", () => { nullSchema.parse(val.null);});
test("primitive inference", () => { util.assertEqual<z.TypeOf<typeof literalStringSchema>, "asdf">(true); util.assertEqual<z.TypeOf<typeof literalNumberSchema>, 12>(true); util.assertEqual<z.TypeOf<typeof literalBooleanSchema>, true>(true); util.assertEqual<z.TypeOf<typeof literalBigIntSchema>, bigint>(true); util.assertEqual<z.TypeOf<typeof stringSchema>, string>(true); util.assertEqual<z.TypeOf<typeof numberSchema>, number>(true); util.assertEqual<z.TypeOf<typeof bigintSchema>, bigint>(true); util.assertEqual<z.TypeOf<typeof booleanSchema>, boolean>(true); util.assertEqual<z.TypeOf<typeof dateSchema>, Date>(true); util.assertEqual<z.TypeOf<typeof symbolSchema>, symbol>(true);
util.assertEqual<z.TypeOf<typeof nullSchema>, null>(true); util.assertEqual<z.TypeOf<typeof undefinedSchema>, undefined>(true); util.assertEqual<z.TypeOf<typeof stringSchemaOptional>, string | undefined>( true ); util.assertEqual<z.TypeOf<typeof stringSchemaNullable>, string | null>(true); util.assertEqual<z.TypeOf<typeof numberSchemaOptional>, number | undefined>( true ); util.assertEqual<z.TypeOf<typeof numberSchemaNullable>, number | null>(true); util.assertEqual<z.TypeOf<typeof bigintSchemaOptional>, bigint | undefined>( true ); util.assertEqual<z.TypeOf<typeof bigintSchemaNullable>, bigint | null>(true); util.assertEqual<z.TypeOf<typeof booleanSchemaOptional>, boolean | undefined>( true ); util.assertEqual<z.TypeOf<typeof booleanSchemaNullable>, boolean | null>( true ); util.assertEqual<z.TypeOf<typeof dateSchemaOptional>, Date | undefined>(true); util.assertEqual<z.TypeOf<typeof dateSchemaNullable>, Date | null>(true); util.assertEqual<z.TypeOf<typeof symbolSchemaOptional>, symbol | undefined>( true ); util.assertEqual<z.TypeOf<typeof symbolSchemaNullable>, symbol | null>(true);
// [ // literalStringSchemaTest, // literalNumberSchemaTest, // literalBooleanSchemaTest, // literalBigIntSchemaTest, // stringSchemaTest, // numberSchemaTest, // bigintSchemaTest, // booleanSchemaTest, // dateSchemaTest, // symbolSchemaTest,
// nullSchemaTest, // undefinedSchemaTest, // stringSchemaOptionalTest, // stringSchemaNullableTest, // numberSchemaOptionalTest, // numberSchemaNullableTest, // bigintSchemaOptionalTest, // bigintSchemaNullableTest, // booleanSchemaOptionalTest, // booleanSchemaNullableTest, // dateSchemaOptionalTest, // dateSchemaNullableTest, // symbolSchemaOptionalTest, // symbolSchemaNullableTest,
// ];});
test("get literal value", () => { expect(literalStringSchema.value).toEqual("asdf");});
test("optional convenience method", () => { z.ostring().parse(undefined); z.onumber().parse(undefined); z.oboolean().parse(undefined);});