-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path_assert_test.js
More file actions
170 lines (131 loc) · 4.3 KB
/
_assert_test.js
File metadata and controls
170 lines (131 loc) · 4.3 KB
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
// Copyright Titanium I.T. LLC.
import assert from "util/assert.js";
describe("Assert", () => {
describe("includes()", () => {
it("passes if actual includes string", () => {
expectPass(() => {
assert.includes("abcdef", "bcd");
});
});
it("fails if actual doesn't include string", () => {
expectFail(() => {
assert.includes("abcdef", "xxx");
}, "'abcdef' should include 'xxx'", "abcdef", "xxx");
});
});
describe("notIncludes()", () => {
it("passes if actual doesn't include string", function() {
expectPass(() => {
assert.notIncludes("abcdef", "xxx");
});
});
it("fails if actual does include string", function() {
expectFail(() => {
assert.notIncludes("abcdef", "bcd");
}, "'abcdef' should not include 'bcd'", "abcdef", "bcd");
});
});
describe("throwsAsync()", () => {
it("passes if function throws and there's no expectation", async () => {
await expectPassAsync(async () => {
await assert.throwsAsync(() => Promise.reject(new Error("any error")));
});
});
it("passes if function throws and error message matches expected string", async () => {
await expectPassAsync(async () => {
await assert.throwsAsync(
() => Promise.reject(new Error("my error")),
"my error"
);
});
});
it("passes if function throws and error message matches regex", async () => {
await expectPassAsync(async () => {
await assert.throwsAsync(
() => Promise.reject(new Error("my complicated error message")),
/complicated/
);
});
});
it("fails if function doesn't throw", async () => {
await expectFailAsync(async () => {
await assert.throwsAsync(() => Promise.resolve());
}, "Expected exception");
});
it("fails if function throws and error message doesn't match expected string", async () => {
await expectFailAsync(async () => {
await assert.throwsAsync(
() => Promise.reject(new Error("my error")),
"not my error"
);
}, "expected 'my error' to equal 'not my error'", "my error", "not my error");
});
it("passes if function throws and error message doesn't match regex", async () => {
await expectFailAsync(async () => {
await assert.throwsAsync(
() => Promise.reject(new Error("my complicated error message")),
/not-found/
);
}, "expected 'my complicated error message' to match /not-found/", "my complicated error message", /not-found/);
});
});
describe("doesNotThrowAsync()", () => {
it("passes if function does not throw exception", async () => {
await expectPassAsync(async () => {
await assert.doesNotThrowAsync(() => Promise.resolve());
});
});
it("fails if function does throw exception", async () => {
await expectFailAsync(async () => {
await assert.doesNotThrowAsync(() => Promise.reject(new Error("my error")));
}, "my error");
});
});
describe("promiseDoesNotResolveAsync()", () => {
it("passes if promise doesn't resolve", async () => {
await expectPassAsync(async () => {
const promise = new Promise(() => {});
await assert.promiseDoesNotResolveAsync(promise);
});
});
it("fails if promise does resolve", async () => {
await expectFailAsync(async () => {
const promise = new Promise((resolve) => setImmediate(resolve));
await assert.promiseDoesNotResolveAsync(promise);
}, "Expected promise to not resolve, but it did");
});
});
});
function expectPass(fn) {
fn();
}
function expectFail(fn, expectedFailureMessage, actual, expected) {
try {
fn();
assert.fail("Expected assertion to fail, but it passed");
}
catch (err) {
checkError(err, actual, expected, expectedFailureMessage);
}
}
async function expectPassAsync(fnAsync) {
await fnAsync();
}
async function expectFailAsync(fnAsync, expectedFailureMessage, actual, expected) {
try {
await fnAsync();
assert.fail("Expected assertion to fail, but it passed");
}
catch (err) {
checkError(err, actual, expected, expectedFailureMessage);
}
}
function checkError(err, actual, expected, expectedFailureMessage) {
assert.equal(err.message, expectedFailureMessage, "failure message");
check(err.expected, expected, "expected");
check(err.actual, actual, "actual");
function check(actual, expected, message) {
if (actual === undefined) assert.isUndefined(actual, message);
else assert.deepEqual(actual, expected, message);
}
}