-
Notifications
You must be signed in to change notification settings - Fork 70
/
Copy pathutil.ts
89 lines (71 loc) · 2.58 KB
/
util.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
import { IsExact, IsNever } from 'conditional-type-checks';
import { Result } from '../src';
import { Observable } from 'rxjs';
export function expect_string<T>(x: T, y: IsExact<T, string>) {}
export function expect_never<T>(x: T, y: IsNever<T>) {}
export function eq<A, B>(x: IsExact<A, B>) {}
declare global {
namespace jest {
interface Matchers<R> {
toMatchResult(result: Result<any, any>): R;
toMatchObsResult(result: Result<any, any>): R;
toMatchObs(value: any): R;
}
}
}
expect.extend({
toMatchResult(received: Result<any, any>, result: Result<any, any>) {
let pass = true;
try {
expect(received.ok).toBe(result.ok);
if (received.val !== result.val) {
expect(received.val).toMatchObject(result.val);
}
} catch (e) {
pass = false;
}
const type = received.ok ? 'Ok' : 'Err';
const expectedType = received.ok ? 'Ok' : 'Err';
const val = JSON.stringify(received.val);
const expectedVal = JSON.stringify(result.val);
return {
message: () => `expected ${type}(${val}) ${pass ? '' : 'not '}to equal ${expectedType}(${expectedVal})`,
pass,
};
},
toMatchObsResult(obs: Observable<Result<any, any>>, result: Result<any, any>) {
let pass = true;
let received: Result<any, any> | undefined;
try {
obs.subscribe((val) => (received = val)).unsubscribe();
expect(received?.ok).toBe(result.ok);
if (received?.val !== result.val) {
expect(received?.val).toMatchObject(result.val);
}
} catch (e) {
pass = false;
}
const type = received?.ok ? 'Ok' : 'Err';
const expectedType = received?.ok ? 'Ok' : 'Err';
const val = JSON.stringify(received?.val);
const expectedVal = JSON.stringify(result.val);
return {
message: () => `expected ${type}(${val}) ${pass ? '' : 'not '}to equal ${expectedType}(${expectedVal})`,
pass,
};
},
toMatchObs(obs: Observable<any>, value: any) {
let pass = true;
let received: any | undefined;
try {
obs.subscribe((val) => (received = val)).unsubscribe();
expect(received).toEqual(value);
} catch (e) {
pass = false;
}
return {
message: () => `expected observable value: ${JSON.stringify(value)}\n\nFound: ${JSON.stringify(received)}`,
pass,
};
},
});