-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.test.ts
171 lines (168 loc) · 9.06 KB
/
index.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
import {
GetDateArrayPropOrDefault,
GetDateArrayPropOrDefaultFunction, GetDateArrayPropOrThrow,
GetDatePropOrDefault,
GetDatePropOrDefaultFunction, GetDatePropOrThrow,
GetNumberPropOrDefault,
GetNumberPropOrDefaultFunction,
GetNumberPropOrThrow,
GetObjectArrayFunctionPropOrDefault,
GetObjectArrayFunctionPropOrThrow,
GetObjectArrayPropOrDefault, GetObjectArrayPropOrDefaultFunction,
GetObjectArrayPropOrThrow,
GetObjectFunctionPropOrDefault,
GetObjectFunctionPropOrThrow,
GetObjectPropOrDefault,
GetObjectPropOrDefaultFunction,
GetObjectPropOrThrow,
GetStringArrayPropOrDefault,
GetStringArrayPropOrDefaultFunction,
GetStringArrayPropOrThrow,
GetStringPropOrDefault,
GetStringPropOrDefaultFunction,
GetStringPropOrThrow
} from "./index";
describe("strings", () => {
test("PropOrDefaultFunction", () => {
expect(GetStringPropOrDefaultFunction({ A: "abc" }, "A", () => null)).toEqual("abc")
// TODO expect(GetStringPropOrDefaultFunction({ A: 123 }, "A", () => null)).toEqual("123")
expect(GetStringPropOrDefaultFunction({ }, "A", () => null)).toBeNull()
})
test("PropOrDefault", () => {
expect(GetStringPropOrDefault({ A: "abc" }, "A", null)).toEqual("abc")
// TODO expect(GetStringPropOrDefault({ A: 123 }, "A", null)).toEqual("123")
expect(GetStringPropOrDefault({ }, "A", null)).toBeNull()
})
test("PropOrThrow", () => {
expect(GetStringPropOrThrow({A:"abc" }, "A")).toEqual("abc")
// TODO expect(GetStringPropOrThrow({ A: 123 }, "A")).toEqual("123")
expect(() => GetStringPropOrThrow({ }, "A")).toThrow()
})
})
describe("numbers", () => {
test("PropOrDefaultFunction", () => {
expect(GetNumberPropOrDefaultFunction({ A: 123 }, "A", () => null)).toEqual(123)
expect(GetNumberPropOrDefaultFunction({ A: "123" }, "A", () => null)).toEqual(123)
expect(GetNumberPropOrDefaultFunction({ }, "A", () => null)).toEqual(null)
})
test("PropOrDefault", () => {
expect(GetNumberPropOrDefault({A: 123 }, 'A', null)).toEqual(123)
expect(GetNumberPropOrDefault({A: "123" }, 'A', null)).toEqual(123)
expect(GetNumberPropOrDefault({}, 'A', null)).toEqual(null)
})
test("PropOrThrow", () => {
expect(GetNumberPropOrThrow({A: 123 }, "A")).toEqual(123)
expect(GetNumberPropOrThrow({A: "123" }, "A")).toEqual(123)
expect(() => GetNumberPropOrThrow({ }, "A")).toThrow()
})
})
describe("dates", () => {
let date = new Date();
test("PropOrDefaultFunction", () => {
expect(GetDatePropOrDefaultFunction({ A: date }, "A", () => null)).toEqual(date)
expect(GetDatePropOrDefaultFunction({ A: 1234 }, "A", () => null)).toEqual(new Date(1234 * 1000))
expect(GetDatePropOrDefaultFunction({ A:"2023-01-01" }, "A", () => null)).toEqual(new Date("2023-01-01"))
expect(GetDatePropOrDefaultFunction({ }, "A", () => null)).toBeNull()
})
test("PropOrDefault", () => {
expect(GetDatePropOrDefault({A: date }, "A", null)).toEqual(date)
expect(GetDatePropOrDefault({A: 1234 }, "A", null)).toEqual(new Date(1234 * 1000))
expect(GetDatePropOrDefault({A:"2023-01-01"}, "A", null)).toEqual(new Date("2023-01-01"))
expect(GetDatePropOrDefault({}, "A", null)).toBeNull()
})
test("PropOrThrow", () => {
expect(GetDatePropOrThrow({A: date }, "A")).toEqual(date)
expect(GetDatePropOrThrow({A: 1234 }, "A")).toEqual(new Date(1234 * 1000))
expect(GetDatePropOrThrow({A:"2023-01-01"}, "A")).toEqual(new Date("2023-01-01"))
expect(() => GetDatePropOrThrow({ }, "A")).toThrow()
})
})
describe("string array", () => {
test("PropOrDefaultFunction", () => {
expect(GetStringArrayPropOrDefaultFunction({ A: ["abc"] }, "A", () => null)).toEqual(["abc"])
// TODO expect(GetStringArrayPropOrDefaultFunction({ A: [123] }, "A", () => null)).toEqual(["123"])
expect(GetStringArrayPropOrDefaultFunction({ }, "A", () => null)).toBeNull()
})
test("PropOrDefault", () => {
expect(GetStringArrayPropOrDefault({ A: ["abc"] }, "A", null)).toEqual(["abc"])
// TODO expect(GetStringArrayPropOrDefault({ A: [123] }, "A", null)).toEqual(["123"])
expect(GetStringArrayPropOrDefault({ }, "A", null)).toBeNull()
})
test("PropOrThrow", () => {
expect(GetStringArrayPropOrThrow({A:["abc"] }, "A")).toEqual(["abc"])
// TODO expect(GetStringArrayPropOrThrow({ A: [123] }, "A")).toEqual(["123"])
expect(() => GetStringArrayPropOrThrow({ }, "A")).toThrow()
})
})
describe("date array", () => {
let date = new Date();
test("PropOrDefaultFunction", () => {
expect(GetDateArrayPropOrDefaultFunction({ A: [date] }, "A", () => null)).toEqual([date])
expect(GetDateArrayPropOrDefaultFunction({ A: [1234] }, "A", () => null)).toEqual([new Date(1234 * 1000)])
expect(GetDateArrayPropOrDefaultFunction({ A:["2023-01-01"] }, "A", () => null)).toEqual([new Date("2023-01-01")])
expect(GetDateArrayPropOrDefaultFunction({ }, "A", () => null)).toBeNull()
})
test("PropOrDefault", () => {
expect(GetDateArrayPropOrDefault({A: [date] }, "A", null)).toEqual([date])
expect(GetDateArrayPropOrDefault({A: [1234] }, "A", null)).toEqual([new Date(1234 * 1000)])
expect(GetDateArrayPropOrDefault({A:["2023-01-01"]}, "A", null)).toEqual([new Date("2023-01-01")])
expect(GetDateArrayPropOrDefault({}, "A", null)).toBeNull()
})
test("PropOrThrow", () => {
expect(GetDateArrayPropOrThrow({A: [date] }, "A")).toEqual([date])
expect(GetDateArrayPropOrThrow({A: [1234] }, "A")).toEqual([new Date(1234 * 1000)])
expect(GetDateArrayPropOrThrow({A:["2023-01-01"]}, "A")).toEqual([new Date("2023-01-01")])
expect(() => GetDateArrayPropOrThrow({ }, "A")).toThrow()
})
})
class TestObject {
constructor(
props : Partial<Record<keyof TestObject, unknown>> | null = null,
public A : string = GetStringPropOrDefault(props, "A", ""),
) {
}
}
describe("object", () => {
test("PropOrThrow", () => {
expect(GetObjectPropOrThrow<TestObject | null>({ A: { A: "abc" } }, "A")).toEqual({ A: "abc" })
expect(() => GetObjectPropOrThrow<TestObject | null>(null, "A")).toThrow()
})
test("FunctionPropOrThrow", () => {
expect(GetObjectFunctionPropOrThrow<TestObject | null>({ A: { A: "abc" } }, "A", (e) => new TestObject(e) )).toEqual({ A: "abc" })
expect(() => GetObjectFunctionPropOrThrow<TestObject | null>(null, "A", (e) => new TestObject(e))).toThrow()
})
test("PropOrDefault", () => {
expect(GetObjectPropOrDefault<TestObject | null>({ A: { A: "abc" } }, 'A', null)).toEqual({ A: "abc" })
expect(GetObjectPropOrDefault<TestObject | null>(null, 'A', null)).toBeNull()
})
test("FunctionPropOrDefault", () => {
expect(GetObjectFunctionPropOrDefault<TestObject | null>({ A: { A: "abc" } }, "A", (e) => new TestObject(e), null)).toEqual({ A: "abc" })
expect(GetObjectFunctionPropOrDefault<TestObject | null>(null, "A", (e) => new TestObject(e), null)).toBeNull()
})
test("PropOrDefaultFunction", () => {
expect(GetObjectPropOrDefaultFunction<TestObject | null>({ A: { A: "abc" } }, "A", (e) => new TestObject(e), () => null)).toEqual({ A: "abc" })
expect(GetObjectPropOrDefaultFunction<TestObject | null>({}, "A", (e) => new TestObject(e), () => null)).toBeNull()
})
})
describe("object array", () => {
test("PropOrThrow", () => {
expect(GetObjectArrayPropOrThrow<TestObject, TestObject[] | null>({ A: [{ A: "abc" }] }, "A")).toEqual([{ A: "abc" }])
expect(() => GetObjectArrayPropOrThrow<TestObject, TestObject[] | null>(null, "A")).toThrow()
})
test("FunctionPropOrThrow", () => {
expect(GetObjectArrayFunctionPropOrThrow<TestObject, TestObject[] | null>({ A: [{ A: "abc" }] }, "A", (e) => new TestObject(e) )).toEqual([{ A: "abc" }])
expect(() => GetObjectArrayFunctionPropOrThrow<TestObject, TestObject[] | null>(null, "A", (e) => new TestObject(e))).toThrow()
})
test("PropOrDefault", () => {
expect(GetObjectArrayPropOrDefault<TestObject, TestObject[] | null>({ A: [{ A: "abc" }] }, 'A', null)).toEqual([{ A: "abc" }])
expect(GetObjectArrayPropOrDefault<TestObject, TestObject[] | null>(null, 'A', null)).toBeNull()
})
test("FunctionPropOrDefault", () => {
expect(GetObjectArrayFunctionPropOrDefault<TestObject, TestObject[] | null>({ A: [{ A: "abc" }] }, "A", (e) => new TestObject(e), null)).toEqual([{ A: "abc" }])
expect(GetObjectArrayFunctionPropOrDefault<TestObject, TestObject[] | null>(null, "A", (e) => new TestObject(e), null)).toBeNull()
})
test("PropOrDefaultFunction", () => {
expect(GetObjectArrayPropOrDefaultFunction<TestObject, TestObject[] | null>({ A: [{ A: "abc" }] }, "A", (e) => new TestObject(e), () => null)).toEqual([{ A: "abc" }])
expect(GetObjectArrayPropOrDefaultFunction<TestObject, TestObject[] | null>({}, "A", (e) => new TestObject(e), () => null)).toBeNull()
})
})