deno.land / x / zod@v3.19.1 / __tests__ / nativeEnum.test.ts

nativeEnum.test.ts
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// @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";
test("nativeEnum test with consts", () => { const Fruits: { Apple: "apple"; Banana: "banana" } = { Apple: "apple", Banana: "banana", }; const fruitEnum = z.nativeEnum(Fruits); type fruitEnum = z.infer<typeof fruitEnum>; fruitEnum.parse("apple"); fruitEnum.parse("banana"); fruitEnum.parse(Fruits.Apple); fruitEnum.parse(Fruits.Banana); util.assertEqual<fruitEnum, "apple" | "banana">(true);});
test("nativeEnum test with real enum", () => { enum Fruits { Apple = "apple", Banana = "banana", } // @ts-ignore const fruitEnum = z.nativeEnum(Fruits); type fruitEnum = z.infer<typeof fruitEnum>; fruitEnum.parse("apple"); fruitEnum.parse("banana"); fruitEnum.parse(Fruits.Apple); fruitEnum.parse(Fruits.Banana); util.assertIs<fruitEnum extends Fruits ? true : false>(true);});
test("nativeEnum test with const with numeric keys", () => { const FruitValues = { Apple: 10, Banana: 20, // @ts-ignore } as const; const fruitEnum = z.nativeEnum(FruitValues); type fruitEnum = z.infer<typeof fruitEnum>; fruitEnum.parse(10); fruitEnum.parse(20); fruitEnum.parse(FruitValues.Apple); fruitEnum.parse(FruitValues.Banana); util.assertEqual<fruitEnum, 10 | 20>(true);});
test("from enum", () => { enum Fruits { Cantaloupe, Apple = "apple", Banana = "banana", }
const FruitEnum = z.nativeEnum(Fruits as any); type FruitEnum = z.infer<typeof FruitEnum>; FruitEnum.parse(Fruits.Cantaloupe); FruitEnum.parse(Fruits.Apple); FruitEnum.parse("apple"); FruitEnum.parse(0); expect(() => FruitEnum.parse(1)).toThrow(); expect(() => FruitEnum.parse("Apple")).toThrow(); expect(() => FruitEnum.parse("Cantaloupe")).toThrow();});
test("from const", () => { const Greek = { Alpha: "a", Beta: "b", Gamma: 3, // @ts-ignore } as const;
const GreekEnum = z.nativeEnum(Greek); type GreekEnum = z.infer<typeof GreekEnum>; GreekEnum.parse("a"); GreekEnum.parse("b"); GreekEnum.parse(3); expect(() => GreekEnum.parse("v")).toThrow(); expect(() => GreekEnum.parse("Alpha")).toThrow(); expect(() => GreekEnum.parse(2)).toThrow();
expect(GreekEnum.enum.Alpha).toEqual("a");});
zod

Version Info

Tagged at
a year ago