@plugjs/expect5 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/cli.mjs +2 -2
  2. package/dist/cli.mjs.map +1 -1
  3. package/dist/execution/executor.cjs.map +1 -1
  4. package/dist/execution/executor.d.ts +1 -1
  5. package/dist/execution/executor.mjs +1 -1
  6. package/dist/execution/executor.mjs.map +1 -1
  7. package/dist/execution/setup.cjs.map +1 -1
  8. package/dist/execution/setup.d.ts +1 -1
  9. package/dist/execution/setup.mjs +1 -1
  10. package/dist/execution/setup.mjs.map +1 -1
  11. package/dist/expectation/async.cjs +58 -45
  12. package/dist/expectation/async.cjs.map +1 -1
  13. package/dist/expectation/async.d.ts +53 -52
  14. package/dist/expectation/async.mjs +59 -42
  15. package/dist/expectation/async.mjs.map +1 -1
  16. package/dist/expectation/diff.cjs.map +1 -1
  17. package/dist/expectation/diff.mjs +6 -1
  18. package/dist/expectation/diff.mjs.map +1 -1
  19. package/dist/expectation/expect.cjs +11 -165
  20. package/dist/expectation/expect.cjs.map +2 -2
  21. package/dist/expectation/expect.d.ts +10 -112
  22. package/dist/expectation/expect.mjs +12 -207
  23. package/dist/expectation/expect.mjs.map +2 -2
  24. package/dist/expectation/expectations.cjs +549 -0
  25. package/dist/expectation/expectations.cjs.map +6 -0
  26. package/dist/expectation/expectations.d.ts +454 -0
  27. package/dist/expectation/expectations.mjs +530 -0
  28. package/dist/expectation/expectations.mjs.map +6 -0
  29. package/dist/expectation/include.cjs +43 -41
  30. package/dist/expectation/include.cjs.map +1 -1
  31. package/dist/expectation/include.d.ts +3 -19
  32. package/dist/expectation/include.mjs +43 -41
  33. package/dist/expectation/include.mjs.map +1 -1
  34. package/dist/expectation/matchers.cjs +350 -0
  35. package/dist/expectation/matchers.cjs.map +6 -0
  36. package/dist/expectation/matchers.d.ts +375 -0
  37. package/dist/expectation/matchers.mjs +328 -0
  38. package/dist/expectation/matchers.mjs.map +6 -0
  39. package/dist/expectation/print.cjs.map +1 -1
  40. package/dist/expectation/print.d.ts +2 -2
  41. package/dist/expectation/print.mjs.map +1 -1
  42. package/dist/expectation/types.cjs +17 -23
  43. package/dist/expectation/types.cjs.map +1 -1
  44. package/dist/expectation/types.d.ts +7 -51
  45. package/dist/expectation/types.mjs +17 -22
  46. package/dist/expectation/types.mjs.map +1 -1
  47. package/dist/globals.d.ts +2 -2
  48. package/dist/index.cjs +5 -5
  49. package/dist/index.cjs.map +1 -1
  50. package/dist/index.d.ts +3 -4
  51. package/dist/index.mjs +11 -12
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/test.cjs +34 -5
  54. package/dist/test.cjs.map +1 -1
  55. package/dist/test.d.ts +2 -2
  56. package/dist/test.mjs +35 -6
  57. package/dist/test.mjs.map +1 -1
  58. package/package.json +2 -2
  59. package/src/cli.mts +1 -1
  60. package/src/execution/executor.ts +1 -3
  61. package/src/execution/setup.ts +1 -3
  62. package/src/expectation/async.ts +116 -145
  63. package/src/expectation/diff.ts +7 -3
  64. package/src/expectation/expect.ts +22 -362
  65. package/src/expectation/expectations.ts +971 -0
  66. package/src/expectation/include.ts +59 -75
  67. package/src/expectation/matchers.ts +698 -0
  68. package/src/expectation/print.ts +8 -4
  69. package/src/expectation/types.ts +22 -94
  70. package/src/globals.ts +2 -2
  71. package/src/index.ts +17 -10
  72. package/src/test.ts +34 -10
  73. package/dist/expectation/basic.cjs +0 -188
  74. package/dist/expectation/basic.cjs.map +0 -6
  75. package/dist/expectation/basic.d.ts +0 -90
  76. package/dist/expectation/basic.mjs +0 -156
  77. package/dist/expectation/basic.mjs.map +0 -6
  78. package/dist/expectation/throwing.cjs +0 -58
  79. package/dist/expectation/throwing.cjs.map +0 -6
  80. package/dist/expectation/throwing.d.ts +0 -36
  81. package/dist/expectation/throwing.mjs +0 -32
  82. package/dist/expectation/throwing.mjs.map +0 -6
  83. package/dist/expectation/trivial.cjs +0 -96
  84. package/dist/expectation/trivial.cjs.map +0 -6
  85. package/dist/expectation/trivial.d.ts +0 -13
  86. package/dist/expectation/trivial.mjs +0 -61
  87. package/dist/expectation/trivial.mjs.map +0 -6
  88. package/src/expectation/basic.ts +0 -413
  89. package/src/expectation/throwing.ts +0 -106
  90. package/src/expectation/trivial.ts +0 -107
