Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 1x 1x 1x 1x 843x 762x 762x 762x 762x 756x 762x 762x 1x 41x 41x 4x 4x 41x 41x 41x 41x 41x 41x 41x 1x | import type {TestAPI} from 'vitest'
import {test} from 'vitest'
import type {Law, UnknownArgs} from '../law.js'
import {asAssert} from '../law.js'
/**
* @internal
*/
export const testLawWith =
(testApi: TestAPI | (typeof test)['only']) =>
<Ts extends UnknownArgs>(law: Law<Ts>): void => {
const {note, parameters} = law
const suffix =
(parameters?.verbose ?? false) && note !== '' ? `: ${note}` : ''
testApi(law.name + suffix, () => {
asAssert(law)
})
}
/**
* Attempts to find a counterexample for the single given {@link law.Law | Law}.
*
* Meant to be called from inside a `Vitest` test suite, perhaps inside some
* `describe()` block, but _not_ inside a `test()`/`it()` block.
*
* [testLaw.skip](https://vitest.dev/api/#test-skip),
* [testLaw.only](https://vitest.dev/api/#test-only),
* [testLaw.skipIf](https://vitest.dev/api/#test-skipif),
* and [testLaw.runIf](https://vitest.dev/api/#test-runif)
* all behave just like their `vitest` counterparts.
*
* See also {@link law.checkLaw | checkLaw}.
* @typeParam Ts - Tuple of types for law predicate arguments.
* @param law - Law under test.
* @property only - Run _only_ this law test and no other.
* @property skip - Skip this law test.
* @property runIf - Run this law test only if the condition holds.
* @property skipIf - Skip this law test only if the condition holds.
* @category vitest
*/
export const testLaw = (() => {
return Object.assign(
<Ts extends UnknownArgs>(law: Law<Ts>): void => {
testLawWith(test)(law)
},
{
skip: testLawWith(test.skip),
only: testLawWith(test.only),
skipIf: (condition: unknown) => testLawWith(test.skipIf(condition)),
runIf: (condition: unknown) => testLawWith(test.runIf(condition)),
},
)
})()
|