UNPKG

3.88 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.SetPredicate = void 0;
4const isEqual = require("lodash.isequal");
5const has_items_1 = require("../utils/has-items");
6const of_type_1 = require("../utils/of-type");
7const predicate_1 = require("./predicate");
8class SetPredicate extends predicate_1.Predicate {
9 /**
10 @hidden
11 */
12 constructor(options) {
13 super('Set', options);
14 }
15 /**
16 Test a Set to have a specific size.
17
18 @param size - The size of the Set.
19 */
20 size(size) {
21 return this.addValidator({
22 message: (set, label) => `Expected ${label} to have size \`${size}\`, got \`${set.size}\``,
23 validator: set => set.size === size
24 });
25 }
26 /**
27 Test a Set to have a minimum size.
28
29 @param size - The minimum size of the Set.
30 */
31 minSize(size) {
32 return this.addValidator({
33 message: (set, label) => `Expected ${label} to have a minimum size of \`${size}\`, got \`${set.size}\``,
34 validator: set => set.size >= size,
35 negatedMessage: (set, label) => `Expected ${label} to have a maximum size of \`${size - 1}\`, got \`${set.size}\``
36 });
37 }
38 /**
39 Test a Set to have a maximum size.
40
41 @param size - The maximum size of the Set.
42 */
43 maxSize(size) {
44 return this.addValidator({
45 message: (set, label) => `Expected ${label} to have a maximum size of \`${size}\`, got \`${set.size}\``,
46 validator: set => set.size <= size,
47 negatedMessage: (set, label) => `Expected ${label} to have a minimum size of \`${size + 1}\`, got \`${set.size}\``
48 });
49 }
50 /**
51 Test a Set to include all the provided items. The items are tested by identity, not structure.
52
53 @param items - The items that should be a item in the Set.
54 */
55 has(...items) {
56 return this.addValidator({
57 message: (_, label, missingItems) => `Expected ${label} to have items \`${JSON.stringify(missingItems)}\``,
58 validator: set => has_items_1.default(set, items)
59 });
60 }
61 /**
62 Test a Set to include any of the provided items. The items are tested by identity, not structure.
63
64 @param items - The items that could be a item in the Set.
65 */
66 hasAny(...items) {
67 return this.addValidator({
68 message: (_, label) => `Expected ${label} to have any item of \`${JSON.stringify(items)}\``,
69 validator: set => items.some(item => set.has(item))
70 });
71 }
72 /**
73 Test all the items in the Set to match the provided predicate.
74
75 @param predicate - The predicate that should be applied against every item in the Set.
76 */
77 ofType(predicate) {
78 return this.addValidator({
79 message: (_, label, error) => `(${label}) ${error}`,
80 validator: set => of_type_1.default(set, 'values', predicate)
81 });
82 }
83 /**
84 Test a Set to be empty.
85 */
86 get empty() {
87 return this.addValidator({
88 message: (set, label) => `Expected ${label} to be empty, got \`${JSON.stringify([...set])}\``,
89 validator: set => set.size === 0
90 });
91 }
92 /**
93 Test a Set to be not empty.
94 */
95 get nonEmpty() {
96 return this.addValidator({
97 message: (_, label) => `Expected ${label} to not be empty`,
98 validator: set => set.size > 0
99 });
100 }
101 /**
102 Test a Set to be deeply equal to the provided Set.
103
104 @param expected - Expected Set to match.
105 */
106 deepEqual(expected) {
107 return this.addValidator({
108 message: (set, label) => `Expected ${label} to be deeply equal to \`${JSON.stringify([...expected])}\`, got \`${JSON.stringify([...set])}\``,
109 validator: set => isEqual(set, expected)
110 });
111 }
112}
113exports.SetPredicate = SetPredicate;