@fncts/test 0.0.1
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.
- package/TestSpec.d.ts +4 -0
- package/_cjs/api.cjs +91 -0
- package/_cjs/api.cjs.map +1 -0
- package/_cjs/control/AbstractRunnableSpec.cjs +30 -0
- package/_cjs/control/AbstractRunnableSpec.cjs.map +1 -0
- package/_cjs/control/Annotations/api.cjs +50 -0
- package/_cjs/control/Annotations/api.cjs.map +1 -0
- package/_cjs/control/Annotations/definition.cjs +27 -0
- package/_cjs/control/Annotations/definition.cjs.map +1 -0
- package/_cjs/control/Annotations/live.cjs +68 -0
- package/_cjs/control/Annotations/live.cjs.map +1 -0
- package/_cjs/control/Annotations.cjs +45 -0
- package/_cjs/control/Annotations.cjs.map +1 -0
- package/_cjs/control/Assertion/api.cjs +256 -0
- package/_cjs/control/Assertion/api.cjs.map +1 -0
- package/_cjs/control/Assertion/definition.cjs +32 -0
- package/_cjs/control/Assertion/definition.cjs.map +1 -0
- package/_cjs/control/Assertion.cjs +32 -0
- package/_cjs/control/Assertion.cjs.map +1 -0
- package/_cjs/control/AssertionIO/api.cjs +46 -0
- package/_cjs/control/AssertionIO/api.cjs.map +1 -0
- package/_cjs/control/AssertionIO/definition.cjs +37 -0
- package/_cjs/control/AssertionIO/definition.cjs.map +1 -0
- package/_cjs/control/AssertionIO.cjs +32 -0
- package/_cjs/control/AssertionIO.cjs.map +1 -0
- package/_cjs/control/DefaultRunnableSpec.cjs +30 -0
- package/_cjs/control/DefaultRunnableSpec.cjs.map +1 -0
- package/_cjs/control/DefaultTestReporter/definition.cjs +9 -0
- package/_cjs/control/DefaultTestReporter/definition.cjs.map +1 -0
- package/_cjs/control/DefaultTestReporter/render.cjs +288 -0
- package/_cjs/control/DefaultTestReporter/render.cjs.map +1 -0
- package/_cjs/control/DefaultTestReporter.cjs +32 -0
- package/_cjs/control/DefaultTestReporter.cjs.map +1 -0
- package/_cjs/control/FreeBooleanAlgebraIO/api.cjs +89 -0
- package/_cjs/control/FreeBooleanAlgebraIO/api.cjs.map +1 -0
- package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs +9 -0
- package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs.map +1 -0
- package/_cjs/control/FreeBooleanAlgebraIO.cjs +32 -0
- package/_cjs/control/FreeBooleanAlgebraIO.cjs.map +1 -0
- package/_cjs/control/Gen/api/array.cjs +50 -0
- package/_cjs/control/Gen/api/array.cjs.map +1 -0
- package/_cjs/control/Gen/api/char.cjs +129 -0
- package/_cjs/control/Gen/api/char.cjs.map +1 -0
- package/_cjs/control/Gen/api/conc.cjs +70 -0
- package/_cjs/control/Gen/api/conc.cjs.map +1 -0
- package/_cjs/control/Gen/api/double.cjs +82 -0
- package/_cjs/control/Gen/api/double.cjs.map +1 -0
- package/_cjs/control/Gen/api/float.cjs +55 -0
- package/_cjs/control/Gen/api/float.cjs.map +1 -0
- package/_cjs/control/Gen/api/string.cjs +102 -0
- package/_cjs/control/Gen/api/string.cjs.map +1 -0
- package/_cjs/control/Gen/api/struct.cjs +36 -0
- package/_cjs/control/Gen/api/struct.cjs.map +1 -0
- package/_cjs/control/Gen/api.cjs +369 -0
- package/_cjs/control/Gen/api.cjs.map +1 -0
- package/_cjs/control/Gen/constraints.cjs +6 -0
- package/_cjs/control/Gen/constraints.cjs.map +1 -0
- package/_cjs/control/Gen/definition.cjs +20 -0
- package/_cjs/control/Gen/definition.cjs.map +1 -0
- package/_cjs/control/Gen.cjs +136 -0
- package/_cjs/control/Gen.cjs.map +1 -0
- package/_cjs/control/Live/definition.cjs +67 -0
- package/_cjs/control/Live/definition.cjs.map +1 -0
- package/_cjs/control/Live.cjs +19 -0
- package/_cjs/control/Live.cjs.map +1 -0
- package/_cjs/control/RunnableSpec.cjs +70 -0
- package/_cjs/control/RunnableSpec.cjs.map +1 -0
- package/_cjs/control/Sample/api.cjs +244 -0
- package/_cjs/control/Sample/api.cjs.map +1 -0
- package/_cjs/control/Sample/definition.cjs +21 -0
- package/_cjs/control/Sample/definition.cjs.map +1 -0
- package/_cjs/control/Sample.cjs +32 -0
- package/_cjs/control/Sample.cjs.map +1 -0
- package/_cjs/control/Sized/api.cjs +32 -0
- package/_cjs/control/Sized/api.cjs.map +1 -0
- package/_cjs/control/Sized/definition.cjs +27 -0
- package/_cjs/control/Sized/definition.cjs.map +1 -0
- package/_cjs/control/Sized/live.cjs +42 -0
- package/_cjs/control/Sized/live.cjs.map +1 -0
- package/_cjs/control/Sized.cjs +45 -0
- package/_cjs/control/Sized.cjs.map +1 -0
- package/_cjs/control/Spec/api.cjs +525 -0
- package/_cjs/control/Spec/api.cjs.map +1 -0
- package/_cjs/control/Spec/definition.cjs +125 -0
- package/_cjs/control/Spec/definition.cjs.map +1 -0
- package/_cjs/control/Spec.cjs +32 -0
- package/_cjs/control/Spec.cjs.map +1 -0
- package/_cjs/control/SummaryBuilder.cjs +87 -0
- package/_cjs/control/SummaryBuilder.cjs.map +1 -0
- package/_cjs/control/Test.cjs +34 -0
- package/_cjs/control/Test.cjs.map +1 -0
- package/_cjs/control/TestAnnotationRenderer/api.cjs +101 -0
- package/_cjs/control/TestAnnotationRenderer/api.cjs.map +1 -0
- package/_cjs/control/TestAnnotationRenderer/definition.cjs +53 -0
- package/_cjs/control/TestAnnotationRenderer/definition.cjs.map +1 -0
- package/_cjs/control/TestAnnotationRenderer.cjs +32 -0
- package/_cjs/control/TestAnnotationRenderer.cjs.map +1 -0
- package/_cjs/control/TestAspect/api.cjs +148 -0
- package/_cjs/control/TestAspect/api.cjs.map +1 -0
- package/_cjs/control/TestAspect/definition.cjs +6 -0
- package/_cjs/control/TestAspect/definition.cjs.map +1 -0
- package/_cjs/control/TestAspect.cjs +32 -0
- package/_cjs/control/TestAspect.cjs.map +1 -0
- package/_cjs/control/TestClock/api.cjs +72 -0
- package/_cjs/control/TestClock/api.cjs.map +1 -0
- package/_cjs/control/TestClock/definition.cjs +225 -0
- package/_cjs/control/TestClock/definition.cjs.map +1 -0
- package/_cjs/control/TestClock.cjs +32 -0
- package/_cjs/control/TestClock.cjs.map +1 -0
- package/_cjs/control/TestConsole/api.cjs +64 -0
- package/_cjs/control/TestConsole/api.cjs.map +1 -0
- package/_cjs/control/TestConsole/definition.cjs +100 -0
- package/_cjs/control/TestConsole/definition.cjs.map +1 -0
- package/_cjs/control/TestConsole.cjs +32 -0
- package/_cjs/control/TestConsole.cjs.map +1 -0
- package/_cjs/control/TestEnvironment.cjs +39 -0
- package/_cjs/control/TestEnvironment.cjs.map +1 -0
- package/_cjs/control/TestExecutor.cjs +58 -0
- package/_cjs/control/TestExecutor.cjs.map +1 -0
- package/_cjs/control/TestLogger.cjs +58 -0
- package/_cjs/control/TestLogger.cjs.map +1 -0
- package/_cjs/control/TestRandom/api.cjs +125 -0
- package/_cjs/control/TestRandom/api.cjs.map +1 -0
- package/_cjs/control/TestRandom/definition.cjs +458 -0
- package/_cjs/control/TestRandom/definition.cjs.map +1 -0
- package/_cjs/control/TestRandom.cjs +32 -0
- package/_cjs/control/TestRandom.cjs.map +1 -0
- package/_cjs/control/TestRenderer/ConsoleRenderer.cjs +113 -0
- package/_cjs/control/TestRenderer/ConsoleRenderer.cjs.map +1 -0
- package/_cjs/control/TestRenderer/definition.cjs +6 -0
- package/_cjs/control/TestRenderer/definition.cjs.map +1 -0
- package/_cjs/control/TestRunner.cjs +45 -0
- package/_cjs/control/TestRunner.cjs.map +1 -0
- package/_cjs/data/AssertionData.cjs +55 -0
- package/_cjs/data/AssertionData.cjs.map +1 -0
- package/_cjs/data/AssertionResult.cjs +34 -0
- package/_cjs/data/AssertionResult.cjs.map +1 -0
- package/_cjs/data/AssertionValue/api.cjs +64 -0
- package/_cjs/data/AssertionValue/api.cjs.map +1 -0
- package/_cjs/data/AssertionValue/definition.cjs +35 -0
- package/_cjs/data/AssertionValue/definition.cjs.map +1 -0
- package/_cjs/data/AssertionValue.cjs +32 -0
- package/_cjs/data/AssertionValue.cjs.map +1 -0
- package/_cjs/data/ExecutedSpec/api.cjs +132 -0
- package/_cjs/data/ExecutedSpec/api.cjs.map +1 -0
- package/_cjs/data/ExecutedSpec/definition.cjs +58 -0
- package/_cjs/data/ExecutedSpec/definition.cjs.map +1 -0
- package/_cjs/data/ExecutedSpec.cjs +32 -0
- package/_cjs/data/ExecutedSpec.cjs.map +1 -0
- package/_cjs/data/ExecutionResult.cjs +142 -0
- package/_cjs/data/ExecutionResult.cjs.map +1 -0
- package/_cjs/data/FailureDetails.cjs +17 -0
- package/_cjs/data/FailureDetails.cjs.map +1 -0
- package/_cjs/data/FreeBooleanAlgebra/api.cjs +194 -0
- package/_cjs/data/FreeBooleanAlgebra/api.cjs.map +1 -0
- package/_cjs/data/FreeBooleanAlgebra/definition.cjs +59 -0
- package/_cjs/data/FreeBooleanAlgebra/definition.cjs.map +1 -0
- package/_cjs/data/FreeBooleanAlgebra.cjs +32 -0
- package/_cjs/data/FreeBooleanAlgebra.cjs.map +1 -0
- package/_cjs/data/GenFailureDetails.cjs +18 -0
- package/_cjs/data/GenFailureDetails.cjs.map +1 -0
- package/_cjs/data/LogLine/Fragment.cjs +94 -0
- package/_cjs/data/LogLine/Fragment.cjs.map +1 -0
- package/_cjs/data/LogLine/Line.cjs +142 -0
- package/_cjs/data/LogLine/Line.cjs.map +1 -0
- package/_cjs/data/LogLine/Message.cjs +145 -0
- package/_cjs/data/LogLine/Message.cjs.map +1 -0
- package/_cjs/data/LogLine/Style.cjs +124 -0
- package/_cjs/data/LogLine/Style.cjs.map +1 -0
- package/_cjs/data/LogLine/api.cjs +65 -0
- package/_cjs/data/LogLine/api.cjs.map +1 -0
- package/_cjs/data/LogLine.cjs +32 -0
- package/_cjs/data/LogLine.cjs.map +1 -0
- package/_cjs/data/Render/api.cjs +25 -0
- package/_cjs/data/Render/api.cjs.map +1 -0
- package/_cjs/data/Render/definition.cjs +52 -0
- package/_cjs/data/Render/definition.cjs.map +1 -0
- package/_cjs/data/Render.cjs +32 -0
- package/_cjs/data/Render.cjs.map +1 -0
- package/_cjs/data/RenderParam/api.cjs +40 -0
- package/_cjs/data/RenderParam/api.cjs.map +1 -0
- package/_cjs/data/RenderParam/definition.cjs +33 -0
- package/_cjs/data/RenderParam/definition.cjs.map +1 -0
- package/_cjs/data/RenderParam.cjs +32 -0
- package/_cjs/data/RenderParam.cjs.map +1 -0
- package/_cjs/data/Summary.cjs +20 -0
- package/_cjs/data/Summary.cjs.map +1 -0
- package/_cjs/data/TestAnnotation/api.cjs +76 -0
- package/_cjs/data/TestAnnotation/api.cjs.map +1 -0
- package/_cjs/data/TestAnnotation/definition.cjs +55 -0
- package/_cjs/data/TestAnnotation/definition.cjs.map +1 -0
- package/_cjs/data/TestAnnotation.cjs +32 -0
- package/_cjs/data/TestAnnotation.cjs.map +1 -0
- package/_cjs/data/TestAnnotationMap.cjs +51 -0
- package/_cjs/data/TestAnnotationMap.cjs.map +1 -0
- package/_cjs/data/TestArgs/definition.cjs +18 -0
- package/_cjs/data/TestArgs/definition.cjs.map +1 -0
- package/_cjs/data/TestArgs.cjs +19 -0
- package/_cjs/data/TestArgs.cjs.map +1 -0
- package/_cjs/data/TestConfig.cjs +76 -0
- package/_cjs/data/TestConfig.cjs.map +1 -0
- package/_cjs/data/TestFailure.cjs +75 -0
- package/_cjs/data/TestFailure.cjs.map +1 -0
- package/_cjs/data/TestSuccess.cjs +48 -0
- package/_cjs/data/TestSuccess.cjs.map +1 -0
- package/_cjs/data/TestTimeoutException.cjs +16 -0
- package/_cjs/data/TestTimeoutException.cjs.map +1 -0
- package/_cjs/demo.cjs +44 -0
- package/_cjs/demo.cjs.map +1 -0
- package/_cjs/util/math.cjs +673 -0
- package/_cjs/util/math.cjs.map +1 -0
- package/_mjs/api.mjs +57 -0
- package/_mjs/api.mjs.map +1 -0
- package/_mjs/control/AbstractRunnableSpec.mjs +16 -0
- package/_mjs/control/AbstractRunnableSpec.mjs.map +1 -0
- package/_mjs/control/Annotations/api.mjs +30 -0
- package/_mjs/control/Annotations/api.mjs.map +1 -0
- package/_mjs/control/Annotations/definition.mjs +13 -0
- package/_mjs/control/Annotations/definition.mjs.map +1 -0
- package/_mjs/control/Annotations/live.mjs +40 -0
- package/_mjs/control/Annotations/live.mjs.map +1 -0
- package/_mjs/control/Annotations.mjs +5 -0
- package/_mjs/control/Annotations.mjs.map +1 -0
- package/_mjs/control/Assertion/api.mjs +170 -0
- package/_mjs/control/Assertion/api.mjs.map +1 -0
- package/_mjs/control/Assertion/definition.mjs +17 -0
- package/_mjs/control/Assertion/definition.mjs.map +1 -0
- package/_mjs/control/Assertion.mjs +4 -0
- package/_mjs/control/Assertion.mjs.map +1 -0
- package/_mjs/control/AssertionIO/api.mjs +28 -0
- package/_mjs/control/AssertionIO/api.mjs.map +1 -0
- package/_mjs/control/AssertionIO/definition.mjs +23 -0
- package/_mjs/control/AssertionIO/definition.mjs.map +1 -0
- package/_mjs/control/AssertionIO.mjs +4 -0
- package/_mjs/control/AssertionIO.mjs.map +1 -0
- package/_mjs/control/DefaultRunnableSpec.mjs +15 -0
- package/_mjs/control/DefaultRunnableSpec.mjs.map +1 -0
- package/_mjs/control/DefaultTestReporter/definition.mjs +2 -0
- package/_mjs/control/DefaultTestReporter/definition.mjs.map +1 -0
- package/_mjs/control/DefaultTestReporter/render.mjs +245 -0
- package/_mjs/control/DefaultTestReporter/render.mjs.map +1 -0
- package/_mjs/control/DefaultTestReporter.mjs +4 -0
- package/_mjs/control/DefaultTestReporter.mjs.map +1 -0
- package/_mjs/control/FreeBooleanAlgebraIO/api.mjs +62 -0
- package/_mjs/control/FreeBooleanAlgebraIO/api.mjs.map +1 -0
- package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs +2 -0
- package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs.map +1 -0
- package/_mjs/control/FreeBooleanAlgebraIO.mjs +4 -0
- package/_mjs/control/FreeBooleanAlgebraIO.mjs.map +1 -0
- package/_mjs/control/Gen/api/array.mjs +31 -0
- package/_mjs/control/Gen/api/array.mjs.map +1 -0
- package/_mjs/control/Gen/api/char.mjs +95 -0
- package/_mjs/control/Gen/api/char.mjs.map +1 -0
- package/_mjs/control/Gen/api/conc.mjs +46 -0
- package/_mjs/control/Gen/api/conc.mjs.map +1 -0
- package/_mjs/control/Gen/api/double.mjs +60 -0
- package/_mjs/control/Gen/api/double.mjs.map +1 -0
- package/_mjs/control/Gen/api/float.mjs +41 -0
- package/_mjs/control/Gen/api/float.mjs.map +1 -0
- package/_mjs/control/Gen/api/string.mjs +72 -0
- package/_mjs/control/Gen/api/string.mjs.map +1 -0
- package/_mjs/control/Gen/api/struct.mjs +18 -0
- package/_mjs/control/Gen/api/struct.mjs.map +1 -0
- package/_mjs/control/Gen/api.mjs +288 -0
- package/_mjs/control/Gen/api.mjs.map +1 -0
- package/_mjs/control/Gen/constraints.mjs +2 -0
- package/_mjs/control/Gen/constraints.mjs.map +1 -0
- package/_mjs/control/Gen/definition.mjs +11 -0
- package/_mjs/control/Gen/definition.mjs.map +1 -0
- package/_mjs/control/Gen.mjs +14 -0
- package/_mjs/control/Gen.mjs.map +1 -0
- package/_mjs/control/Live/definition.mjs +42 -0
- package/_mjs/control/Live/definition.mjs.map +1 -0
- package/_mjs/control/Live.mjs +3 -0
- package/_mjs/control/Live.mjs.map +1 -0
- package/_mjs/control/RunnableSpec.mjs +44 -0
- package/_mjs/control/RunnableSpec.mjs.map +1 -0
- package/_mjs/control/Sample/api.mjs +195 -0
- package/_mjs/control/Sample/api.mjs.map +1 -0
- package/_mjs/control/Sample/definition.mjs +12 -0
- package/_mjs/control/Sample/definition.mjs.map +1 -0
- package/_mjs/control/Sample.mjs +4 -0
- package/_mjs/control/Sample.mjs.map +1 -0
- package/_mjs/control/Sized/api.mjs +16 -0
- package/_mjs/control/Sized/api.mjs.map +1 -0
- package/_mjs/control/Sized/definition.mjs +13 -0
- package/_mjs/control/Sized/definition.mjs.map +1 -0
- package/_mjs/control/Sized/live.mjs +25 -0
- package/_mjs/control/Sized/live.mjs.map +1 -0
- package/_mjs/control/Sized.mjs +5 -0
- package/_mjs/control/Sized.mjs.map +1 -0
- package/_mjs/control/Spec/api.mjs +449 -0
- package/_mjs/control/Spec/api.mjs.map +1 -0
- package/_mjs/control/Spec/definition.mjs +96 -0
- package/_mjs/control/Spec/definition.mjs.map +1 -0
- package/_mjs/control/Spec.mjs +4 -0
- package/_mjs/control/Spec.mjs.map +1 -0
- package/_mjs/control/SummaryBuilder.mjs +61 -0
- package/_mjs/control/SummaryBuilder.mjs.map +1 -0
- package/_mjs/control/Test.mjs +15 -0
- package/_mjs/control/Test.mjs.map +1 -0
- package/_mjs/control/TestAnnotationRenderer/api.mjs +74 -0
- package/_mjs/control/TestAnnotationRenderer/api.mjs.map +1 -0
- package/_mjs/control/TestAnnotationRenderer/definition.mjs +32 -0
- package/_mjs/control/TestAnnotationRenderer/definition.mjs.map +1 -0
- package/_mjs/control/TestAnnotationRenderer.mjs +4 -0
- package/_mjs/control/TestAnnotationRenderer.mjs.map +1 -0
- package/_mjs/control/TestAspect/api.mjs +93 -0
- package/_mjs/control/TestAspect/api.mjs.map +1 -0
- package/_mjs/control/TestAspect/definition.mjs +2 -0
- package/_mjs/control/TestAspect/definition.mjs.map +1 -0
- package/_mjs/control/TestAspect.mjs +4 -0
- package/_mjs/control/TestAspect.mjs.map +1 -0
- package/_mjs/control/TestClock/api.mjs +45 -0
- package/_mjs/control/TestClock/api.mjs.map +1 -0
- package/_mjs/control/TestClock/definition.mjs +173 -0
- package/_mjs/control/TestClock/definition.mjs.map +1 -0
- package/_mjs/control/TestClock.mjs +4 -0
- package/_mjs/control/TestClock.mjs.map +1 -0
- package/_mjs/control/TestConsole/api.mjs +41 -0
- package/_mjs/control/TestConsole/api.mjs.map +1 -0
- package/_mjs/control/TestConsole/definition.mjs +73 -0
- package/_mjs/control/TestConsole/definition.mjs.map +1 -0
- package/_mjs/control/TestConsole.mjs +4 -0
- package/_mjs/control/TestConsole.mjs.map +1 -0
- package/_mjs/control/TestEnvironment.mjs +17 -0
- package/_mjs/control/TestEnvironment.mjs.map +1 -0
- package/_mjs/control/TestExecutor.mjs +36 -0
- package/_mjs/control/TestExecutor.mjs.map +1 -0
- package/_mjs/control/TestLogger.mjs +36 -0
- package/_mjs/control/TestLogger.mjs.map +1 -0
- package/_mjs/control/TestRandom/api.mjs +87 -0
- package/_mjs/control/TestRandom/api.mjs.map +1 -0
- package/_mjs/control/TestRandom/definition.mjs +418 -0
- package/_mjs/control/TestRandom/definition.mjs.map +1 -0
- package/_mjs/control/TestRandom.mjs +4 -0
- package/_mjs/control/TestRandom.mjs.map +1 -0
- package/_mjs/control/TestRenderer/ConsoleRenderer.mjs +88 -0
- package/_mjs/control/TestRenderer/ConsoleRenderer.mjs.map +1 -0
- package/_mjs/control/TestRenderer/definition.mjs +2 -0
- package/_mjs/control/TestRenderer/definition.mjs.map +1 -0
- package/_mjs/control/TestRunner.mjs +23 -0
- package/_mjs/control/TestRunner.mjs.map +1 -0
- package/_mjs/data/AssertionData.mjs +34 -0
- package/_mjs/data/AssertionData.mjs.map +1 -0
- package/_mjs/data/AssertionResult.mjs +17 -0
- package/_mjs/data/AssertionResult.mjs.map +1 -0
- package/_mjs/data/AssertionValue/api.mjs +42 -0
- package/_mjs/data/AssertionValue/api.mjs.map +1 -0
- package/_mjs/data/AssertionValue/definition.mjs +19 -0
- package/_mjs/data/AssertionValue/definition.mjs.map +1 -0
- package/_mjs/data/AssertionValue.mjs +4 -0
- package/_mjs/data/AssertionValue.mjs.map +1 -0
- package/_mjs/data/ExecutedSpec/api.mjs +104 -0
- package/_mjs/data/ExecutedSpec/api.mjs.map +1 -0
- package/_mjs/data/ExecutedSpec/definition.mjs +40 -0
- package/_mjs/data/ExecutedSpec/definition.mjs.map +1 -0
- package/_mjs/data/ExecutedSpec.mjs +4 -0
- package/_mjs/data/ExecutedSpec.mjs.map +1 -0
- package/_mjs/data/ExecutionResult.mjs +110 -0
- package/_mjs/data/ExecutionResult.mjs.map +1 -0
- package/_mjs/data/FailureDetails.mjs +8 -0
- package/_mjs/data/FailureDetails.mjs.map +1 -0
- package/_mjs/data/FreeBooleanAlgebra/api.mjs +154 -0
- package/_mjs/data/FreeBooleanAlgebra/api.mjs.map +1 -0
- package/_mjs/data/FreeBooleanAlgebra/definition.mjs +40 -0
- package/_mjs/data/FreeBooleanAlgebra/definition.mjs.map +1 -0
- package/_mjs/data/FreeBooleanAlgebra.mjs +4 -0
- package/_mjs/data/FreeBooleanAlgebra.mjs.map +1 -0
- package/_mjs/data/GenFailureDetails.mjs +9 -0
- package/_mjs/data/GenFailureDetails.mjs.map +1 -0
- package/_mjs/data/LogLine/Fragment.mjs +65 -0
- package/_mjs/data/LogLine/Fragment.mjs.map +1 -0
- package/_mjs/data/LogLine/Line.mjs +104 -0
- package/_mjs/data/LogLine/Line.mjs.map +1 -0
- package/_mjs/data/LogLine/Message.mjs +107 -0
- package/_mjs/data/LogLine/Message.mjs.map +1 -0
- package/_mjs/data/LogLine/Style.mjs +101 -0
- package/_mjs/data/LogLine/Style.mjs.map +1 -0
- package/_mjs/data/LogLine/api.mjs +32 -0
- package/_mjs/data/LogLine/api.mjs.map +1 -0
- package/_mjs/data/LogLine.mjs +3 -0
- package/_mjs/data/LogLine.mjs.map +1 -0
- package/_mjs/data/Render/api.mjs +16 -0
- package/_mjs/data/Render/api.mjs.map +1 -0
- package/_mjs/data/Render/definition.mjs +33 -0
- package/_mjs/data/Render/definition.mjs.map +1 -0
- package/_mjs/data/Render.mjs +4 -0
- package/_mjs/data/Render.mjs.map +1 -0
- package/_mjs/data/RenderParam/api.mjs +28 -0
- package/_mjs/data/RenderParam/api.mjs.map +1 -0
- package/_mjs/data/RenderParam/definition.mjs +20 -0
- package/_mjs/data/RenderParam/definition.mjs.map +1 -0
- package/_mjs/data/RenderParam.mjs +4 -0
- package/_mjs/data/RenderParam.mjs.map +1 -0
- package/_mjs/data/Summary.mjs +11 -0
- package/_mjs/data/Summary.mjs.map +1 -0
- package/_mjs/data/TestAnnotation/api.mjs +47 -0
- package/_mjs/data/TestAnnotation/api.mjs.map +1 -0
- package/_mjs/data/TestAnnotation/definition.mjs +33 -0
- package/_mjs/data/TestAnnotation/definition.mjs.map +1 -0
- package/_mjs/data/TestAnnotation.mjs +4 -0
- package/_mjs/data/TestAnnotation.mjs.map +1 -0
- package/_mjs/data/TestAnnotationMap.mjs +33 -0
- package/_mjs/data/TestAnnotationMap.mjs.map +1 -0
- package/_mjs/data/TestArgs/definition.mjs +9 -0
- package/_mjs/data/TestArgs/definition.mjs.map +1 -0
- package/_mjs/data/TestArgs.mjs +3 -0
- package/_mjs/data/TestArgs.mjs.map +1 -0
- package/_mjs/data/TestConfig.mjs +52 -0
- package/_mjs/data/TestConfig.mjs.map +1 -0
- package/_mjs/data/TestFailure.mjs +49 -0
- package/_mjs/data/TestFailure.mjs.map +1 -0
- package/_mjs/data/TestSuccess.mjs +31 -0
- package/_mjs/data/TestSuccess.mjs.map +1 -0
- package/_mjs/data/TestTimeoutException.mjs +7 -0
- package/_mjs/data/TestTimeoutException.mjs.map +1 -0
- package/_mjs/demo.mjs +33 -0
- package/_mjs/demo.mjs.map +1 -0
- package/_mjs/util/math.mjs +604 -0
- package/_mjs/util/math.mjs.map +1 -0
- package/_src/api.ts +76 -0
- package/_src/control/AbstractRunnableSpec.ts +23 -0
- package/_src/control/Annotations/api.ts +33 -0
- package/_src/control/Annotations/definition.ts +20 -0
- package/_src/control/Annotations/live.ts +50 -0
- package/_src/control/Annotations.ts +5 -0
- package/_src/control/Assertion/api.ts +236 -0
- package/_src/control/Assertion/definition.ts +20 -0
- package/_src/control/Assertion.ts +4 -0
- package/_src/control/AssertionIO/api.ts +32 -0
- package/_src/control/AssertionIO/definition.ts +26 -0
- package/_src/control/AssertionIO.ts +4 -0
- package/_src/control/DefaultRunnableSpec.ts +12 -0
- package/_src/control/DefaultTestReporter/definition.ts +6 -0
- package/_src/control/DefaultTestReporter/render.ts +295 -0
- package/_src/control/DefaultTestReporter.ts +4 -0
- package/_src/control/FreeBooleanAlgebraIO/api.ts +67 -0
- package/_src/control/FreeBooleanAlgebraIO/definition.ts +13 -0
- package/_src/control/FreeBooleanAlgebraIO.ts +4 -0
- package/_src/control/Gen/api/array.ts +31 -0
- package/_src/control/Gen/api/char.ts +83 -0
- package/_src/control/Gen/api/conc.ts +50 -0
- package/_src/control/Gen/api/double.ts +64 -0
- package/_src/control/Gen/api/float.ts +36 -0
- package/_src/control/Gen/api/string.ts +71 -0
- package/_src/control/Gen/api/struct.ts +21 -0
- package/_src/control/Gen/api.ts +276 -0
- package/_src/control/Gen/constraints.ts +38 -0
- package/_src/control/Gen/definition.ts +9 -0
- package/_src/control/Gen.ts +15 -0
- package/_src/control/Live/definition.ts +47 -0
- package/_src/control/Live.ts +3 -0
- package/_src/control/RunnableSpec.ts +42 -0
- package/_src/control/Sample/api.ts +287 -0
- package/_src/control/Sample/definition.ts +7 -0
- package/_src/control/Sample.ts +4 -0
- package/_src/control/Sized/api.ts +14 -0
- package/_src/control/Sized/definition.ts +13 -0
- package/_src/control/Sized/live.ts +19 -0
- package/_src/control/Sized.ts +5 -0
- package/_src/control/Spec/api.ts +384 -0
- package/_src/control/Spec/definition.ts +103 -0
- package/_src/control/Spec.ts +4 -0
- package/_src/control/SummaryBuilder.ts +68 -0
- package/_src/control/Test.ts +31 -0
- package/_src/control/TestAnnotationRenderer/api.ts +75 -0
- package/_src/control/TestAnnotationRenderer/definition.ts +49 -0
- package/_src/control/TestAnnotationRenderer.ts +4 -0
- package/_src/control/TestAspect/api.ts +122 -0
- package/_src/control/TestAspect/definition.ts +3 -0
- package/_src/control/TestAspect.ts +4 -0
- package/_src/control/TestClock/api.ts +36 -0
- package/_src/control/TestClock/definition.ts +196 -0
- package/_src/control/TestClock.ts +4 -0
- package/_src/control/TestConsole/api.ts +36 -0
- package/_src/control/TestConsole/definition.ts +61 -0
- package/_src/control/TestConsole.ts +4 -0
- package/_src/control/TestEnvironment.ts +30 -0
- package/_src/control/TestExecutor.ts +54 -0
- package/_src/control/TestLogger.ts +37 -0
- package/_src/control/TestRandom/api.ts +76 -0
- package/_src/control/TestRandom/definition.ts +362 -0
- package/_src/control/TestRandom.ts +4 -0
- package/_src/control/TestRenderer/ConsoleRenderer.ts +94 -0
- package/_src/control/TestRenderer/definition.ts +7 -0
- package/_src/control/TestRunner.ts +34 -0
- package/_src/data/AssertionData.ts +33 -0
- package/_src/data/AssertionResult.ts +31 -0
- package/_src/data/AssertionValue/api.ts +48 -0
- package/_src/data/AssertionValue/definition.ts +20 -0
- package/_src/data/AssertionValue.ts +4 -0
- package/_src/data/ExecutedSpec/api.ts +96 -0
- package/_src/data/ExecutedSpec/definition.ts +37 -0
- package/_src/data/ExecutedSpec.ts +4 -0
- package/_src/data/ExecutionResult.ts +153 -0
- package/_src/data/FailureDetails.ts +13 -0
- package/_src/data/FreeBooleanAlgebra/api.ts +152 -0
- package/_src/data/FreeBooleanAlgebra/definition.ts +38 -0
- package/_src/data/FreeBooleanAlgebra.ts +4 -0
- package/_src/data/GenFailureDetails.ts +3 -0
- package/_src/data/LogLine/Fragment.ts +59 -0
- package/_src/data/LogLine/Line.ts +91 -0
- package/_src/data/LogLine/Message.ts +94 -0
- package/_src/data/LogLine/Style.ts +150 -0
- package/_src/data/LogLine/api.ts +40 -0
- package/_src/data/LogLine.ts +2 -0
- package/_src/data/Render/api.ts +18 -0
- package/_src/data/Render/definition.ts +36 -0
- package/_src/data/Render.ts +4 -0
- package/_src/data/RenderParam/api.ts +31 -0
- package/_src/data/RenderParam/definition.ts +28 -0
- package/_src/data/RenderParam.ts +4 -0
- package/_src/data/Summary.ts +4 -0
- package/_src/data/TestAnnotation/api.ts +49 -0
- package/_src/data/TestAnnotation/definition.ts +37 -0
- package/_src/data/TestAnnotation.ts +4 -0
- package/_src/data/TestAnnotationMap.ts +41 -0
- package/_src/data/TestArgs/definition.ts +7 -0
- package/_src/data/TestArgs.ts +3 -0
- package/_src/data/TestConfig.ts +47 -0
- package/_src/data/TestFailure.ts +56 -0
- package/_src/data/TestSuccess.ts +39 -0
- package/_src/data/TestTimeoutException.ts +5 -0
- package/_src/demo.ts +16 -0
- package/_src/util/math.ts +497 -0
- package/api.d.ts +21 -0
- package/control/AbstractRunnableSpec.d.ts +15 -0
- package/control/Annotations/api.d.ts +26 -0
- package/control/Annotations/definition.d.ts +20 -0
- package/control/Annotations/live.d.ts +18 -0
- package/control/Annotations.d.ts +3 -0
- package/control/Assertion/api.d.ts +81 -0
- package/control/Assertion/definition.d.ts +17 -0
- package/control/Assertion.d.ts +2 -0
- package/control/AssertionIO/api.d.ts +18 -0
- package/control/AssertionIO/definition.d.ts +18 -0
- package/control/AssertionIO.d.ts +2 -0
- package/control/DefaultRunnableSpec.d.ts +7 -0
- package/control/DefaultTestReporter/definition.d.ts +6 -0
- package/control/DefaultTestReporter/render.d.ts +23 -0
- package/control/DefaultTestReporter.d.ts +2 -0
- package/control/FreeBooleanAlgebraIO/api.d.ts +44 -0
- package/control/FreeBooleanAlgebraIO/definition.d.ts +12 -0
- package/control/FreeBooleanAlgebraIO.d.ts +2 -0
- package/control/Gen/api/array.d.ts +19 -0
- package/control/Gen/api/char.d.ts +47 -0
- package/control/Gen/api/conc.d.ts +26 -0
- package/control/Gen/api/double.d.ts +13 -0
- package/control/Gen/api/float.d.ts +7 -0
- package/control/Gen/api/string.d.ts +49 -0
- package/control/Gen/api/struct.d.ts +8 -0
- package/control/Gen/api.d.ts +169 -0
- package/control/Gen/constraints.d.ts +32 -0
- package/control/Gen/definition.d.ts +11 -0
- package/control/Gen.d.ts +10 -0
- package/control/Live/definition.d.ts +24 -0
- package/control/Live.d.ts +1 -0
- package/control/RunnableSpec.d.ts +12 -0
- package/control/Sample/api.d.ts +79 -0
- package/control/Sample/definition.d.ts +11 -0
- package/control/Sample.d.ts +2 -0
- package/control/Sized/api.d.ts +13 -0
- package/control/Sized/definition.d.ts +14 -0
- package/control/Sized/live.d.ts +9 -0
- package/control/Sized.d.ts +3 -0
- package/control/Spec/api.d.ts +159 -0
- package/control/Spec/definition.d.ts +96 -0
- package/control/Spec.d.ts +2 -0
- package/control/SummaryBuilder.d.ts +15 -0
- package/control/Test.d.ts +20 -0
- package/control/TestAnnotationRenderer/api.d.ts +42 -0
- package/control/TestAnnotationRenderer/definition.d.ts +31 -0
- package/control/TestAnnotationRenderer.d.ts +2 -0
- package/control/TestAspect/api.d.ts +23 -0
- package/control/TestAspect/definition.d.ts +2 -0
- package/control/TestAspect.d.ts +2 -0
- package/control/TestClock/api.d.ts +21 -0
- package/control/TestClock/definition.d.ts +66 -0
- package/control/TestClock.d.ts +2 -0
- package/control/TestConsole/api.d.ts +15 -0
- package/control/TestConsole/definition.d.ts +39 -0
- package/control/TestConsole.d.ts +2 -0
- package/control/TestEnvironment.d.ts +16 -0
- package/control/TestExecutor.d.ts +13 -0
- package/control/TestLogger.d.ts +25 -0
- package/control/TestRandom/api.d.ts +49 -0
- package/control/TestRandom/definition.d.ts +91 -0
- package/control/TestRandom.d.ts +2 -0
- package/control/TestRenderer/ConsoleRenderer.d.ts +15 -0
- package/control/TestRenderer/definition.d.ts +4 -0
- package/control/TestRunner.d.ts +18 -0
- package/data/AssertionData.d.ts +24 -0
- package/data/AssertionResult.d.ts +23 -0
- package/data/AssertionValue/api.d.ts +27 -0
- package/data/AssertionValue/definition.d.ts +19 -0
- package/data/AssertionValue.d.ts +2 -0
- package/data/ExecutedSpec/api.d.ts +47 -0
- package/data/ExecutedSpec/definition.d.ts +39 -0
- package/data/ExecutedSpec.d.ts +2 -0
- package/data/ExecutionResult.d.ts +59 -0
- package/data/FailureDetails.d.ts +15 -0
- package/data/FreeBooleanAlgebra/api.d.ts +81 -0
- package/data/FreeBooleanAlgebra/definition.d.ts +38 -0
- package/data/FreeBooleanAlgebra.d.ts +2 -0
- package/data/GenFailureDetails.d.ts +6 -0
- package/data/LogLine/Fragment.d.ts +46 -0
- package/data/LogLine/Line.d.ts +62 -0
- package/data/LogLine/Message.d.ts +61 -0
- package/data/LogLine/Style.d.ts +107 -0
- package/data/LogLine/api.d.ts +11 -0
- package/data/LogLine.d.ts +2 -0
- package/data/Render/api.d.ts +13 -0
- package/data/Render/definition.d.ts +31 -0
- package/data/Render.d.ts +2 -0
- package/data/RenderParam/api.d.ts +13 -0
- package/data/RenderParam/definition.d.ts +25 -0
- package/data/RenderParam.d.ts +2 -0
- package/data/Summary.d.ts +8 -0
- package/data/TestAnnotation/api.d.ts +41 -0
- package/data/TestAnnotation/definition.d.ts +20 -0
- package/data/TestAnnotation.d.ts +2 -0
- package/data/TestAnnotationMap.d.ts +12 -0
- package/data/TestArgs/definition.d.ts +7 -0
- package/data/TestArgs.d.ts +1 -0
- package/data/TestConfig.d.ts +42 -0
- package/data/TestFailure.d.ts +46 -0
- package/data/TestSuccess.d.ts +33 -0
- package/data/TestTimeoutException.d.ts +3 -0
- package/demo.d.ts +1 -0
- package/package.json +18 -0
- package/util/math.d.ts +130 -0
@@ -0,0 +1,384 @@
|
|
1
|
+
import type { Annotated } from "../Annotations.js";
|
2
|
+
import type { SpecCase } from "./definition.js";
|
3
|
+
import type { ExecutionStrategy } from "@fncts/base/data/ExecutionStrategy";
|
4
|
+
import type { Spreadable } from "@fncts/base/types.js";
|
5
|
+
import type { TestArgs } from "@fncts/test/data/TestArgs.js";
|
6
|
+
|
7
|
+
import { identity, tuple } from "@fncts/base/data/function";
|
8
|
+
import { matchTag, matchTag_ } from "@fncts/base/util/pattern";
|
9
|
+
import { TestSuccess } from "@fncts/test/data/TestSuccess";
|
10
|
+
|
11
|
+
import { TestAnnotation } from "../../data/TestAnnotation.js";
|
12
|
+
import { TestAnnotationMap } from "../../data/TestAnnotationMap.js";
|
13
|
+
import { Annotations } from "../Annotations.js";
|
14
|
+
import { Spec } from "./definition.js";
|
15
|
+
import { ExecCase, LabeledCase, MultipleCase, PSpec, ScopedCase, TestCase } from "./definition.js";
|
16
|
+
|
17
|
+
/**
|
18
|
+
* @tsplus getter fncts.test.PSpec annotated
|
19
|
+
*/
|
20
|
+
export function annotated<R, E, T>(spec: PSpec<R, E, T>): PSpec<R & Has<Annotations>, Annotated<E>, Annotated<T>> {
|
21
|
+
return spec.transform(
|
22
|
+
matchTag(
|
23
|
+
{
|
24
|
+
Scoped: ({ scoped }) => new ScopedCase(scoped.mapError((e) => tuple(e, TestAnnotationMap.empty))),
|
25
|
+
Test: ({ test, annotations }) => new TestCase(Annotations.withAnnotations(test), annotations),
|
26
|
+
},
|
27
|
+
identity,
|
28
|
+
),
|
29
|
+
);
|
30
|
+
}
|
31
|
+
|
32
|
+
/**
|
33
|
+
* @tsplus fluent fncts.test.PSpec combine
|
34
|
+
*/
|
35
|
+
export function combine_<R, E, T, R1, E1, T1>(
|
36
|
+
self: PSpec<R, E, T>,
|
37
|
+
that: PSpec<R1, E1, T1>,
|
38
|
+
): PSpec<R & R1, E | E1, T | T1> {
|
39
|
+
if (self.caseValue.isMultiple() && that.caseValue.isMultiple()) {
|
40
|
+
return MultipleCase(self.caseValue.specs.concat(that.caseValue.specs));
|
41
|
+
}
|
42
|
+
if (self.caseValue.isMultiple()) {
|
43
|
+
return MultipleCase(self.caseValue.specs.append(that));
|
44
|
+
}
|
45
|
+
if (that.caseValue.isMultiple()) {
|
46
|
+
return MultipleCase(that.caseValue.specs.prepend(self));
|
47
|
+
}
|
48
|
+
return MultipleCase(Conc<PSpec<R & R1, E | E1, T | T1>>(self, that));
|
49
|
+
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* @tsplus fluent fncts.test.PSpec contramapEnvironment
|
53
|
+
*/
|
54
|
+
export function contramapEnvironment_<R, E, T, R0>(
|
55
|
+
self: PSpec<R, E, T>,
|
56
|
+
f: (r0: Environment<R0>) => Environment<R>,
|
57
|
+
): PSpec<R0, E, T> {
|
58
|
+
return self.transform(
|
59
|
+
matchTag(
|
60
|
+
{
|
61
|
+
Scoped: ({ scoped }) =>
|
62
|
+
new ScopedCase(
|
63
|
+
scoped.contramapEnvironment((r: Environment<R0 & Has<Scope>>) =>
|
64
|
+
Environment.empty.add(r.get(Scope.Tag), Scope.Tag).union(f(r)),
|
65
|
+
),
|
66
|
+
),
|
67
|
+
Test: ({ test, annotations }) => new TestCase(test.contramapEnvironment(f), annotations),
|
68
|
+
},
|
69
|
+
identity,
|
70
|
+
),
|
71
|
+
);
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* @tsplus fluent fncts.test.PSpec countTests
|
76
|
+
*/
|
77
|
+
export function countTests_<R, E, T>(spec: PSpec<R, E, T>, f: (t: T) => boolean): IO<R & Has<Scope>, E, number> {
|
78
|
+
return spec.fold(
|
79
|
+
matchTag({
|
80
|
+
Exec: ({ spec }) => spec,
|
81
|
+
Labeled: ({ spec }) => spec,
|
82
|
+
Scoped: ({ scoped }) => scoped.flatten,
|
83
|
+
Multiple: ({ specs }) => IO.sequenceIterable(specs).map((specs) => specs.foldLeft(0, (b, a) => b + a)),
|
84
|
+
Test: ({ test }) => test.map((t) => (f(t) ? 1 : 0)),
|
85
|
+
}),
|
86
|
+
);
|
87
|
+
}
|
88
|
+
|
89
|
+
/**
|
90
|
+
* @tsplus static fncts.test.PSpecOps empty
|
91
|
+
*/
|
92
|
+
export const empty: PSpec<unknown, never, never> = multipleCase(Conc.empty());
|
93
|
+
|
94
|
+
/**
|
95
|
+
* @tsplus static fncts.test.PSpecOps exec
|
96
|
+
* @tsplus static fncts.test.PSpec.ExecCaseOps __call
|
97
|
+
*/
|
98
|
+
export function exec<R, E, T>(spec: PSpec<R, E, T>, exec: ExecutionStrategy): PSpec<R, E, T> {
|
99
|
+
return new PSpec(new ExecCase(exec, spec));
|
100
|
+
}
|
101
|
+
|
102
|
+
/**
|
103
|
+
* @tsplus fluent fncts.test.PSpec execute
|
104
|
+
*/
|
105
|
+
export function execute<R, E, T>(
|
106
|
+
self: PSpec<R, E, T>,
|
107
|
+
defExec: ExecutionStrategy,
|
108
|
+
): IO<R & Has<Scope>, never, PSpec<unknown, E, T>> {
|
109
|
+
return IO.environmentWithIO((r: Environment<R & Has<Scope>>) =>
|
110
|
+
self.provideEnvironment(r).foreachExec(IO.failCauseNow, IO.succeedNow, defExec),
|
111
|
+
);
|
112
|
+
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
* @tsplus fluent fncts.test.PSpec filterAnnotations
|
116
|
+
*/
|
117
|
+
export function filterAnnotations_<R, E, T, V>(
|
118
|
+
spec: PSpec<R, E, T>,
|
119
|
+
key: TestAnnotation<V>,
|
120
|
+
f: (v: V) => boolean,
|
121
|
+
): Maybe<PSpec<R, E, T>> {
|
122
|
+
return matchTag_(spec.caseValue, {
|
123
|
+
Exec: ({ spec, exec }) => spec.filterAnnotations(key, f).map((spec) => ExecCase(spec, exec)),
|
124
|
+
Labeled: ({ label, spec }) => spec.filterAnnotations(key, f).map((spec) => LabeledCase(spec, label)),
|
125
|
+
Scoped: ({ scoped }) =>
|
126
|
+
Just(ScopedCase(scoped.map((spec) => spec.filterAnnotations(key, f).getOrElse(Spec.empty)))),
|
127
|
+
Multiple: ({ specs }) => {
|
128
|
+
const filtered = specs.filterMap((spec) => spec.filterAnnotations(key, f));
|
129
|
+
return filtered.isEmpty ? Nothing() : Just(MultipleCase(filtered));
|
130
|
+
},
|
131
|
+
Test: ({ test, annotations }) => (f(annotations.get(key)) ? Just(TestCase(test, annotations)) : Nothing()),
|
132
|
+
});
|
133
|
+
}
|
134
|
+
|
135
|
+
/**
|
136
|
+
* @tsplus fluent fncts.test.PSpec filterLabels
|
137
|
+
*/
|
138
|
+
export function filterLabels_<R, E, T>(spec: PSpec<R, E, T>, f: (label: string) => boolean): Maybe<PSpec<R, E, T>> {
|
139
|
+
return matchTag_(spec.caseValue, {
|
140
|
+
Exec: ({ spec, exec }) => spec.filterLabels(f).map((spec) => ExecCase(spec, exec)),
|
141
|
+
Labeled: ({ label, spec }) =>
|
142
|
+
f(label) ? Just(LabeledCase(spec, label)) : spec.filterLabels(f).map((spec) => LabeledCase(spec, label)),
|
143
|
+
Scoped: ({ scoped }) => Just(ScopedCase(scoped.map((spec) => spec.filterLabels(f).getOrElse(Spec.empty)))),
|
144
|
+
Multiple: ({ specs }) => {
|
145
|
+
const filtered = specs.filterMap((spec) => spec.filterLabels(f));
|
146
|
+
return filtered.isEmpty ? Nothing() : Just(MultipleCase(filtered));
|
147
|
+
},
|
148
|
+
Test: () => Nothing(),
|
149
|
+
});
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
* @tsplus fluent fncts.test.PSpec filterTags
|
154
|
+
*/
|
155
|
+
export function filterTags_<R, E, T>(spec: PSpec<R, E, T>, f: (tag: string) => boolean): Maybe<PSpec<R, E, T>> {
|
156
|
+
return spec.filterAnnotations(TestAnnotation.Tagged, (v) => v.exists(f));
|
157
|
+
}
|
158
|
+
|
159
|
+
/**
|
160
|
+
* @tsplus fluent fncts.test.PSpec filterByArgs
|
161
|
+
*/
|
162
|
+
export function filterByArgs<R, E>(spec: Spec<R, E>, args: TestArgs): Spec<R, E> {
|
163
|
+
return spec
|
164
|
+
.filterTags(args.tagSearchTerms.elem(String.Eq))
|
165
|
+
.flatMap((spec) =>
|
166
|
+
spec.filterLabels((label) => args.testSearchTerms.findIndex((term) => term.includes(label)) === -1),
|
167
|
+
)
|
168
|
+
.getOrElse(() => spec);
|
169
|
+
}
|
170
|
+
|
171
|
+
/**
|
172
|
+
* @tsplus fluent fncts.test.PSpec fold
|
173
|
+
*/
|
174
|
+
export function fold_<R, E, T, Z>(spec: PSpec<R, E, T>, f: (_: SpecCase<R, E, T, Z>) => Z): Z {
|
175
|
+
return matchTag_(spec.caseValue, {
|
176
|
+
Exec: ({ exec, spec }) => f(new ExecCase(exec, spec.fold(f))),
|
177
|
+
Labeled: ({ label, spec }) => f(new LabeledCase(label, spec.fold(f))),
|
178
|
+
Scoped: ({ scoped }) => f(new ScopedCase(scoped.map((spec) => spec.fold(f)))),
|
179
|
+
Multiple: ({ specs }) => f(new MultipleCase(specs.map((spec) => spec.fold(f)))),
|
180
|
+
Test: (t) => f(t),
|
181
|
+
});
|
182
|
+
}
|
183
|
+
|
184
|
+
/**
|
185
|
+
* @tsplus fluent fncts.test.PSpec foldScoped
|
186
|
+
*/
|
187
|
+
export function foldScoped_<R, E, T, R1, E1, Z>(
|
188
|
+
spec: PSpec<R, E, T>,
|
189
|
+
f: (_: SpecCase<R, E, T, Z>) => IO<R1 & Has<Scope>, E1, Z>,
|
190
|
+
defExec: ExecutionStrategy,
|
191
|
+
): IO<R & R1 & Has<Scope>, E1, Z> {
|
192
|
+
return matchTag_(spec.caseValue, {
|
193
|
+
Exec: ({ exec, spec }) => spec.foldScoped(f, exec).flatMap((z) => f(new ExecCase(exec, z))),
|
194
|
+
Labeled: ({ label, spec }) => spec.foldScoped(f, defExec).flatMap((z) => f(new LabeledCase(label, z))),
|
195
|
+
Scoped: ({ scoped }) =>
|
196
|
+
scoped.matchCauseIO(
|
197
|
+
(cause) => f(new ScopedCase(IO.haltNow(cause))),
|
198
|
+
(spec) => spec.foldScoped(f, defExec).flatMap((z) => f(new ScopedCase(IO.succeedNow(z)))),
|
199
|
+
),
|
200
|
+
Multiple: ({ specs }) =>
|
201
|
+
IO.foreachExec(specs, defExec, (spec) => spec.foldScoped(f, defExec).scoped).flatMap((zs) =>
|
202
|
+
f(new MultipleCase(zs)),
|
203
|
+
),
|
204
|
+
Test: f,
|
205
|
+
});
|
206
|
+
}
|
207
|
+
|
208
|
+
/**
|
209
|
+
* @tsplus fluent fncts.test.PSpec foreachExec
|
210
|
+
*/
|
211
|
+
export function foreachExec_<R, E, T, R1, E1, A, R2, E2, B>(
|
212
|
+
spec: PSpec<R, E, T>,
|
213
|
+
failure: (c: Cause<E>) => IO<R1, E1, A>,
|
214
|
+
success: (t: T) => IO<R2, E2, B>,
|
215
|
+
defExec: ExecutionStrategy,
|
216
|
+
): IO<R & R1 & R2 & Has<Scope>, never, PSpec<R & R1 & R2, E1 | E2, A | B>> {
|
217
|
+
return spec.foldScoped(
|
218
|
+
matchTag({
|
219
|
+
Exec: ({ exec, spec }) => IO.succeedNow(ExecCase(spec, exec)),
|
220
|
+
Labeled: ({ label, spec }) => IO.succeedNow(LabeledCase(spec, label)),
|
221
|
+
Scoped: ({ scoped }) =>
|
222
|
+
scoped.matchCause(
|
223
|
+
(cause) => TestCase(failure(cause), TestAnnotationMap.empty),
|
224
|
+
(t) => ScopedCase(IO.succeedNow(t)),
|
225
|
+
),
|
226
|
+
Multiple: ({ specs }) => IO.succeedNow(MultipleCase(specs)),
|
227
|
+
Test: ({ test, annotations }) =>
|
228
|
+
test.matchCause(
|
229
|
+
(cause) => TestCase(failure(cause), annotations),
|
230
|
+
(t) => TestCase(success(t), annotations),
|
231
|
+
),
|
232
|
+
}),
|
233
|
+
defExec,
|
234
|
+
);
|
235
|
+
}
|
236
|
+
|
237
|
+
/**
|
238
|
+
* @tsplus fluent fncts.test.PSpec labeled
|
239
|
+
* @tsplus static fncts.test.PSpecOps labeled
|
240
|
+
* @tsplus static fncts.test.PSpec.LabeledCaseOps __call
|
241
|
+
*/
|
242
|
+
export function labeledCase<R, E, T>(spec: PSpec<R, E, T>, label: string): PSpec<R, E, T> {
|
243
|
+
return new PSpec(new LabeledCase(label, spec));
|
244
|
+
}
|
245
|
+
|
246
|
+
/**
|
247
|
+
* @tsplus fluent fncts.test.PSpec scoped
|
248
|
+
* @tsplus static fncts.test.PSpecOps scoped
|
249
|
+
* @tsplus static fncts.test.PSpec.ScopedCaseOps __call
|
250
|
+
*/
|
251
|
+
export function scoped<R, E, T>(managed: IO<R & Has<Scope>, E, PSpec<R, E, T>>): PSpec<R, E, T> {
|
252
|
+
return new PSpec(new ScopedCase(managed));
|
253
|
+
}
|
254
|
+
|
255
|
+
/**
|
256
|
+
* @tsplus fluent fncts.test.SpecCase mapError
|
257
|
+
*/
|
258
|
+
export function mapError<R, E, T, E1>(self: PSpec<R, E, T>, f: (e: E) => E1): PSpec<R, E1, T> {
|
259
|
+
return self.transform(
|
260
|
+
matchTag(
|
261
|
+
{
|
262
|
+
Scoped: ({ scoped }) => new ScopedCase(scoped.mapError(f)),
|
263
|
+
Test: ({ test, annotations }) => new TestCase(test.mapError(f), annotations),
|
264
|
+
},
|
265
|
+
identity,
|
266
|
+
),
|
267
|
+
);
|
268
|
+
}
|
269
|
+
|
270
|
+
/**
|
271
|
+
* @tsplus fluent fncts.test.SpecCase map
|
272
|
+
*/
|
273
|
+
export function mapSpecCase_<R, E, T, A, B>(fa: SpecCase<R, E, T, A>, f: (a: A) => B): SpecCase<R, E, T, B> {
|
274
|
+
return matchTag_(fa, {
|
275
|
+
Exec: ({ exec, spec }) => new ExecCase(exec, f(spec)),
|
276
|
+
Labeled: ({ label, spec }) => new LabeledCase(label, f(spec)),
|
277
|
+
Scoped: ({ scoped }) => new ScopedCase(scoped.map(f)),
|
278
|
+
Multiple: ({ specs }) => new MultipleCase(specs.map(f)),
|
279
|
+
Test: ({ test, annotations }) => new TestCase(test, annotations),
|
280
|
+
});
|
281
|
+
}
|
282
|
+
|
283
|
+
/**
|
284
|
+
* @tsplus fluent fncts.test.PSpec multiple
|
285
|
+
* @tsplus static fncts.test.PSpecOps multiple
|
286
|
+
* @tsplus static fncts.test.PSpec.MultipleCaseOps __call
|
287
|
+
*/
|
288
|
+
export function multipleCase<R, E, T>(specs: Conc<PSpec<R, E, T>>): PSpec<R, E, T> {
|
289
|
+
return new PSpec(new MultipleCase(specs));
|
290
|
+
}
|
291
|
+
|
292
|
+
/**
|
293
|
+
* @tsplus fluent fncts.test.PSpec provideEnvironment
|
294
|
+
*/
|
295
|
+
export function provideEnvironment_<R, E, T>(self: PSpec<R, E, T>, r: Environment<R>): PSpec<unknown, E, T> {
|
296
|
+
return self.contramapEnvironment(() => r);
|
297
|
+
}
|
298
|
+
|
299
|
+
/**
|
300
|
+
* @tsplus fluent fncts.test.PSpec provideLayer
|
301
|
+
*/
|
302
|
+
export function provideLayer_<RIn, E, ROut extends Spreadable, R, E1, T>(
|
303
|
+
self: PSpec<ROut, E1, T>,
|
304
|
+
layer: Layer<RIn, E, ROut>,
|
305
|
+
): PSpec<RIn, E | E1, T> {
|
306
|
+
return self.transform(
|
307
|
+
matchTag(
|
308
|
+
{
|
309
|
+
Scoped: ({ scoped }) => new ScopedCase(scoped.provideLayer(Layer.environment<Has<Scope>>().and(layer))),
|
310
|
+
Test: ({ test, annotations }) => new TestCase(test.provideLayer(layer), annotations),
|
311
|
+
},
|
312
|
+
identity,
|
313
|
+
),
|
314
|
+
);
|
315
|
+
}
|
316
|
+
|
317
|
+
/**
|
318
|
+
* @tsplus fluent fncts.test.PSpec test
|
319
|
+
* @tsplus static fncts.test.PSpecOps test
|
320
|
+
* @tsplus static fncts.test.PSpec.TestCaseOps __call
|
321
|
+
*/
|
322
|
+
export function testCase<R, E, T>(test: IO<R, E, T>, annotations: TestAnnotationMap): PSpec<R, E, T> {
|
323
|
+
return new PSpec(new TestCase(test, annotations));
|
324
|
+
}
|
325
|
+
|
326
|
+
/**
|
327
|
+
* @tsplus fluent fncts.test.PSpec transform
|
328
|
+
*/
|
329
|
+
export function transform_<R, E, T, R1, E1, T1>(
|
330
|
+
spec: PSpec<R, E, T>,
|
331
|
+
f: (_: SpecCase<R, E, T, PSpec<R1, E1, T1>>) => SpecCase<R1, E1, T1, PSpec<R1, E1, T1>>,
|
332
|
+
): PSpec<R1, E1, T1> {
|
333
|
+
return matchTag_(spec.caseValue, {
|
334
|
+
Exec: ({ exec, spec }) => new PSpec(f(new ExecCase(exec, spec.transform(f)))),
|
335
|
+
Labeled: ({ label, spec }) => new PSpec(f(new LabeledCase(label, spec.transform(f)))),
|
336
|
+
Scoped: ({ scoped }) => new PSpec(f(new ScopedCase(scoped.map((spec) => spec.transform(f))))),
|
337
|
+
Multiple: ({ specs }) => new PSpec(f(new MultipleCase(specs.map((spec) => spec.transform(f))))),
|
338
|
+
Test: (t) => new PSpec(f(t)),
|
339
|
+
});
|
340
|
+
}
|
341
|
+
|
342
|
+
/**
|
343
|
+
* @tsplus fluent fncts.test.PSpec annotate
|
344
|
+
*/
|
345
|
+
export function annotate_<R, E, T, V>(self: PSpec<R, E, T>, key: TestAnnotation<V>, value: V): PSpec<R, E, T> {
|
346
|
+
return self.transform(
|
347
|
+
matchTag(
|
348
|
+
{
|
349
|
+
Test: ({ test, annotations }) => new TestCase(test, annotations.annotate(key, value)),
|
350
|
+
},
|
351
|
+
identity,
|
352
|
+
),
|
353
|
+
);
|
354
|
+
}
|
355
|
+
|
356
|
+
/**
|
357
|
+
* @tsplus fluent fncts.test.PSpec whenIO
|
358
|
+
*/
|
359
|
+
export function whenIO_<R, E, R1, E1>(
|
360
|
+
self: PSpec<R, E, TestSuccess>,
|
361
|
+
b: IO<R1, E1, boolean>,
|
362
|
+
): PSpec<R & R1 & Has<Annotations>, E | E1, TestSuccess> {
|
363
|
+
return matchTag_(self.caseValue, {
|
364
|
+
Exec: (c) => exec(c.spec.whenIO(b), c.exec),
|
365
|
+
Labeled: ({ label, spec }) => Spec.labeled(spec.whenIO(b), label),
|
366
|
+
Scoped: (c) => Spec.scoped(b.flatMap((b) => (b ? c.scoped : IO.succeedNow(Spec.empty)))),
|
367
|
+
Multiple: ({ specs }) => Spec.multiple(specs.map((_) => _.whenIO(b))),
|
368
|
+
Test: (c) =>
|
369
|
+
Spec.test(
|
370
|
+
b.flatMap((b) => IO.if(b, c.test, Annotations.annotate(TestAnnotation.Ignored, 1)).as(TestSuccess.Ignored)),
|
371
|
+
c.annotations,
|
372
|
+
),
|
373
|
+
});
|
374
|
+
}
|
375
|
+
|
376
|
+
/**
|
377
|
+
* @tsplus fluent fncts.test.PSpec when
|
378
|
+
*/
|
379
|
+
export function when_<R, E>(
|
380
|
+
self: PSpec<R, E, TestSuccess>,
|
381
|
+
b: Lazy<boolean>,
|
382
|
+
): PSpec<R & Has<Annotations>, E, TestSuccess> {
|
383
|
+
return self.whenIO(IO.succeed(b));
|
384
|
+
}
|
@@ -0,0 +1,103 @@
|
|
1
|
+
import type { TestAnnotationMap } from "../../data/TestAnnotationMap.js";
|
2
|
+
import type { TestFailure } from "../../data/TestFailure.js";
|
3
|
+
import type { TestSuccess } from "../../data/TestSuccess.js";
|
4
|
+
import type { _A, _E, _R } from "@fncts/base/types.js";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @tsplus type fncts.test.PSpec
|
8
|
+
* @tsplus companion fncts.test.PSpecOps
|
9
|
+
*/
|
10
|
+
export class PSpec<R, E, T> {
|
11
|
+
readonly _R!: (_: R) => void;
|
12
|
+
readonly _E!: () => E;
|
13
|
+
readonly _A!: () => T;
|
14
|
+
|
15
|
+
constructor(readonly caseValue: SpecCase<R, E, T, PSpec<R, E, T>>) {}
|
16
|
+
}
|
17
|
+
|
18
|
+
/**
|
19
|
+
* @tsplus type fncts.test.PSpecOps
|
20
|
+
*/
|
21
|
+
export interface SpecOps {}
|
22
|
+
|
23
|
+
export const Spec: SpecOps = {};
|
24
|
+
|
25
|
+
/**
|
26
|
+
* @tsplus type fncts.test.PSpec
|
27
|
+
*/
|
28
|
+
export type Spec<R, E> = PSpec<R, TestFailure<E>, TestSuccess>;
|
29
|
+
|
30
|
+
export const enum SpecCaseTag {
|
31
|
+
Exec = "Exec",
|
32
|
+
Labeled = "Labeled",
|
33
|
+
Scoped = "Scoped",
|
34
|
+
Multiple = "Multiple",
|
35
|
+
Test = "Test",
|
36
|
+
}
|
37
|
+
|
38
|
+
/**
|
39
|
+
* @tsplus companion fncts.test.PSpec.ExecCaseOps
|
40
|
+
*/
|
41
|
+
export class ExecCase<Spec> {
|
42
|
+
readonly _tag = SpecCaseTag.Exec;
|
43
|
+
constructor(readonly exec: ExecutionStrategy, readonly spec: Spec) {}
|
44
|
+
}
|
45
|
+
|
46
|
+
/**
|
47
|
+
* @tsplus companion fncts.test.PSpec.LabeledCaseOps
|
48
|
+
*/
|
49
|
+
export class LabeledCase<Spec> {
|
50
|
+
readonly _tag = SpecCaseTag.Labeled;
|
51
|
+
constructor(readonly label: string, readonly spec: Spec) {}
|
52
|
+
}
|
53
|
+
|
54
|
+
/**
|
55
|
+
* @tsplus companion fncts.test.PSpec.ScopedCaseOps
|
56
|
+
*/
|
57
|
+
export class ScopedCase<R, E, Spec> {
|
58
|
+
readonly _tag = SpecCaseTag.Scoped;
|
59
|
+
constructor(readonly scoped: IO<R & Has<Scope>, E, Spec>) {}
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* @tsplus companion fncts.test.PSpec.MultipleCaseOps
|
64
|
+
*/
|
65
|
+
export class MultipleCase<Spec> {
|
66
|
+
readonly _tag = SpecCaseTag.Multiple;
|
67
|
+
constructor(readonly specs: Conc<Spec>) {}
|
68
|
+
}
|
69
|
+
|
70
|
+
/**
|
71
|
+
* @tsplus companion fncts.test.PSpec.TestCaseOps
|
72
|
+
*/
|
73
|
+
export class TestCase<R, E, T> {
|
74
|
+
readonly _R!: (_: R) => void;
|
75
|
+
readonly _E!: () => E;
|
76
|
+
readonly _A!: () => T;
|
77
|
+
readonly _tag = SpecCaseTag.Test;
|
78
|
+
constructor(readonly test: IO<R, E, T>, readonly annotations: TestAnnotationMap) {}
|
79
|
+
}
|
80
|
+
|
81
|
+
/**
|
82
|
+
* @tsplus type fncts.test.SpecCase
|
83
|
+
*/
|
84
|
+
export type SpecCase<R, E, T, A> =
|
85
|
+
| ExecCase<A>
|
86
|
+
| LabeledCase<A>
|
87
|
+
| ScopedCase<R, E, A>
|
88
|
+
| MultipleCase<A>
|
89
|
+
| TestCase<R, E, T>;
|
90
|
+
|
91
|
+
/**
|
92
|
+
* @tsplus fluent fncts.test.SpecCase isMultiple
|
93
|
+
*/
|
94
|
+
export function isMultiple<R, E, T, A>(self: SpecCase<R, E, T, A>): self is MultipleCase<A> {
|
95
|
+
return self._tag === SpecCaseTag.Multiple;
|
96
|
+
}
|
97
|
+
|
98
|
+
/**
|
99
|
+
* @tsplus unify fncts.test.PSpec
|
100
|
+
*/
|
101
|
+
export function unifyPSpec<X extends PSpec<any, any, any>>(_: X): PSpec<_R<X>, _E<X>, _A<X>> {
|
102
|
+
return _;
|
103
|
+
}
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import type { TestFailure } from "@fncts/test/data/TestFailure";
|
2
|
+
import type { TestSuccess } from "@fncts/test/data/TestSuccess";
|
3
|
+
|
4
|
+
import { matchTag } from "@fncts/base/util/pattern";
|
5
|
+
import { render } from "@fncts/test/control/DefaultTestReporter/render";
|
6
|
+
import { silent } from "@fncts/test/control/TestAnnotationRenderer";
|
7
|
+
import { ConsoleRenderer } from "@fncts/test/control/TestRenderer/ConsoleRenderer";
|
8
|
+
import { ExecutedSpec } from "@fncts/test/data/ExecutedSpec";
|
9
|
+
import { Summary } from "@fncts/test/data/Summary";
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @tsplus type fncts.test.SummaryBuilder
|
13
|
+
*/
|
14
|
+
export interface SummaryBuilderOps {}
|
15
|
+
|
16
|
+
export const SummaryBuilder: SummaryBuilderOps = {};
|
17
|
+
|
18
|
+
/**
|
19
|
+
* @tsplus static fncts.test.SummaryBuilder buildSummary
|
20
|
+
*/
|
21
|
+
export function buildSummary<E>(executedSpec: ExecutedSpec<E>): Summary {
|
22
|
+
const success = countTestResults(executedSpec, (_) =>
|
23
|
+
_.match(
|
24
|
+
() => false,
|
25
|
+
(_) => _._tag === "Succeeded",
|
26
|
+
),
|
27
|
+
);
|
28
|
+
const fail = countTestResults(executedSpec, (_) => _.isLeft());
|
29
|
+
const ignore = countTestResults(executedSpec, (_) =>
|
30
|
+
_.match(
|
31
|
+
() => false,
|
32
|
+
(_) => _._tag === "Ignored",
|
33
|
+
),
|
34
|
+
);
|
35
|
+
const failures = extractFailures(executedSpec);
|
36
|
+
const rendered = ConsoleRenderer.render(failures.flatMap(render), silent).join("\n");
|
37
|
+
|
38
|
+
return new Summary(success, fail, ignore, rendered);
|
39
|
+
}
|
40
|
+
|
41
|
+
function countTestResults<E>(
|
42
|
+
executedSpec: ExecutedSpec<E>,
|
43
|
+
predicate: (r: Either<TestFailure<E>, TestSuccess>) => boolean,
|
44
|
+
): number {
|
45
|
+
return executedSpec.fold(
|
46
|
+
matchTag({
|
47
|
+
Labeled: ({ spec }) => spec,
|
48
|
+
Multiple: ({ specs }) => specs.foldLeft(0, (b, a) => b + a),
|
49
|
+
Test: ({ test }) => (predicate(test) ? 1 : 0),
|
50
|
+
}),
|
51
|
+
);
|
52
|
+
}
|
53
|
+
|
54
|
+
function extractFailures<E>(executedSpec: ExecutedSpec<E>): Vector<ExecutedSpec<E>> {
|
55
|
+
return executedSpec.fold(
|
56
|
+
matchTag({
|
57
|
+
Labeled: ({ label, spec }) => spec.map((spec) => ExecutedSpec.labeled(spec, label)),
|
58
|
+
Test: (c) => (c.test.isLeft() ? Vector.single(new ExecutedSpec(c)) : Vector.empty<ExecutedSpec<E>>()),
|
59
|
+
Multiple: ({ specs }) => {
|
60
|
+
const newSpecs = specs.flatMap(Conc.from);
|
61
|
+
if (newSpecs.isNonEmpty) {
|
62
|
+
return Vector.single(ExecutedSpec.multiple(newSpecs));
|
63
|
+
}
|
64
|
+
return Vector.empty<ExecutedSpec<E>>();
|
65
|
+
},
|
66
|
+
}),
|
67
|
+
);
|
68
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import type { TestResult } from "../data/FailureDetails.js";
|
2
|
+
|
3
|
+
import { FreeBooleanAlgebra } from "../data/FreeBooleanAlgebra.js";
|
4
|
+
import { TestFailure } from "../data/TestFailure.js";
|
5
|
+
import { TestSuccess } from "../data/TestSuccess.js";
|
6
|
+
|
7
|
+
/**
|
8
|
+
* @tsplus type fncts.control.IO
|
9
|
+
*/
|
10
|
+
export type Test<R, E> = IO<R, TestFailure<E>, TestSuccess>;
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @tsplus type fncts.test.TestOps
|
14
|
+
*/
|
15
|
+
export interface TestOps {}
|
16
|
+
|
17
|
+
export const Test: TestOps = {};
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @tsplus static fncts.test.TestOps fromAssertion
|
21
|
+
*/
|
22
|
+
export function fromAssertion<R, E>(assertion: Lazy<IO<R, E, TestResult>>): Test<R, E> {
|
23
|
+
return IO.defer(assertion).matchCauseIO(
|
24
|
+
(cause) => IO.failNow(TestFailure.failCause(cause)),
|
25
|
+
(testResult) =>
|
26
|
+
testResult.failures.match(
|
27
|
+
() => IO.succeedNow(TestSuccess.Succeeded(FreeBooleanAlgebra.success(undefined))),
|
28
|
+
(failure) => IO.failNow(TestFailure.assertion(failure)),
|
29
|
+
),
|
30
|
+
);
|
31
|
+
}
|
@@ -0,0 +1,75 @@
|
|
1
|
+
import type { TestAnnotationRenderer } from "./definition.js";
|
2
|
+
|
3
|
+
import { TestAnnotation } from "../../data/TestAnnotation.js";
|
4
|
+
import { LeafRenderer } from "./definition.js";
|
5
|
+
import { CompositeRenderer, TestAnnotationRendererTag } from "./definition.js";
|
6
|
+
|
7
|
+
/**
|
8
|
+
* @tsplus fluent fncts.test.TestAnnotationRenderer combine
|
9
|
+
* @tsplus operator fncts.test.TestAnnotationRenderer +
|
10
|
+
*/
|
11
|
+
export function combine_(self: TestAnnotationRenderer, that: TestAnnotationRenderer): TestAnnotationRenderer {
|
12
|
+
if (
|
13
|
+
self._tag === TestAnnotationRendererTag.CompositeRenderer &&
|
14
|
+
that._tag === TestAnnotationRendererTag.CompositeRenderer
|
15
|
+
) {
|
16
|
+
return new CompositeRenderer(self.renderers.concat(that.renderers));
|
17
|
+
} else if (self._tag === TestAnnotationRendererTag.CompositeRenderer) {
|
18
|
+
return new CompositeRenderer(self.renderers.append(that));
|
19
|
+
} else if (that._tag === TestAnnotationRendererTag.CompositeRenderer) {
|
20
|
+
return new CompositeRenderer(that.renderers.prepend(self));
|
21
|
+
} else {
|
22
|
+
return new CompositeRenderer(Vector(self, that));
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @tsplus static fncts.test.TestAnnotationRendererOps Ignored
|
28
|
+
*/
|
29
|
+
export const ignored: TestAnnotationRenderer = new LeafRenderer((f) =>
|
30
|
+
f(TestAnnotation.Ignored, (children) => children.head.flatMap((n) => (n === 0 ? Nothing() : Just(`ignored: ${n}`)))),
|
31
|
+
);
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @tsplus static fncts.test.TestAnnotationRendererOps Repeated
|
35
|
+
*/
|
36
|
+
export const repeated: TestAnnotationRenderer = new LeafRenderer((f) =>
|
37
|
+
f(TestAnnotation.Repeated, (children) =>
|
38
|
+
children.head.flatMap((n) => (n === 0 ? Nothing() : Just(`repeated: ${n}`))),
|
39
|
+
),
|
40
|
+
);
|
41
|
+
|
42
|
+
/**
|
43
|
+
* @tsplus static fncts.test.TestAnnotationRendererOps Retried
|
44
|
+
*/
|
45
|
+
export const retried: TestAnnotationRenderer = new LeafRenderer((f) =>
|
46
|
+
f(TestAnnotation.Repeated, (children) => children.head.flatMap((n) => (n === 0 ? Nothing() : Just(`retried: ${n}`)))),
|
47
|
+
);
|
48
|
+
|
49
|
+
/**
|
50
|
+
* @tsplus static fncts.test.TestAnnotationRendererOps Tagged
|
51
|
+
*/
|
52
|
+
export const tagged: TestAnnotationRenderer = new LeafRenderer((f) =>
|
53
|
+
f(TestAnnotation.Tagged, (children) =>
|
54
|
+
children.head.flatMap((child) =>
|
55
|
+
child.size === 0 ? Nothing() : Just(`tagged: ${child.map((s) => s.surround('"')).join(", ")}`),
|
56
|
+
),
|
57
|
+
),
|
58
|
+
);
|
59
|
+
|
60
|
+
/**
|
61
|
+
* @tsplus static fncts.test.TestAnnotationRendererOps Timed
|
62
|
+
*/
|
63
|
+
export const timed: TestAnnotationRenderer = new LeafRenderer((f) =>
|
64
|
+
f(TestAnnotation.Timing, (children) => children.head.flatMap((n) => (n === 0 ? Nothing() : Just(`${n}ms`)))),
|
65
|
+
);
|
66
|
+
|
67
|
+
/**
|
68
|
+
* @tsplus static fncts.test.TestAnnotationRendererOps Silent
|
69
|
+
*/
|
70
|
+
export const silent: TestAnnotationRenderer = new CompositeRenderer(Vector.empty());
|
71
|
+
|
72
|
+
/**
|
73
|
+
* @tsplus static fncts.test.TestAnnotationRendererOps Default
|
74
|
+
*/
|
75
|
+
export const Default: TestAnnotationRenderer = new CompositeRenderer(Vector(ignored, repeated, retried, tagged, timed));
|