-
-
Notifications
You must be signed in to change notification settings - Fork 58
/
clone.test.ts
96 lines (73 loc) · 2.21 KB
/
clone.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
import { attest, contextualize } from "@ark/attest"
import { type } from "arktype"
contextualize(() => {
it("preserves the original references if no morphs are present", () => {
const t = type({
foo: "string"
})
const original = { foo: "bar" }
const out = t(original)
attest(out).is(original)
})
it("clones by default before morphing", () => {
const t = type({
foo: "string.trim"
})
const original = { foo: " bar " }
const out = t(original)
attest(out).snap({ foo: "bar" })
attest(original).snap({ foo: " bar " })
})
it("default clone implementation preserves prototypes", () => {
const t = type(["Date", "=>", d => d.toISOString()])
attest(t.from(new Date(2000, 1))).equals("2000-02-01T05:00:00.000Z")
})
it("can be configured to mutate", () => {
const types = type.module(
{
trimAndMutate: { foo: "string.trim" }
},
{ clone: false }
)
const original = { foo: " bar " }
const out = types.trimAndMutate(original)
attest(out).snap({ foo: "bar" })
attest(out).is(original)
})
it("can be configured to mutate", () => {
const types = type.module(
{
trimAndMutate: { foo: "string.trim" }
},
{ clone: false }
)
const original = { foo: " bar " }
const out = types.trimAndMutate(original)
attest(out).snap({ foo: "bar" })
attest(out).is(original)
})
it("can be configured to use a custom clone implementation", () => {
const types = type.module(
{
trimAndMutate: { foo: "string.trim" }
},
{ clone: original => ({ ...original, customCloned: true }) }
)
const out = types.trimAndMutate({ foo: " bar " })
attest(out).unknown.snap({ foo: "bar", customCloned: true })
})
// process.env is an exotic object- ensure it is correctly cloned
// https://discord.com/channels/957797212103016458/1116551844710330458
it("can clone process.env", () => {
const env = type({
"+": "delete",
TZ: "'America/New_York'"
})
const originalEnv = { ...process.env }
const vars = env(process.env)
attest(vars).snap({ TZ: "America/New_York" })
// if process.env is not spread here, the assertion fails apparently
// because it's an exotic object? seems like a Node bug
attest({ ...process.env }).equals(originalEnv)
})
})