1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.SetPredicate = void 0;
|
4 | const isEqual = require("lodash.isequal");
|
5 | const has_items_1 = require("../utils/has-items");
|
6 | const of_type_1 = require("../utils/of-type");
|
7 | const predicate_1 = require("./predicate");
|
8 | class SetPredicate extends predicate_1.Predicate {
|
9 | |
10 |
|
11 |
|
12 | constructor(options) {
|
13 | super('Set', options);
|
14 | }
|
15 | |
16 |
|
17 |
|
18 |
|
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 |
|
40 |
|
41 |
|
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 |
|
52 |
|
53 |
|
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 | }
|
113 | exports.SetPredicate = SetPredicate;
|