forked from jestjs/jest
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathasymmetric_matcher.js
More file actions
93 lines (82 loc) · 1.94 KB
/
asymmetric_matcher.js
File metadata and controls
93 lines (82 loc) · 1.94 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
/**
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
import type {Config, NewPlugin, Printer, Refs} from 'types/PrettyFormat';
import {printListItems, printObjectProperties} from '../collections';
const asymmetricMatcher = Symbol.for('jest.asymmetricMatcher');
const SPACE = ' ';
export const serialize = (
val: any,
config: Config,
indentation: string,
depth: number,
refs: Refs,
printer: Printer,
): string => {
const stringedValue = val.toString();
if (
stringedValue === 'ArrayContaining' ||
stringedValue === 'ArrayNotContaining'
) {
if (++depth > config.maxDepth) {
return '[' + stringedValue + ']';
}
return (
stringedValue +
SPACE +
'[' +
printListItems(val.sample, config, indentation, depth, refs, printer) +
']'
);
}
if (
stringedValue === 'ObjectContaining' ||
stringedValue === 'ObjectNotContaining'
) {
if (++depth > config.maxDepth) {
return '[' + stringedValue + ']';
}
return (
stringedValue +
SPACE +
'{' +
printObjectProperties(
val.sample,
config,
indentation,
depth,
refs,
printer,
) +
'}'
);
}
if (
stringedValue === 'StringMatching' ||
stringedValue === 'StringNotMatching'
) {
return (
stringedValue +
SPACE +
printer(val.sample, config, indentation, depth, refs)
);
}
if (
stringedValue === 'StringContaining' ||
stringedValue === 'StringNotContaining'
) {
return (
stringedValue +
SPACE +
printer(val.sample, config, indentation, depth, refs)
);
}
return val.toAsymmetricMatcher();
};
export const test = (val: any) => val && val.$$typeof === asymmetricMatcher;
export default ({serialize, test}: NewPlugin);