@@ -0,0 +1,549 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // expectation/expectations.ts
21
+ var expectations_exports = {};
22
+ __export(expectations_exports, {
23
+ Expectations: () => Expectations,
24
+ NegativeExpectations: () => NegativeExpectations
25
+ });
26
+ module.exports = __toCommonJS(expectations_exports);
27
+ var import_diff = require("./diff.cjs");
28
+ var import_include = require("./include.cjs");
29
+ var import_types = require("./types.cjs");
30
+ var Expectations = class {
31
+ /**
32
+ * Create an {@link Expectations} instance associated with the specified
33
+ * value and error remarks.
34
+ *
35
+ * Optionally a parent {@link Expectations} instance can be specified.
36
+ */
37
+ constructor(value, remarks, parent) {
38
+ this.value = value;
39
+ this.remarks = remarks;
40
+ this.parent = parent;
41
+ this.not = new NegativeExpectations(this);
42
+ }
43
+ /** The {@link NegativeExpectations} associated with _this_ */
44
+ not;
45
+ /** Throw an {@link ExpectationError} associated with _this_ */
46
+ _fail(details, diff2) {
47
+ throw new import_types.ExpectationError(this, details, diff2);
48
+ }
49
+ /* ------------------------------------------------------------------------ *
50
+ * BASIC *
51
+ * ------------------------------------------------------------------------ */
52
+ /**
53
+ * Expects the value to be of the specified _extended_ {@link TypeName type},
54
+ * and (if specified) further asserts it with an {@link AssertionFunction}.
55
+ *
56
+ * Negation: {@link NegativeExpectations.toBeA `not.toBeA(...)`}
57
+ */
58
+ toBeA(type, assertion) {
59
+ if ((0, import_types.typeOf)(this.value) === type) {
60
+ if (assertion)
61
+ assertion(this);
62
+ return this;
63
+ }
64
+ this._fail(`to be ${(0, import_types.prefixType)(type)}`);
65
+ }
66
+ toBeCloseTo(value, delta) {
67
+ const min = value - delta;
68
+ const max = value + delta;
69
+ return this.toBeWithinRange(min, max);
70
+ }
71
+ /* ------------------------------------------------------------------------ */
72
+ /**
73
+ * Expects the value to be neither `null` nor `undefined`.
74
+ *
75
+ * Negation: {@link NegativeExpectations.toBeDefined `not.toBeDefined()`}
76
+ */
77
+ toBeDefined() {
78
+ if (this.value !== null && this.value !== void 0)
79
+ return this;
80
+ this._fail(`to be neither ${(0, import_types.stringifyValue)(null)} nor ${(0, import_types.stringifyValue)(void 0)}`);
81
+ }
82
+ toBeError(constructorOrMessage, maybeMessage) {
83
+ const [constructor, message] = typeof constructorOrMessage === "function" ? [constructorOrMessage, maybeMessage] : [Error, constructorOrMessage];
84
+ if (message === void 0)
85
+ return this.toBeInstanceOf(constructor);
86
+ return this.toBeInstanceOf(constructor, (assert) => {
87
+ assert.toHaveProperty("message", (assertMessage) => {
88
+ assertMessage.toBeA("string");
89
+ if (typeof message === "string")
90
+ assertMessage.toStrictlyEqual(message);
91
+ else
92
+ assertMessage.toMatch(message);
93
+ });
94
+ });
95
+ }
96
+ /* ------------------------------------------------------------------------ */
97
+ /** Expects the value strictly equal to `false`. */
98
+ toBeFalse() {
99
+ return this.toStrictlyEqual(false);
100
+ }
101
+ /* ------------------------------------------------------------------------ */
102
+ /**
103
+ * Expects the value to be _falsy_ (zero, empty string, `false`, ...).
104
+ *
105
+ * Negation: {@link Expectations.toBeTruthy `toBeTruthy()`}
106
+ */
107
+ toBeFalsy() {
108
+ if (!this.value)
109
+ return this;
110
+ this._fail("to be falsy");
111
+ }
112
+ toBeGreaterThan(value) {
113
+ this.toBeA(typeof value);
114
+ if (this.value > value)
115
+ return this;
116
+ this._fail(`to be greater than ${(0, import_types.stringifyValue)(value)}`);
117
+ }
118
+ toBeGreaterThanOrEqual(value) {
119
+ this.toBeA(typeof value);
120
+ if (this.value >= value)
121
+ return this;
122
+ this._fail(`to be greater than or equal to ${(0, import_types.stringifyValue)(value)}`);
123
+ }
124
+ /* ------------------------------------------------------------------------ */
125
+ /**
126
+ * Expects the value to be an instance of the specified {@link Constructor},
127
+ * and (if specified) further asserts it with an {@link AssertionFunction}.
128
+ *
129
+ * Negation: {@link NegativeExpectations.toBeInstanceOf `not.toInstanceOf(...)`}
130
+ */
131
+ toBeInstanceOf(constructor, assertion) {
132
+ if (this.value instanceof constructor) {
133
+ if (assertion)
134
+ assertion(this);
135
+ return this;
136
+ }
137
+ this._fail(`to be an instance of ${(0, import_types.stringifyConstructor)(constructor)}`);
138
+ }
139
+ toBeLessThan(value) {
140
+ this.toBeA(typeof value);
141
+ if (this.value < value)
142
+ return this;
143
+ this._fail(`to be less than ${(0, import_types.stringifyValue)(value)}`);
144
+ }
145
+ toBeLessThanOrEqual(value) {
146
+ this.toBeA(typeof value);
147
+ if (this.value <= value)
148
+ return this;
149
+ this._fail(`to be less than or equal to ${(0, import_types.stringifyValue)(value)}`);
150
+ }
151
+ /* ------------------------------------------------------------------------ */
152
+ /**
153
+ * Expects the value to be `NaN`.
154
+ *
155
+ * Negation: {@link NegativeExpectations.toBeNaN `not.toBeNaN()`}
156
+ */
157
+ toBeNaN() {
158
+ const expectations = this.toBeA("number");
159
+ if (isNaN(expectations.value))
160
+ return expectations;
161
+ this._fail(`to be ${(0, import_types.stringifyValue)(NaN)}`);
162
+ }
163
+ /* ------------------------------------------------------------------------ */
164
+ /** Expects the value to strictly equal `null`. */
165
+ toBeNull() {
166
+ return this.toStrictlyEqual(null);
167
+ }
168
+ /* ------------------------------------------------------------------------ */
169
+ /** Expects the value to strictly equal `true`. */
170
+ toBeTrue() {
171
+ return this.toStrictlyEqual(true);
172
+ }
173
+ /* ------------------------------------------------------------------------ */
174
+ /**
175
+ * Expects the value to be _falsy_ (non-zero, non-empty string, ...).
176
+ *
177
+ * Negation: {@link Expectations.toBeFalsy `toBeFalsy()`}
178
+ */
179
+ toBeTruthy() {
180
+ if (this.value)
181
+ return this;
182
+ this._fail("to be truthy");
183
+ }
184
+ /* ------------------------------------------------------------------------ */
185
+ /** Expects the value to strictly equal `undefined`. */
186
+ toBeUndefined() {
187
+ return this.toStrictlyEqual(void 0);
188
+ }
189
+ toBeWithinRange(min, max) {
190
+ if (max < min) {
191
+ const num = max;
192
+ max = min;
193
+ min = num;
194
+ }
195
+ this.toBeA(typeof min);
196
+ if (this.value < min || this.value > max) {
197
+ this._fail(`to be within ${(0, import_types.stringifyValue)(min)}...${(0, import_types.stringifyValue)(max)}`);
198
+ }
199
+ return this;
200
+ }
201
+ /* ------------------------------------------------------------------------ */
202
+ /**
203
+ * Expects the value to be _deep equal to_ the specified expected one.
204
+ *
205
+ * Negation: {@link NegativeExpectations.toEqual `not.toEqual(...)`}
206
+ */
207
+ toEqual(expected) {
208
+ if (this.value === expected)
209
+ return this;
210
+ const result = (0, import_diff.diff)(this.value, expected);
211
+ if (result.diff) {
212
+ if ((0, import_types.isMatcher)(expected)) {
213
+ this._fail("to satisfy expectation matcher", result);
214
+ } else {
215
+ this._fail(`to equal ${(0, import_types.stringifyValue)(expected)}`, result);
216
+ }
217
+ } else {
218
+ return this;
219
+ }
220
+ }
221
+ /* ------------------------------------------------------------------------ */
222
+ /**
223
+ * Expects the value to have a `number` _property_ `length` with the specified
224
+ * expected value.
225
+ *
226
+ * Negation: {@link NegativeExpectations.toHaveLength `not.toHaveLength(...)`}
227
+ */
228
+ toHaveLength(length) {
229
+ this.toBeDefined();
230
+ const realLength = this.value["length"];
231
+ if (typeof realLength !== "number") {
232
+ this._fail('to have a numeric "length" property');
233
+ } else if (realLength !== length) {
234
+ this._fail(`to have length ${length}`);
235
+ }
236
+ return this;
237
+ }
238
+ /* ------------------------------------------------------------------------ */
239
+ /**
240
+ * Expects the value to have the specified _property_ and (if specified)
241
+ * further asserts its value with an {@link AssertionFunction}.
242
+ *
243
+ * Negation: {@link NegativeExpectations.toHaveProperty `not.toHaveProperty(...)`}
244
+ */
245
+ toHaveProperty(property, assertion) {
246
+ this.toBeDefined();
247
+ const propertyValue = this.value[property];
248
+ if (propertyValue === void 0) {
249
+ this._fail(`to have property "${String(property)}"`);
250
+ }
251
+ if (assertion) {
252
+ try {
253
+ const parent = { expectations: this, prop: property };
254
+ const expectations = new Expectations(propertyValue, this.remarks, parent);
255
+ assertion(expectations);
256
+ } catch (error) {
257
+ if (error instanceof import_types.ExpectationError && error.diff) {
258
+ error.diff = {
259
+ diff: true,
260
+ value: this.value,
261
+ props: { [property]: error.diff }
262
+ };
263
+ }
264
+ throw error;
265
+ }
266
+ }
267
+ return this;
268
+ }
269
+ /* ------------------------------------------------------------------------ */
270
+ /**
271
+ * Expects the value to have a `number` _property_ `size` with the specified
272
+ * expected value.
273
+ *
274
+ * Negation: {@link NegativeExpectations.toHaveSize `not.toHaveSize(...)`}
275
+ */
276
+ toHaveSize(size) {
277
+ this.toBeDefined();
278
+ const realSize = this.value["size"];
279
+ if (typeof realSize !== "number") {
280
+ this._fail('to have a numeric "size" property');
281
+ } else if (realSize !== size) {
282
+ this._fail(`to have size ${size}`);
283
+ }
284
+ return this;
285
+ }
286
+ toInclude(contents) {
287
+ (0, import_include.toInclude)(this, false, contents);
288
+ return this;
289
+ }
290
+ /* ------------------------------------------------------------------------ */
291
+ /**
292
+ * Expects the value to be a `string` _matching_ the specified sub-`string`
293
+ * or {@link RegExp}.
294
+ *
295
+ * Negation: {@link NegativeExpectations.toMatch `not.toMatch(...)`}
296
+ */
297
+ toMatch(matcher) {
298
+ const expectations = this.toBeA("string");
299
+ if (expectations.value.match(matcher))
300
+ return expectations;
301
+ this._fail(`to match ${(0, import_types.stringifyValue)(matcher)}`);
302
+ }
303
+ /* ------------------------------------------------------------------------ */
304
+ /**
305
+ * Expect the value to be an {@link Iterable} object includind _all_ values
306
+ * (and only those values) from the specified _array_ or {@link Set},
307
+ * in any order.
308
+ */
309
+ toMatchContents(contents) {
310
+ (0, import_include.toMatchContents)(this, contents);
311
+ return this;
312
+ }
313
+ /* ------------------------------------------------------------------------ */
314
+ /**
315
+ * Expects the value to be _strictly equal to_ the specified expected one.
316
+ *
317
+ * Negation: {@link NegativeExpectations.toStrictlyEqual `not.toStrictlyEqual(...)`}
318
+ */
319
+ toStrictlyEqual(expected) {
320
+ if (this.value === expected)
321
+ return this;
322
+ const diff2 = { diff: true, value: this.value, expected };
323
+ this._fail(`to strictly equal ${(0, import_types.stringifyValue)(expected)}`, diff2);
324
+ }
325
+ /* ------------------------------------------------------------------------ */
326
+ /**
327
+ * Expects the value to be a `function` throwing, and (if specified) further
328
+ * asserts the thrown value with an {@link AssertionFunction}.
329
+ *
330
+ * Negation: {@link NegativeExpectations.toThrow `not.toThrow()`}
331
+ */
332
+ toThrow(assert) {
333
+ const func = this.toBeA("function");
334
+ let passed = false;
335
+ try {
336
+ func.value();
337
+ passed = true;
338
+ } catch (thrown) {
339
+ if (assert)
340
+ assert(new Expectations(thrown, this.remarks));
341
+ }
342
+ if (passed)
343
+ this._fail("to throw");
344
+ return this;
345
+ }
346
+ toThrowError(constructorOrMessage, maybeMessage) {
347
+ const [constructor, message] = typeof constructorOrMessage === "function" ? [constructorOrMessage, maybeMessage] : [Error, constructorOrMessage];
348
+ return this.toThrow((assert) => assert.toBeError(constructor, message));
349
+ }
350
+ };
351
+ var NegativeExpectations = class {
352
+ /**
353
+ * Create a {@link NegativeExpectations} instance associated with the
354
+ * specified (positive) {@link Expectations}.
355
+ */
356
+ constructor(_expectations) {
357
+ this._expectations = _expectations;
358
+ this._value = _expectations.value;
359
+ }
360
+ /** For convenience, the value associated with the {@link Expectations} */
361
+ _value;
362
+ /** Throw an {@link ExpectationError} associated with _this_ */
363
+ _fail(details, diff2) {
364
+ throw new import_types.ExpectationError(this._expectations, details, diff2);
365
+ }
366
+ /* ------------------------------------------------------------------------ */
367
+ /**
368
+ * Expects the value _**NOT**_ to be of the specified _extended_
369
+ * {@link TypeName type}.
370
+ *
371
+ * Negates: {@link Expectations.toBeA `toBeA(...)`}
372
+ */
373
+ toBeA(type) {
374
+ if ((0, import_types.typeOf)(this._value) !== type)
375
+ return this._expectations;
376
+ this._fail(`not to be ${(0, import_types.prefixType)(type)}`);
377
+ }
378
+ toBeCloseTo(value, delta) {
379
+ const min = value - delta;
380
+ const max = value + delta;
381
+ return this.toBeWithinRange(min, max);
382
+ }
383
+ /* ------------------------------------------------------------------------ */
384
+ /**
385
+ * Expects the value to be either `null` or `undefined`.
386
+ *
387
+ * Negates: {@link Expectations.toBeDefined `toBeDefined()`}
388
+ */
389
+ toBeDefined() {
390
+ if (this._value === null || this._value === void 0) {
391
+ return this._expectations;
392
+ }
393
+ this._fail(`to be ${(0, import_types.stringifyValue)(null)} or ${(0, import_types.stringifyValue)(void 0)}`);
394
+ }
395
+ /* ------------------------------------------------------------------------ */
396
+ /**
397
+ * Expects the value _**NOT**_ to be an instance of the specified
398
+ * {@link Constructor}.
399
+ *
400
+ * Negates: {@link Expectations.toBeInstanceOf `toBeInstanceOf(...)`}
401
+ */
402
+ toBeInstanceOf(constructor) {
403
+ if (this._value instanceof constructor) {
404
+ this._fail(`not to be an instance of ${(0, import_types.stringifyConstructor)(constructor)}`);
405
+ }
406
+ return this._expectations;
407
+ }
408
+ /* ------------------------------------------------------------------------ */
409
+ /**
410
+ * Expects the value _**NOT**_ to be `NaN`.
411
+ *
412
+ * Negates: {@link Expectations.toBeNaN `toBeNaN()`}
413
+ */
414
+ toBeNaN() {
415
+ const expectations = this._expectations.toBeA("number");
416
+ if (isNaN(expectations.value))
417
+ this._fail(`not to be ${(0, import_types.stringifyValue)(NaN)}`);
418
+ return expectations;
419
+ }
420
+ toBeWithinRange(min, max) {
421
+ if (max < min) {
422
+ const num = max;
423
+ max = min;
424
+ min = num;
425
+ }
426
+ this._expectations.toBeA(typeof min);
427
+ if (this._value >= min && this._value <= max) {
428
+ this._fail(`not to be within ${(0, import_types.stringifyValue)(min)}...${(0, import_types.stringifyValue)(max)}`);
429
+ }
430
+ return this._expectations;
431
+ }
432
+ /* ------------------------------------------------------------------------ */
433
+ /**
434
+ * Expects the value _**NOT**_ to be _deep equal to_ the specified expected
435
+ * one.
436
+ *
437
+ * Negates: {@link Expectations.toEqual `toEqual(...)`}
438
+ */
439
+ toEqual(expected) {
440
+ let result = { diff: false, value: this._value };
441
+ if (this._value !== expected) {
442
+ result = (0, import_diff.diff)(this._value, expected);
443
+ if (result.diff)
444
+ return this._expectations;
445
+ }
446
+ if ((0, import_types.isMatcher)(expected)) {
447
+ this._fail("not to satisfy expectation matcher", result);
448
+ } else {
449
+ this._fail(`not to equal ${(0, import_types.stringifyValue)(expected)}`, result);
450
+ }
451
+ }
452
+ /* ------------------------------------------------------------------------ */
453
+ /**
454
+ * Expects the value to have a `number` _property_ `length` _different_ from
455
+ * the specified expected value.
456
+ *
457
+ * Negates: {@link Expectations.toHaveLength `toHaveLength(...)`}
458
+ */
459
+ toHaveLength(length) {
460
+ this._expectations.toBeDefined();
461
+ const realLength = this._value["length"];
462
+ if (typeof realLength !== "number") {
463
+ this._fail('to have a numeric "length" property');
464
+ } else if (realLength === length) {
465
+ this._fail(`not to have length ${length}`);
466
+ }
467
+ return this._expectations;
468
+ }
469
+ /* ------------------------------------------------------------------------ */
470
+ /**
471
+ * Expects the value _**NOT**_ to have the specified _property_.
472
+ *
473
+ * Negates: {@link Expectations.toHaveProperty `toHaveProperty(...)`}
474
+ */
475
+ toHaveProperty(property) {
476
+ this._expectations.toBeDefined();
477
+ const propertyValue = this._value[property];
478
+ if (propertyValue === void 0)
479
+ return this._expectations;
480
+ this._fail(`not to have property "${String(property)}"`);
481
+ }
482
+ /* ------------------------------------------------------------------------ */
483
+ /**
484
+ * Expects the value to have a `number` _property_ `size` _different_ from
485
+ * the specified expected value.
486
+ *
487
+ * Negates: {@link Expectations.toHaveSize `toHaveSize(...)`}
488
+ */
489
+ toHaveSize(size) {
490
+ this._expectations.toBeDefined();
491
+ const realSize = this._value["size"];
492
+ if (typeof realSize !== "number") {
493
+ this._fail('to have a numeric "size" property');
494
+ } else if (realSize === size) {
495
+ this._fail(`not to have size ${size}`);
496
+ }
497
+ return this._expectations;
498
+ }
499
+ toInclude(contents) {
500
+ (0, import_include.toInclude)(this._expectations, true, contents);
501
+ return this._expectations;
502
+ }
503
+ /* ------------------------------------------------------------------------ */
504
+ /**
505
+ * Expects the value to be a `string` _**NOT MATCHING**_ the specified
506
+ * sub-`string` or {@link RegExp}.
507
+ *
508
+ * Negates: {@link Expectations.toMatch `toMatch(...)`}
509
+ */
510
+ toMatch(matcher) {
511
+ const expectations = this._expectations.toBeA("string");
512
+ if (!expectations.value.match(matcher))
513
+ return expectations;
514
+ this._fail(`not to match ${(0, import_types.stringifyValue)(matcher)}`);
515
+ }
516
+ /* ------------------------------------------------------------------------ */
517
+ /**
518
+ * Expects the value to be a `function` not throwing anything.
519
+ *
520
+ * Negates: {@link Expectations.toThrow `toThrow(...)`}
521
+ */
522
+ toThrow() {
523
+ const expectations = this._expectations.toBeA("function");
524
+ try {
525
+ expectations.value();
526
+ return expectations;
527
+ } catch (caught) {
528
+ this._fail("not to throw");
529
+ }
530
+ }
531
+ /* ------------------------------------------------------------------------ */
532
+ /**
533
+ * Expects the value _**NOT**_ to be _strictly equal to_ the specified
534
+ * expected one.
535
+ *
536
+ * Negates: {@link Expectations.toStrictlyEqual `toStrictlyEqual(...)`}
537
+ */
538
+ toStrictlyEqual(expected) {
539
+ if (this._value !== expected)
540
+ return this._expectations;
541
+ this._fail(`not to strictly equal ${(0, import_types.stringifyValue)(expected)}`);
542
+ }
543
+ };
544
+ // Annotate the CommonJS export names for ESM import in node:
545
+ 0 && (module.exports = {
546
+ Expectations,
547
+ NegativeExpectations
548
+ });
549
+ //# sourceMappingURL=expectations.cjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/expectation/expectations.ts"],
4
+ "mappings": "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",
5
+ "names": ["diff"]
6
+ }