@fncts/test 0.0.31 → 0.0.32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/_cjs/api.cjs +1 -1
  2. package/_cjs/api.cjs.map +1 -1
  3. package/_cjs/control/AbstractRunnableSpec.cjs +79 -5
  4. package/_cjs/control/AbstractRunnableSpec.cjs.map +1 -1
  5. package/_cjs/control/Annotations/definition.cjs +11 -3
  6. package/_cjs/control/Annotations/definition.cjs.map +1 -1
  7. package/_cjs/control/DefaultRunnableSpec.cjs +3 -6
  8. package/_cjs/control/DefaultRunnableSpec.cjs.map +1 -1
  9. package/_cjs/control/Gen/api.cjs +51 -30
  10. package/_cjs/control/Gen/api.cjs.map +1 -1
  11. package/_cjs/control/Live/definition.cjs.map +1 -1
  12. package/_cjs/data/TestAnnotationMap.cjs.map +1 -1
  13. package/_cjs/demo.cjs +3 -1
  14. package/_cjs/demo.cjs.map +1 -1
  15. package/_mjs/api.mjs +1 -1
  16. package/_mjs/api.mjs.map +1 -1
  17. package/_mjs/control/AbstractRunnableSpec.mjs +78 -5
  18. package/_mjs/control/AbstractRunnableSpec.mjs.map +1 -1
  19. package/_mjs/control/Annotations/definition.mjs +8 -1
  20. package/_mjs/control/Annotations/definition.mjs.map +1 -1
  21. package/_mjs/control/DefaultRunnableSpec.mjs +3 -6
  22. package/_mjs/control/DefaultRunnableSpec.mjs.map +1 -1
  23. package/_mjs/control/Gen/api.mjs +47 -28
  24. package/_mjs/control/Gen/api.mjs.map +1 -1
  25. package/_mjs/control/Live/definition.mjs +2 -1
  26. package/_mjs/control/Live/definition.mjs.map +1 -1
  27. package/_mjs/data/TestAnnotationMap.mjs +2 -1
  28. package/_mjs/data/TestAnnotationMap.mjs.map +1 -1
  29. package/_mjs/demo.mjs +3 -1
  30. package/_mjs/demo.mjs.map +1 -1
  31. package/_src/api.ts +1 -1
  32. package/_src/control/AbstractRunnableSpec.ts +93 -11
  33. package/_src/control/Annotations/definition.ts +4 -0
  34. package/_src/control/DefaultRunnableSpec.ts +3 -7
  35. package/_src/control/Gen/api.ts +35 -6
  36. package/_src/demo.ts +4 -2
  37. package/control/AbstractRunnableSpec.d.ts +22 -9
  38. package/control/Annotations/definition.d.ts +3 -0
  39. package/control/DefaultRunnableSpec.d.ts +4 -4
  40. package/control/Gen/api.d.ts +24 -0
  41. package/package.json +3 -3
  42. package/_cjs/control/RunnableSpec.cjs +0 -52
  43. package/_cjs/control/RunnableSpec.cjs.map +0 -1
  44. package/_cjs/control/TestExecutor.cjs +0 -44
  45. package/_cjs/control/TestExecutor.cjs.map +0 -1
  46. package/_cjs/control/TestRunner.cjs +0 -28
  47. package/_cjs/control/TestRunner.cjs.map +0 -1
  48. package/_mjs/control/RunnableSpec.mjs +0 -42
  49. package/_mjs/control/RunnableSpec.mjs.map +0 -1
  50. package/_mjs/control/TestExecutor.mjs +0 -36
  51. package/_mjs/control/TestExecutor.mjs.map +0 -1
  52. package/_mjs/control/TestRunner.mjs +0 -19
  53. package/_mjs/control/TestRunner.mjs.map +0 -1
  54. package/_src/control/RunnableSpec.ts +0 -47
  55. package/_src/control/TestExecutor.ts +0 -52
  56. package/_src/control/TestRunner.ts +0 -31
  57. package/control/RunnableSpec.d.ts +0 -11
  58. package/control/TestExecutor.d.ts +0 -12
  59. package/control/TestRunner.d.ts +0 -17
@@ -1 +1 @@
1
- {"version":3,"file":"definition.mjs","mappings":";;;;;;;;AAEA;;;AAGO,MAAMA,yBAAUC,wBAAU,iBAAiB,CAAC;aAAtCC,OAAO;AAEpB;;;AAGA,OAAM,MAAgBC,IAAI;EAaxB,OAAOA,IAAI,CAAuBC,EAAe;IAC/C,OAAOC,8BAAkBC,IAAI,IAAKA,IAAI,CAACC,OAAO,CAACH,EAAE,CAAC,mCAAU;EAC9D;;AAbOD,YAAO,gBAA8BK,qCAC1CH,gCACGI,GAAG,IACF,IAAK,cAAcN,IAAI;EACrBI,OAAO,CAAUH,EAAe;IAC9B,OAAOM,sDAA4BC,CAAC,IAAKC,sBAAQH,GAAG,EAAXE,CAAC,CAAW,wBAAC,CAACP,EAAE,CAAC;EAC5D;CACD,EAAG,wBACP,mCAEF;AAMH;;;AAGA,OAAM,SAAUS,SAAS,CACvBT,EAAe,EACfU,CAA2C;EAE3C;EACA,OAAOC,wBAAoCC,CAAC,IAAKb,IAAI,CAACA,IAAI,CAACW,CAAC,CAACT,mCAAsBW,CAAC,yBAAvBZ,EAAE,CAAsB,CAAC,CAAC,yBAAhFC,kDAA0B,CAAuD;AAC1F;AAEA,OAAM,SAAUY,QAAQ,CAAuBb,EAAe;EAC5D,OAAeU,CAAmC,IAChDJ,wBAAwBQ,QAAQ,IAAKf,IAAI,CAACA,IAAI,CAACW,CAAC,CAACJ,kDAAuBQ,QAAQ,wBAAC,CAACd,EAAE,CAAC,CAAC,CAAC,kDAAC;AAC5F","names":["LiveTag_1","tsplus_module_1","LiveTag","Live","io","tsplus_module_5","live","provide","tsplus_module_6","env","tsplus_module_4","_","tsplus_module_2","withLive_","f","tsplus_module_7","r","withLive","services"],"sourceRoot":"","sources":["../../../_src/control/Live/definition.ts"],"sourcesContent":[null]}
1
+ {"version":3,"file":"definition.mjs","mappings":";;;;;;;;AAEA;;;AAGO,MAAMA,yBAAUC,wBAAU,iBAAiB,CAAC;aAAtCC,OAAO;AAEpB;;;AAGA,MAAsBC,IAAI;EAaxB,OAAOA,IAAI,CAAuBC,EAAe;IAC/C,OAAOC,8BAAkBC,IAAI,IAAKA,IAAI,CAACC,OAAO,CAACH,EAAE,CAAC,mCAAU;EAC9D;;AAbOD,YAAO,gBAA8BK,qCAC1CH,gCACGI,GAAG,IACF,IAAK,cAAcN,IAAI;EACrBI,OAAO,CAAUH,EAAe;IAC9B,OAAOM,sDAA4BC,CAAC,IAAKC,sBAAQH,GAAG,EAAXE,CAAC,CAAW,wBAAC,CAACP,EAAE,CAAC;EAC5D;CACD,EAAG,wBACP,mCAEF;SAZmBD,IAAI;AAkB1B;;;AAGA,OAAM,SAAUU,SAAS,CACvBT,EAAe,EACfU,CAA2C;EAE3C;EACA,OAAOC,wBAAoCC,CAAC,IAAKb,IAAI,CAACA,IAAI,CAACW,CAAC,CAACT,mCAAsBW,CAAC,yBAAvBZ,EAAE,CAAsB,CAAC,CAAC,yBAAhFC,kDAA0B,CAAuD;AAC1F;AAEA,OAAM,SAAUY,QAAQ,CAAuBb,EAAe;EAC5D,OAAeU,CAAmC,IAChDJ,wBAAwBQ,QAAQ,IAAKf,IAAI,CAACA,IAAI,CAACW,CAAC,CAACJ,kDAAuBQ,QAAQ,wBAAC,CAACd,EAAE,CAAC,CAAC,CAAC,kDAAC;AAC5F","names":["LiveTag_1","tsplus_module_1","LiveTag","Live","io","tsplus_module_5","live","provide","tsplus_module_6","env","tsplus_module_4","_","tsplus_module_2","withLive_","f","tsplus_module_7","r","withLive","services"],"sourceRoot":"","sources":["../../../_src/control/Live/definition.ts"],"sourcesContent":[null]}
@@ -3,7 +3,7 @@ import * as tsplus_module_2 from "@fncts/base/data/Maybe/destructors";
3
3
  import * as tsplus_module_3 from "@fncts/base/collection/immutable/Conc/constructors";
4
4
  import * as tsplus_module_4 from "@fncts/base/collection/immutable/Conc/api";
5
5
  import { identity } from "@fncts/base/data/function";
6
- export class TestAnnotationMap {
6
+ class TestAnnotationMap {
7
7
  constructor(map) {
8
8
  this.map = map;
9
9
  }
@@ -24,4 +24,5 @@ export class TestAnnotationMap {
24
24
  }
25
25
  }
26
26
  TestAnnotationMap.empty = /*#__PURE__*/new TestAnnotationMap( /*#__PURE__*/tsplus_module_1.empty());
27
+ export { TestAnnotationMap };
27
28
  //# sourceMappingURL=TestAnnotationMap.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TestAnnotationMap.mjs","mappings":";;;;AAEA,SAASA,QAAQ,QAAQ,2BAA2B;AAEpD,OAAM,MAAOC,iBAAiB;EAC5BC,YAA6BC,GAAsC;IAAtC,QAAG,GAAHA,GAAG;EAAsC;EACtEC,OAAO,CAACC,IAAuB;IAC7B,OAAO,IAAIJ,iBAAiB,CAC1BK,yBAEYC,uBAAe,EAAE,CAACC,GAAG,EAAE,CAACC,CAAC,EAAEC,CAAC,CAAC,KACrCH,oBACEE,CAAC,EACDE,sBACE,MAAMD,CAAC,EACNE,CAAC,IAAKH,CAAC,CAACL,OAAO,CAACQ,CAAC,EAAEF,CAAC,CAAC,EAFxBH,oBAAQE,CAAC,EAATD,GAAG,CAAO,CAGT,EALHA,GAAG,CAMF,EATLF,uBACUO,qBAAUR,IAAI,CAACF,GAAG,CAAC,EAD7BU,qBAAU,IAAI,CAACV,GAAG,CAAC,CACW,CAS3B,CACJ;EACH;EACAW,GAAG,CAAIC,GAAsB;IAC3B,OAAOJ,sBAAwB,MAAMI,GAAG,CAACC,OAAO,EAAEhB,QAAQ,EAAnDO,oBAAaQ,GAAG,EAAhB,IAAI,CAACZ,GAAG,CAAS,CAAmC;EAC7D;EACQc,SAAS,CAAIF,GAAsB,EAAEG,KAAQ;IACnD,OAAO,IAAIjB,iBAAiB,CAACM,oBAAaQ,GAAG,EAAEG,KAAK,EAAvB,IAAI,CAACf,GAAG,CAAgB,CAAC;EACxD;EACQgB,MAAM,CAAIJ,GAAsB,EAAEK,CAAc;IACtD,OAAO,IAAI,CAACH,SAAS,CAACF,GAAG,EAAEK,CAAC,CAAC,IAAI,CAACN,GAAG,CAACC,GAAG,CAAC,CAAC,CAAC;EAC9C;EACAM,QAAQ,CAAIN,GAAsB,EAAEG,KAAQ;IAC1C,OAAO,IAAI,CAACC,MAAM,CAACJ,GAAG,EAAGH,CAAC,IAAKG,GAAG,CAACX,OAAO,CAACQ,CAAC,EAAEM,KAAK,CAAC,CAAC;EACvD;;AACOjB,uBAAK,gBAAsB,IAAIA,iBAAiB,eAACM,uBAAe,CAAC","names":["identity","TestAnnotationMap","constructor","map","combine","that","tsplus_module_4","tsplus_module_1","acc","k","v","tsplus_module_2","_","tsplus_module_3","get","key","initial","overwrite","value","update","f","annotate"],"sourceRoot":"","sources":["../../_src/data/TestAnnotationMap.ts"],"sourcesContent":[null]}
1
+ {"version":3,"file":"TestAnnotationMap.mjs","mappings":";;;;AAEA,SAASA,QAAQ,QAAQ,2BAA2B;AAEpD,MAAaC,iBAAiB;EAC5BC,YAA6BC,GAAsC;IAAtC,QAAG,GAAHA,GAAG;EAAsC;EACtEC,OAAO,CAACC,IAAuB;IAC7B,OAAO,IAAIJ,iBAAiB,CAC1BK,yBAEYC,uBAAe,EAAE,CAACC,GAAG,EAAE,CAACC,CAAC,EAAEC,CAAC,CAAC,KACrCH,oBACEE,CAAC,EACDE,sBACE,MAAMD,CAAC,EACNE,CAAC,IAAKH,CAAC,CAACL,OAAO,CAACQ,CAAC,EAAEF,CAAC,CAAC,EAFxBH,oBAAQE,CAAC,EAATD,GAAG,CAAO,CAGT,EALHA,GAAG,CAMF,EATLF,uBACUO,qBAAUR,IAAI,CAACF,GAAG,CAAC,EAD7BU,qBAAU,IAAI,CAACV,GAAG,CAAC,CACW,CAS3B,CACJ;EACH;EACAW,GAAG,CAAIC,GAAsB;IAC3B,OAAOJ,sBAAwB,MAAMI,GAAG,CAACC,OAAO,EAAEhB,QAAQ,EAAnDO,oBAAaQ,GAAG,EAAhB,IAAI,CAACZ,GAAG,CAAS,CAAmC;EAC7D;EACQc,SAAS,CAAIF,GAAsB,EAAEG,KAAQ;IACnD,OAAO,IAAIjB,iBAAiB,CAACM,oBAAaQ,GAAG,EAAEG,KAAK,EAAvB,IAAI,CAACf,GAAG,CAAgB,CAAC;EACxD;EACQgB,MAAM,CAAIJ,GAAsB,EAAEK,CAAc;IACtD,OAAO,IAAI,CAACH,SAAS,CAACF,GAAG,EAAEK,CAAC,CAAC,IAAI,CAACN,GAAG,CAACC,GAAG,CAAC,CAAC,CAAC;EAC9C;EACAM,QAAQ,CAAIN,GAAsB,EAAEG,KAAQ;IAC1C,OAAO,IAAI,CAACC,MAAM,CAACJ,GAAG,EAAGH,CAAC,IAAKG,GAAG,CAACX,OAAO,CAACQ,CAAC,EAAEM,KAAK,CAAC,CAAC;EACvD;;AACOjB,uBAAK,gBAAsB,IAAIA,iBAAiB,eAACM,uBAAe,CAAC;SA7B7DN,iBAAiB","names":["identity","TestAnnotationMap","constructor","map","combine","that","tsplus_module_4","tsplus_module_1","acc","k","v","tsplus_module_2","_","tsplus_module_3","get","key","initial","overwrite","value","update","f","annotate"],"sourceRoot":"","sources":["../../_src/data/TestAnnotationMap.ts"],"sourcesContent":[null]}
package/_mjs/demo.mjs CHANGED
@@ -1,5 +1,7 @@
1
+ const fileName_1 = "(@fncts/test) src/demo.ts";
1
2
  import * as tsplus_module_1 from "@fncts/base/data/Tag/constructors";
2
3
  import * as tsplus_module_2 from "@fncts/test/api";
4
+ import * as tsplus_module_3 from "@fncts/io/IO/runtime";
3
5
  import { DefaultRunnableSpec } from "@fncts/test/control/DefaultRunnableSpec";
4
6
  import { suite, test } from "./api.mjs";
5
7
  import { strictEqualTo } from "./control/Assertion.mjs";
@@ -26,5 +28,5 @@ class DemoSpec extends DefaultRunnableSpec {
26
28
  })));
27
29
  }
28
30
  }
29
- new DemoSpec().main();
31
+ tsplus_module_3.unsafeRunAsync(new DemoSpec().run(fileName_1 + ":17:19"), fileName_1 + ":17:36");
30
32
  //# sourceMappingURL=demo.mjs.map
package/_mjs/demo.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"demo.mjs","mappings":";;AAAA,SAASA,mBAAmB,QAAQ,yCAAyC;AAE7E,SAASC,KAAK,EAAEC,IAAI,QAAgB,WAAU;AAC9C,SAASC,aAAa,QAAQ,yBAAwB;AACtD,MAAMC,WAAW,gBAAGC,wBAEjB,0BAA0B,CAAC;AAC9B,MAAMC,QAAS,SAAQN,mBAAmB;EAA1CO;;IACE,SAAI,GAAGN,KAAK,CACV,WAAW,EACXC,IAAI,CAAC,cAAc,QAAEM,uBAAWL,aAAa,CAAC,CAAC,CAAC,EAA1B,CAAC,CAA0B,CAAC,EAClDD,IAAI,CAAC,cAAc,QAAEM,uBAAuCL,aAAa,CAAC;MAAEM,CAAC,EAAE;QAAEC,CAAC,EAAE;UAAEC,CAAC,EAAE;YAAEC,CAAC,EAAE;UAAC;QAAE;MAAE;IAAE,CAAE,CAAC,EAAnF;MAAEH,CAAC,EAAE;QAAEC,CAAC,EAAE;UAAEC,CAAC,EAAE;YAAEC,CAAC,EAAE;UAAG;QAAE;MAAE;IAAE,CAAE,CAAqD,CAAC,CAC3G;EACH;;AACA,IAAIN,QAAQ,EAAE,CAACO,IAAI,EAAE","names":["DefaultRunnableSpec","suite","test","strictEqualTo","ServiceATag","tsplus_module_1","DemoSpec","constructor","tsplus_module_2","a","b","c","d","main"],"sourceRoot":"","sources":["../_src/demo.ts"],"sourcesContent":[null]}
1
+ {"version":3,"file":"demo.mjs","mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,yCAAyC;AAE7E,SAASC,KAAK,EAAEC,IAAI,QAAQ,WAAU;AACtC,SAASC,aAAa,QAAQ,yBAAwB;AAEtD,MAAMC,WAAW,gBAAGC,wBAEjB,0BAA0B,CAAC;AAE9B,MAAMC,QAAS,SAAQN,mBAAmB;EAA1CO;;IACE,SAAI,GAAGN,KAAK,CACV,WAAW,EACXC,IAAI,CAAC,cAAc,QAAEM,uBAAWL,aAAa,CAAC,CAAC,CAAC,EAA1B,CAAC,CAA0B,CAAC,EAClDD,IAAI,CAAC,cAAc,QAAEM,uBAAuCL,aAAa,CAAC;MAAEM,CAAC,EAAE;QAAEC,CAAC,EAAE;UAAEC,CAAC,EAAE;YAAEC,CAAC,EAAE;UAAC;QAAE;MAAE;IAAE,CAAE,CAAC,EAAnF;MAAEH,CAAC,EAAE;QAAEC,CAAC,EAAE;UAAEC,CAAC,EAAE;YAAEC,CAAC,EAAE;UAAG;QAAE;MAAE;IAAE,CAAE,CAAqD,CAAC,CAC3G;EACH;;AACAC,mCAAIP,QAAQ,EAAE,CAACQ,GAAG,uBAAE,wBAAiB","names":["DefaultRunnableSpec","suite","test","strictEqualTo","ServiceATag","tsplus_module_1","DemoSpec","constructor","tsplus_module_2","a","b","c","d","tsplus_module_3","run"],"sourceRoot":"","sources":["../_src/demo.ts"],"sourcesContent":[null]}
package/_src/api.ts CHANGED
@@ -132,7 +132,7 @@ function checkStreamC<R, E, A, R1>(
132
132
  return TestConfig.shrinks.flatMap((shrinks) =>
133
133
  shrinkStream(
134
134
  stream.zipWithIndex
135
- .mapIOC(concurrency, ([initial, index]) =>
135
+ .mapIOConcurrently(concurrency, ([initial, index]) =>
136
136
  initial
137
137
  .foreach(
138
138
  (input) =>
@@ -1,17 +1,99 @@
1
- import type { Spec } from "@fncts/test/control/Spec";
1
+ import type { Annotated } from "@fncts/test/control/Annotations";
2
+ import type { Spec, SpecCase } from "@fncts/test/control/Spec";
2
3
  import type { TestAspect } from "@fncts/test/control/TestAspect";
3
- import type { TestLogger } from "@fncts/test/control/TestLogger";
4
- import type { TestRunner } from "@fncts/test/control/TestRunner";
5
- import type { ExecutedSpec } from "@fncts/test/data/ExecutedSpec";
4
+ import type { TestFailure } from "@fncts/test/data/TestFailure";
5
+ import type { TestSuccess } from "@fncts/test/data/TestSuccess";
6
6
 
7
+ import { matchTag, matchTag_ } from "@fncts/base/util/pattern";
8
+ import { DefaultTestReporter } from "@fncts/test/control/DefaultTestReporter";
9
+ import { SummaryBuilder } from "@fncts/test/control/SummaryBuilder";
10
+ import { TestAnnotationRenderer } from "@fncts/test/control/TestAnnotationRenderer";
11
+ import { timeoutWarning } from "@fncts/test/control/TestAspect";
12
+ import { TestEnvironment } from "@fncts/test/control/TestEnvironment";
13
+ import { TestLogger } from "@fncts/test/control/TestLogger";
14
+ import { ConsoleRenderer } from "@fncts/test/control/TestRenderer/ConsoleRenderer";
15
+ import { ExecutedSpec } from "@fncts/test/data/ExecutedSpec";
16
+ import { TestAnnotationMap } from "@fncts/test/data/TestAnnotationMap";
17
+ import { RuntimeFailure } from "@fncts/test/data/TestFailure";
18
+
19
+ /**
20
+ * @tsplus type fncts.test.AbstractRunnableSpec
21
+ */
7
22
  export abstract class AbstractRunnableSpec<R, E> {
8
- abstract aspects: ReadonlyArray<TestAspect<R, any>>;
9
- abstract runner: TestRunner<R, E>;
10
- abstract spec: Spec<R, E>;
11
- get _run(): URIO<TestLogger, ExecutedSpec<E>> {
12
- return this.runSpec(this.spec);
23
+ aspects: ReadonlyArray<TestAspect<R | TestEnvironment, any>> = [timeoutWarning((60).seconds)];
24
+
25
+ abstract spec: Spec<R | TestEnvironment | Scope, E>;
26
+ abstract bootstrap: Layer<never, never, R>;
27
+
28
+ runSpec(spec: Spec<R | TestEnvironment | Scope, E>, __tsplusTrace?: string): UIO<ExecutedSpec<E>> {
29
+ return spec.annotated
30
+ .provideLayer(this.bootstrap.and(TestEnvironment))
31
+ .foreachExec(
32
+ (cause): UIO<Annotated<Either<TestFailure<E>, TestSuccess>>> =>
33
+ cause.failureOrCause.match(
34
+ ([failure, annotations]) => IO.succeedNow([Either.left(failure), annotations]),
35
+ (cause) => IO.succeedNow([Either.left(new RuntimeFailure(cause)), TestAnnotationMap.empty]),
36
+ ),
37
+ ([success, annotations]): UIO<Annotated<Either<TestFailure<E>, TestSuccess>>> =>
38
+ IO.succeedNow([Either.right(success), annotations]),
39
+ ExecutionStrategy.concurrentBounded(10),
40
+ )
41
+ .scoped.flatMap(
42
+ (s) =>
43
+ s.foldScoped(
44
+ (spec: SpecCase<never, never, Annotated<Either<TestFailure<E>, TestSuccess>>, ExecutedSpec<E>>) =>
45
+ matchTag_(spec, {
46
+ Exec: ({ spec }) => IO.succeedNow(spec),
47
+ Labeled: ({ label, spec }) => IO.succeedNow(ExecutedSpec.labeled(spec, label)),
48
+ Scoped: ({ scoped }) => scoped,
49
+ Multiple: ({ specs }) => IO.succeedNow(ExecutedSpec.multiple(specs)),
50
+ Test: ({ test, annotations }) =>
51
+ test.map(([result, dynamicAnnotations]) =>
52
+ ExecutedSpec.test(result, annotations.combine(dynamicAnnotations)),
53
+ ),
54
+ }),
55
+ ExecutionStrategy.concurrentBounded(10),
56
+ ).scoped,
57
+ )
58
+ .timedWith(Clock.currentTime)
59
+ .flatMap(([duration, results]) =>
60
+ DefaultTestReporter.report(ConsoleRenderer.render, TestAnnotationRenderer.Default)(duration, results).as(
61
+ results,
62
+ ),
63
+ )
64
+ .provideLayer(TestLogger.fromConsole);
13
65
  }
14
- runSpec(spec: Spec<R, E>): URIO<TestLogger, ExecutedSpec<E>> {
15
- return this.runner.run(this.aspects.foldLeft(spec, (b, a) => a(b)));
66
+
67
+ run(__tsplusTrace?: string): UIO<number> {
68
+ return Do((Δ) => {
69
+ const results = Δ(this.runSpec(this.spec));
70
+ const hasFailures = results.some(
71
+ matchTag(
72
+ {
73
+ Test: ({ test }) => test.isLeft(),
74
+ },
75
+ () => false,
76
+ ),
77
+ );
78
+ const summary = SummaryBuilder.buildSummary(results);
79
+ Δ(TestLogger.logLine(summary.summary));
80
+ return hasFailures ? 1 : 0;
81
+ }).provideSomeLayer(TestLogger.fromConsole);
16
82
  }
17
83
  }
84
+
85
+ /**
86
+ * @tsplus pipeable fncts.test.AbstractRunnableSpec combine
87
+ * @tsplus pipeable-operator fncts.test.AbstractRunnableSpec +
88
+ */
89
+ export function combine<R1, E1>(that: AbstractRunnableSpec<R1, E1>) {
90
+ return <R, E>(self: AbstractRunnableSpec<R, E>): AbstractRunnableSpec<R | R1, E | E1> => {
91
+ return new (class extends AbstractRunnableSpec<R | R1, E | E1> {
92
+ bootstrap: Layer<never, never, R1 | R> = self.bootstrap.and(that.bootstrap);
93
+ spec: Spec<Scope | R1 | R | TestEnvironment, E1 | E> = self.aspects
94
+ .foldLeft(self.spec, (b, a) => a(b))
95
+ .combine(that.aspects.foldLeft(that.spec, (b, a) => a(b)));
96
+ aspects: readonly TestAspect<R1 | R | TestEnvironment, any>[] = [];
97
+ })();
98
+ };
99
+ }
@@ -1,6 +1,9 @@
1
1
  import type { TestAnnotation } from "../../data/TestAnnotation.js";
2
2
  import type { TestAnnotationMap } from "../../data/TestAnnotationMap.js";
3
3
 
4
+ export const AnnotationsTypeId = Symbol.for("fncts.test.Annotations");
5
+ export type AnnotationsTypeId = typeof AnnotationsTypeId;
6
+
4
7
  export type Annotated<A> = readonly [A, TestAnnotationMap];
5
8
 
6
9
  /**
@@ -8,6 +11,7 @@ export type Annotated<A> = readonly [A, TestAnnotationMap];
8
11
  * @tsplus companion fncts.test.AnnotationsOps
9
12
  */
10
13
  export abstract class Annotations {
14
+ readonly [AnnotationsTypeId]: AnnotationsTypeId = AnnotationsTypeId;
11
15
  abstract annotate<V>(key: TestAnnotation<V>, value: V): UIO<void>;
12
16
  abstract get<V>(key: TestAnnotation<V>): UIO<V>;
13
17
  abstract withAnnotation<R, E, A>(io: IO<R, E, A>): IO<R, Annotated<E>, Annotated<A>>;
@@ -1,12 +1,8 @@
1
- import { RunnableSpec } from "@fncts/test/control/RunnableSpec";
1
+ import { AbstractRunnableSpec } from "@fncts/test/control/AbstractRunnableSpec";
2
2
  import { timeoutWarning } from "@fncts/test/control/TestAspect";
3
3
  import { TestEnvironment } from "@fncts/test/control/TestEnvironment";
4
- import { defaultTestExecutor } from "@fncts/test/control/TestExecutor";
5
- import { TestRunner } from "@fncts/test/control/TestRunner";
6
4
 
7
- const defaultTestRunner = new TestRunner(defaultTestExecutor(TestEnvironment));
8
-
9
- export abstract class DefaultRunnableSpec extends RunnableSpec<TestEnvironment, any> {
5
+ export abstract class DefaultRunnableSpec extends AbstractRunnableSpec<TestEnvironment, any> {
10
6
  aspects = [timeoutWarning((1).minutes)];
11
- runner = defaultTestRunner;
7
+ bootstrap: Layer<never, never, TestEnvironment> = TestEnvironment;
12
8
  }
@@ -4,7 +4,6 @@ import type { ArrayInt64 } from "@fncts/base/util/rand";
4
4
 
5
5
  import { SortedMap } from "@fncts/base/collection/immutable/SortedMap";
6
6
  import { IllegalArgumentError, NoSuchElementError } from "@fncts/base/data/exceptions";
7
- import { tuple } from "@fncts/base/data/function";
8
7
  import { identity } from "@fncts/base/data/function";
9
8
 
10
9
  import {
@@ -59,6 +58,7 @@ export function alphaNumericStringWith(constraints: LengthConstraints = {}): Gen
59
58
  export const alphaNumericString: Gen<Sized, string> = alphaNumericChar.string();
60
59
 
61
60
  /**
61
+ * @tsplus static fncts.test.GenOps array
62
62
  * @tsplus getter fncts.test.Gen array
63
63
  */
64
64
  export function array<R, A>(self: Gen<R, A>): Gen<R | Sized, ReadonlyArray<A>> {
@@ -183,6 +183,7 @@ export function concWith(constraints: LengthConstraints = {}) {
183
183
 
184
184
  /**
185
185
  * @tsplus getter fncts.test.Gen conc
186
+ * @tsplus static fncts.test.GenOps conc
186
187
  */
187
188
  export function conc<R, A>(self: Gen<R, A>): Gen<R | Sized, Conc<A>> {
188
189
  return self.conc();
@@ -347,6 +348,11 @@ export function floatWith(constraints: NumberConstraints & FloatConstraints = {}
347
348
  );
348
349
  }
349
350
 
351
+ /**
352
+ * @tsplus static fncts.test.GenOps float
353
+ */
354
+ export const float: Gen<never, number> = floatWith();
355
+
350
356
  /**
351
357
  * @tsplus static fncts.test.GenOps fullUnicodeChar
352
358
  */
@@ -463,6 +469,9 @@ export function oneOf<A extends ReadonlyArray<Gen<any, any>>>(...gens: A): Gen<_
463
469
  else return Gen.intWith({ min: 0, max: gens.length - 1 }).flatMap((i) => gens[i]!);
464
470
  }
465
471
 
472
+ /**
473
+ * @tsplus static fncts.test.GenOps partial
474
+ */
466
475
  export function partial<P extends Record<string, Gen<any, any>>>(
467
476
  properties: P,
468
477
  ): Gen<
@@ -540,6 +549,9 @@ export function stringN(n: number) {
540
549
  };
541
550
  }
542
551
 
552
+ /**
553
+ * @tsplus static fncts.test.GenOps struct
554
+ */
543
555
  export function struct<P extends Record<string, Gen<any, any>>>(
544
556
  properties: P,
545
557
  ): Gen<
@@ -626,10 +638,13 @@ export function unwrap<R, R1, A>(effect: URIO<R, Gen<R1, A>>): Gen<R | R1, A> {
626
638
  */
627
639
  export function weighted<R, A>(...gens: ReadonlyArray<readonly [Gen<R, A>, number]>): Gen<R, A> {
628
640
  const sum = gens.map(([, weight]) => weight).foldLeft(0, (b, a) => b + a);
629
- const [map] = gens.foldLeft(tuple(SortedMap.make<number, Gen<R, A>>(Number.Ord), 0), ([map, acc], [gen, d]) => {
630
- if ((acc + d) / sum > acc / sum) return tuple(map.set((acc + d) / sum, gen), acc + d);
631
- else return tuple(map, acc);
632
- });
641
+ const [map] = gens.foldLeft(
642
+ Function.tuple(SortedMap.make<number, Gen<R, A>>(Number.Ord), 0),
643
+ ([map, acc], [gen, d]) => {
644
+ if ((acc + d) / sum > acc / sum) return Function.tuple(map.set((acc + d) / sum, gen), acc + d);
645
+ else return Function.tuple(map, acc);
646
+ },
647
+ );
633
648
  return Gen.uniform.flatMap((n) =>
634
649
  map.getGte(n).getOrElse(() => {
635
650
  throw new NoSuchElementError("Gen.weighted");
@@ -651,10 +666,24 @@ export function zipWith<A, R1, B, C>(that: Gen<R1, B>, f: (a: A, b: B) => C) {
651
666
  */
652
667
  export function zip<R1, B>(that: Gen<R1, B>) {
653
668
  return <R, A>(self: Gen<R, A>): Gen<R | R1, readonly [A, B]> => {
654
- return self.zipWith(that, tuple);
669
+ return self.zipWith(that, Function.tuple);
655
670
  };
656
671
  }
657
672
 
673
+ /**
674
+ * @tsplus static fncts.test.GenOps tuple
675
+ */
676
+ export function tuple<A extends [...Gen<any, any>[]]>(
677
+ ...components: A
678
+ ): Gen<
679
+ { [K in keyof A]: [A[K]] extends [Gen<infer R, any>] ? R : never }[keyof A & number],
680
+ { [K in keyof A]: [A[K]] extends [Gen<any, infer A>] ? A : never }
681
+ > {
682
+ return components.foldLeft(Gen.constant<Array<any>>([]) as Gen<any, ReadonlyArray<any>>, (b, a) =>
683
+ b.zipWith(a, (vs, v) => [...vs, v]),
684
+ ) as any;
685
+ }
686
+
658
687
  function _char(min: number, max: number, mapToCode: (v: number) => number): Gen<never, string> {
659
688
  return Gen.intWith({ min, max }).map((n) => String.fromCharCode(mapToCode(n)));
660
689
  }
package/_src/demo.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import { DefaultRunnableSpec } from "@fncts/test/control/DefaultRunnableSpec";
2
2
 
3
- import { suite, test, testIO } from "./api.js";
3
+ import { suite, test } from "./api.js";
4
4
  import { strictEqualTo } from "./control/Assertion.js";
5
+
5
6
  const ServiceATag = Tag<{
6
7
  x: number;
7
8
  }>("fncts.test.demo.ServiceA");
9
+
8
10
  class DemoSpec extends DefaultRunnableSpec {
9
11
  spec = suite(
10
12
  "TestSuite",
@@ -12,4 +14,4 @@ class DemoSpec extends DefaultRunnableSpec {
12
14
  test("Demo failure", { a: { b: { c: { d: 100 } } } }.assert(strictEqualTo({ a: { b: { c: { d: 0 } } } }))),
13
15
  );
14
16
  }
15
- new DemoSpec().main();
17
+ new DemoSpec().run().unsafeRunAsync()
@@ -1,13 +1,26 @@
1
- import { URIO } from "@fncts/io/IO/definition";
1
+ import { Scope } from "@fncts/io/Scope/definition";
2
+ import { Layer } from "@fncts/io/Layer";
3
+ import { UIO, IO } from "@fncts/io/IO/definition";
4
+ import { Either } from "@fncts/base/data/Either/definition";
5
+ import { ExecutionStrategy } from "@fncts/base/data/ExecutionStrategy";
6
+ import { Clock } from "@fncts/io/Clock/definition";
2
7
  import type { Spec } from "@fncts/test/control/Spec";
3
8
  import type { TestAspect } from "@fncts/test/control/TestAspect";
4
- import type { TestLogger } from "@fncts/test/control/TestLogger";
5
- import type { TestRunner } from "@fncts/test/control/TestRunner";
6
- import type { ExecutedSpec } from "@fncts/test/data/ExecutedSpec";
9
+ import { TestEnvironment } from "@fncts/test/control/TestEnvironment";
10
+ import { ExecutedSpec } from "@fncts/test/data/ExecutedSpec";
11
+ /**
12
+ * @tsplus type fncts.test.AbstractRunnableSpec
13
+ */
7
14
  export declare abstract class AbstractRunnableSpec<R, E> {
8
- abstract aspects: ReadonlyArray<TestAspect<R, any>>;
9
- abstract runner: TestRunner<R, E>;
10
- abstract spec: Spec<R, E>;
11
- get _run(): URIO<TestLogger, ExecutedSpec<E>>;
12
- runSpec(spec: Spec<R, E>): URIO<TestLogger, ExecutedSpec<E>>;
15
+ aspects: ReadonlyArray<TestAspect<R | TestEnvironment, any>>;
16
+ abstract spec: Spec<R | TestEnvironment | Scope, E>;
17
+ abstract bootstrap: Layer<never, never, R>;
18
+ runSpec(spec: Spec<R | TestEnvironment | Scope, E>, __tsplusTrace?: string): UIO<ExecutedSpec<E>>;
19
+ run(__tsplusTrace?: string): UIO<number>;
13
20
  }
21
+ /**
22
+ * @tsplus pipeable fncts.test.AbstractRunnableSpec combine
23
+ * @tsplus pipeable-operator fncts.test.AbstractRunnableSpec +
24
+ * @tsplus location "@fncts/test/control/AbstractRunnableSpec"
25
+ */
26
+ export declare function combine<R1, E1>(that: AbstractRunnableSpec<R1, E1>): <R, E>(self: AbstractRunnableSpec<R, E>) => AbstractRunnableSpec<R1 | R, E1 | E>;
@@ -3,12 +3,15 @@ import { HashSet } from "@fncts/base/collection/immutable/HashSet/definition";
3
3
  import { Fiber } from "@fncts/io/Fiber/definition";
4
4
  import type { TestAnnotation } from "../../data/TestAnnotation.js";
5
5
  import type { TestAnnotationMap } from "../../data/TestAnnotationMap.js";
6
+ export declare const AnnotationsTypeId: unique symbol;
7
+ export type AnnotationsTypeId = typeof AnnotationsTypeId;
6
8
  export type Annotated<A> = readonly [A, TestAnnotationMap];
7
9
  /**
8
10
  * @tsplus type fncts.test.Annotations
9
11
  * @tsplus companion fncts.test.AnnotationsOps
10
12
  */
11
13
  export declare abstract class Annotations {
14
+ readonly [AnnotationsTypeId]: AnnotationsTypeId;
12
15
  abstract annotate<V>(key: TestAnnotation<V>, value: V): UIO<void>;
13
16
  abstract get<V>(key: TestAnnotation<V>): UIO<V>;
14
17
  abstract withAnnotation<R, E, A>(io: IO<R, E, A>): IO<R, Annotated<E>, Annotated<A>>;
@@ -1,7 +1,7 @@
1
- import { RunnableSpec } from "@fncts/test/control/RunnableSpec";
1
+ import { Layer } from "@fncts/io/Layer";
2
+ import { AbstractRunnableSpec } from "@fncts/test/control/AbstractRunnableSpec";
2
3
  import { TestEnvironment } from "@fncts/test/control/TestEnvironment";
3
- import { TestRunner } from "@fncts/test/control/TestRunner";
4
- export declare abstract class DefaultRunnableSpec extends RunnableSpec<TestEnvironment, any> {
4
+ export declare abstract class DefaultRunnableSpec extends AbstractRunnableSpec<TestEnvironment, any> {
5
5
  aspects: import("@fncts/test/control/TestAspect").TestAspect<import("./Live").Live, any>[];
6
- runner: TestRunner<import("./Sized").Sized | import("./Annotations").Annotations | import("../data/TestConfig").TestConfig | import("@fncts/io/Clock").Clock | import("@fncts/io/Random").Random | import("@fncts/io/Console").Console | import("./Live").Live | import("./TestClock").TestClock | import("./TestConsole").TestConsole | import("./TestRandom").TestRandom, unknown>;
6
+ bootstrap: Layer<never, never, TestEnvironment>;
7
7
  }
@@ -38,6 +38,7 @@ export declare function alphaNumericStringWith(constraints?: LengthConstraints):
38
38
  */
39
39
  export declare const alphaNumericString: Gen<Sized, string>;
40
40
  /**
41
+ * @tsplus static fncts.test.GenOps array
41
42
  * @tsplus getter fncts.test.Gen array
42
43
  * @tsplus location "@fncts/test/control/Gen/api"
43
44
  */
@@ -119,6 +120,7 @@ export declare const char16: Gen<never, string>;
119
120
  export declare function concWith(constraints?: LengthConstraints): <R, A>(self: Gen<R, A>) => Gen<Sized | R, import("@fncts/base/collection/immutable/Conc.js").Conc<A>>;
120
121
  /**
121
122
  * @tsplus getter fncts.test.Gen conc
123
+ * @tsplus static fncts.test.GenOps conc
122
124
  * @tsplus location "@fncts/test/control/Gen/api"
123
125
  */
124
126
  export declare function conc<R, A>(self: Gen<R, A>): Gen<R | Sized, Conc<A>>;
@@ -193,6 +195,11 @@ export declare function fromIOSample<R, A>(effect: IO<R, never, Sample<R, A>>):
193
195
  * @tsplus location "@fncts/test/control/Gen/api"
194
196
  */
195
197
  export declare function floatWith(constraints?: NumberConstraints & FloatConstraints): Gen<never, number>;
198
+ /**
199
+ * @tsplus static fncts.test.GenOps float
200
+ * @tsplus location "@fncts/test/control/Gen/api"
201
+ */
202
+ export declare const float: Gen<never, number>;
196
203
  /**
197
204
  * @tsplus static fncts.test.GenOps fullUnicodeChar
198
205
  * @tsplus location "@fncts/test/control/Gen/api"
@@ -253,6 +260,10 @@ export declare function nat(max?: number): Gen<unknown, number>;
253
260
  * @tsplus location "@fncts/test/control/Gen/api"
254
261
  */
255
262
  export declare function oneOf<A extends ReadonlyArray<Gen<any, any>>>(...gens: A): Gen<_R<A[number]>, _A<A[number]>>;
263
+ /**
264
+ * @tsplus static fncts.test.GenOps partial
265
+ * @tsplus location "@fncts/test/control/Gen/api"
266
+ */
256
267
  export declare function partial<P extends Record<string, Gen<any, any>>>(properties: P): Gen<_R<P[keyof P]>, Partial<{
257
268
  readonly [K in keyof P]: _A<P[K]>;
258
269
  }>>;
@@ -291,6 +302,10 @@ export declare function string(constraints?: LengthConstraints): <R>(char: Gen<R
291
302
  * @tsplus location "@fncts/test/control/Gen/api"
292
303
  */
293
304
  export declare function stringN(n: number): <R>(char: Gen<R, string>) => Gen<R, string>;
305
+ /**
306
+ * @tsplus static fncts.test.GenOps struct
307
+ * @tsplus location "@fncts/test/control/Gen/api"
308
+ */
294
309
  export declare function struct<P extends Record<string, Gen<any, any>>>(properties: P): Gen<_R<P[keyof P]>, {
295
310
  readonly [K in keyof P]: _A<P[K]>;
296
311
  }>;
@@ -349,3 +364,12 @@ export declare function zipWith<A, R1, B, C>(that: Gen<R1, B>, f: (a: A, b: B) =
349
364
  * @tsplus location "@fncts/test/control/Gen/api"
350
365
  */
351
366
  export declare function zip<R1, B>(that: Gen<R1, B>): <R, A>(self: Gen<R, A>) => Gen<R1 | R, readonly [A, B]>;
367
+ /**
368
+ * @tsplus static fncts.test.GenOps tuple
369
+ * @tsplus location "@fncts/test/control/Gen/api"
370
+ */
371
+ export declare function tuple<A extends [...Gen<any, any>[]]>(...components: A): Gen<{
372
+ [K in keyof A]: [A[K]] extends [Gen<infer R, any>] ? R : never;
373
+ }[keyof A & number], {
374
+ [K in keyof A]: [A[K]] extends [Gen<any, infer A>] ? A : never;
375
+ }>;
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@fncts/test",
3
- "version": "0.0.31",
3
+ "version": "0.0.32",
4
4
  "dependencies": {
5
- "@fncts/base": "0.0.26",
6
- "@fncts/io": "0.0.31",
5
+ "@fncts/base": "0.0.27",
6
+ "@fncts/io": "0.0.32",
7
7
  "@fncts/typelevel": "0.0.15"
8
8
  },
9
9
  "exports": {
@@ -1,52 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.RunnableSpec = void 0;
7
- exports.isRunnableSpec = isRunnableSpec;
8
- var tsplus_module_1 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/control/TestLogger"));
9
- var tsplus_module_2 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/api"));
10
- var tsplus_module_3 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/control/SummaryBuilder"));
11
- var tsplus_module_4 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Either/api"));
12
- var tsplus_module_5 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/data/ExecutedSpec/api"));
13
- var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Exit/api"));
14
- var tsplus_module_7 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/api/provideLayer"));
15
- var tsplus_module_8 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/runtime"));
16
- var _pattern = /*#__PURE__*/require("@fncts/base/util/pattern");
17
- var _predicates = /*#__PURE__*/require("@fncts/base/util/predicates");
18
- var _AbstractRunnableSpec = /*#__PURE__*/require("@fncts/test/control/AbstractRunnableSpec");
19
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
20
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
- const fileName_1 = "(@fncts/test) src/control/RunnableSpec.ts";
22
- class RunnableSpec extends _AbstractRunnableSpec.AbstractRunnableSpec {
23
- constructor() {
24
- super(...arguments);
25
- this._tag = "RunnableSpec";
26
- }
27
- run(spec) {
28
- const self = this;
29
- return tsplus_module_2.flatMap(results => {
30
- const hasFailures = tsplus_module_5.some((0, _pattern.matchTag)({
31
- Test: ({
32
- test
33
- }) => tsplus_module_4.isLeft(test)
34
- }, () => false))(results);
35
- const summary = tsplus_module_3.buildSummary(results);
36
- return tsplus_module_2.map(() => hasFailures ? 1 : 0, fileName_1 + ":25:8")(tsplus_module_1.logLine(summary.summary));
37
- }, fileName_1 + ":15:28")(self.runSpec(spec));
38
- }
39
- main(_args) {
40
- // const filteredSpec = this.spec.filterByArgs(args);
41
- tsplus_module_8.unsafeRunAsyncWith(tsplus_module_7.provideLayer(this.runner.bootstrap, fileName_1 + ":33:20")(this.run(this.spec)), exit => {
42
- tsplus_module_6.match(() => {
43
- process.exit(1);
44
- }, code => process.exit(code))(exit);
45
- }, fileName_1 + ":34:26");
46
- }
47
- }
48
- exports.RunnableSpec = RunnableSpec;
49
- function isRunnableSpec(u) {
50
- return (0, _predicates.isObject)(u) && "_tag" in u && u["_tag"] === "RunnableSpec";
51
- }
52
- //# sourceMappingURL=RunnableSpec.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RunnableSpec.cjs","mappings":";;;;;;;;;;;;;;;AAGA;AACA;AACA;AAAgF;AAAA;;AAI1E,MAAgBA,YAAmB,SAAQC,0CAA0B;EAA3EC;;IACW,SAAI,GAAG,cAAc;EAgChC;EA/BEC,GAAG,CAACC,IAAgB;IAClB,MAAMC,IAAI,GAAG,IAAI;IACjB,+BACQC,OAAO;MACb,MAAMC,WAAW,GAAGC,qBAClB,qBAAQ,EACN;QACEC,IAAI,EAAE,CAAC;UAAEC;QAAI,CAAE,KAAKC,2BAAI;OACzB,EACD,MAAM,KAAK,CACZ,EANiBL,OAAO,CAO1B;MACD,MAAMM,OAAO,GAAGC,6BAA4BP,OAAO,CAAC;uCAE7CC,WAAW,GAAG,CAAC,GAAG,CAAC,wBADxBO,wBAAmBF,OAAO,CAACA,OAAO,CAAC;8BAVfP,IAAI,CAACU,OAAO,CAACX,IAAI,CAAC;EAa5C;EAEAY,IAAI,CAACC,KAAgB;IACnB;IACAC,gEACgB,IAAI,CAACC,MAAM,CAACC,SAAS,yBADrC,IAAI,CAACjB,GAAG,CAAC,IAAI,CAACC,IAAI,CAAC,CACmB,EACfiB,IAAI,IAAI;MAC3BC,sBACE,MAAK;QACHC,OAAO,CAACF,IAAI,CAAC,CAAC,CAAC;MACjB,CAAC,EACAG,IAAI,IAAKD,OAAO,CAACF,IAAI,CAACG,IAAI,CAAC,EAJ9BH,IAAI,CAKH;IACH,CAAC,wBAAC;EACN;;AACD;AAEK,SAAUI,cAAc,CAACC,CAAU;EACvC,OAAO,wBAAQ,EAACA,CAAC,CAAC,IAAI,MAAM,IAAIA,CAAC,IAAIA,CAAC,CAAC,MAAM,CAAC,KAAK,cAAc;AACnE","names":["RunnableSpec","AbstractRunnableSpec","constructor","run","spec","self","results","hasFailures","tsplus_module_5","Test","test","tsplus_module_4","summary","tsplus_module_3","tsplus_module_1","runSpec","main","_args","tsplus_module_8","runner","bootstrap","exit","tsplus_module_6","process","code","isRunnableSpec","u"],"sourceRoot":"","sources":["../../_src/control/RunnableSpec.ts"],"sourcesContent":[null]}
@@ -1,44 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.defaultTestExecutor = defaultTestExecutor;
7
- var tsplus_module_1 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/api"));
8
- var tsplus_module_2 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/data/ExecutedSpec/api"));
9
- var tsplus_module_3 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/control/Spec/api"));
10
- var tsplus_module_4 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/api/scoped"));
11
- var tsplus_module_5 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Either/constructors"));
12
- var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Cause/api"));
13
- var tsplus_module_7 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Either/destructors"));
14
- var _pattern = /*#__PURE__*/require("@fncts/base/util/pattern");
15
- var _TestAnnotationMap = /*#__PURE__*/require("../data/TestAnnotationMap.cjs");
16
- var _TestFailure = /*#__PURE__*/require("../data/TestFailure.cjs");
17
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
- const fileName_1 = "(@fncts/test) src/control/TestExecutor.ts";
20
- function defaultTestExecutor(env) {
21
- return {
22
- run: (spec, defExec) => tsplus_module_1.flatMap(s => tsplus_module_4.scoped(tsplus_module_3.foldScoped(spec => (0, _pattern.matchTag_)(spec, {
23
- Exec: ({
24
- spec
25
- }) => tsplus_module_1.succeedNow(spec, fileName_1 + ":38:52"),
26
- Labeled: ({
27
- label,
28
- spec
29
- }) => tsplus_module_1.succeedNow(tsplus_module_2.labeled(spec, label), fileName_1 + ":39:62"),
30
- Scoped: ({
31
- scoped
32
- }) => scoped,
33
- Multiple: ({
34
- specs
35
- }) => tsplus_module_1.succeedNow(tsplus_module_2.multiple(specs), fileName_1 + ":41:57"),
36
- Test: ({
37
- test,
38
- annotations
39
- }) => tsplus_module_1.map(([result, dynamicAnnotations]) => tsplus_module_2.test(result, annotations.combine(dynamicAnnotations)), fileName_1 + ":43:29")(test)
40
- }), defExec)(s), fileName_1 + ":48:14"), fileName_1 + ":33:24")(tsplus_module_4.scoped(tsplus_module_3.foreachExec(cause => tsplus_module_7.match(([failure, annotations]) => tsplus_module_1.succeedNow([tsplus_module_5.left(failure), annotations], fileName_1 + ":26:56"), cause => tsplus_module_1.succeedNow([tsplus_module_5.left(new _TestFailure.RuntimeFailure(cause)), _TestAnnotationMap.TestAnnotationMap.empty], fileName_1 + ":27:39"))(tsplus_module_6.failureOrCause(cause)), ([success, annotations]) => tsplus_module_1.succeedNow([tsplus_module_5.right(success), annotations], fileName_1 + ":30:26"), defExec)(tsplus_module_3.provideLayer(env)(tsplus_module_3.annotated(spec))), fileName_1 + ":32:10")),
41
- environment: env
42
- };
43
- }
44
- //# sourceMappingURL=TestExecutor.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestExecutor.cjs","mappings":";;;;;;;;;;;;;AAMA;AAGA;AACA;AAAwD;AAAA;;AAOlD,SAAUA,mBAAmB,CAAIC,GAAyC;EAC9E,OAAO;IACLC,GAAG,EAAE,CAAIC,IAA8B,EAAEC,OAA0B,KACjEC,wBAaKC,CAAC,IAAIC,uBACJC,2BACGL,IAA6F,IAC5F,sBAAS,EAACA,IAAI,EAAE;MACdM,IAAI,EAAE,CAAC;QAAEN;MAAI,CAAE,KAAKE,2BAAcF,IAAI,wBAAC;MACvCO,OAAO,EAAE,CAAC;QAAEC,KAAK;QAAER;MAAI,CAAE,KAAKE,2BAAcO,wBAAqBT,IAAI,EAAEQ,KAAK,CAAC,wBAAC;MAC9EE,MAAM,EAAE,CAAC;QAAEC;MAAM,CAAE,KAAKA,MAAM;MAC9BC,QAAQ,EAAE,CAAC;QAAEC;MAAK,CAAE,KAAKX,2BAAcO,yBAAsBI,KAAK,CAAC,wBAAC;MACpEC,IAAI,EAAE,CAAC;QAAEC,IAAI;QAAEC;MAAW,CAAE,KAC1Bd,oBAAS,CAAC,CAACe,MAAM,EAAEC,kBAAkB,CAAC,KACpCT,qBAAkBQ,MAAM,EAAED,WAAW,CAACG,OAAO,CAACD,kBAAkB,CAAC,CAAC,yBADpEH,IAAI;KAGP,CAAC,EACJd,OAAO,EAZTE,CAAC,CAaA,wBAAO,gDA3BdE,4BAGKe,KAAK,IACJC,sBACE,CAAC,CAACC,OAAO,EAAEN,WAAW,CAAC,KAAKd,2BAAc,CAACqB,qBAAYD,OAAO,CAAC,EAAEN,WAAW,CAAC,wBAAC,EAC7EI,KAAK,IAAKlB,2BAAc,CAACqB,qBAAY,IAAIC,2BAAc,CAACJ,KAAK,CAAC,CAAC,EAAEK,oCAAiB,CAACC,KAAK,CAAC,wBAAC,iCAF7FN,KAAK,EAGJ,EACH,CAAC,CAACO,OAAO,EAAEX,WAAW,CAAC,KACrBd,2BAAc,CAACqB,sBAAaI,OAAO,CAAC,EAAEX,WAAW,CAAC,wBAAC,EACrDf,OAAO,EAVXI,6BACgBP,GAAG,4BADnBE,IAAI,EACgB,CAUjB,yBAiBA;IACL4B,WAAW,EAAE9B;GACd;AACH","names":["defaultTestExecutor","env","run","spec","defExec","tsplus_module_1","s","tsplus_module_4","tsplus_module_3","Exec","Labeled","label","tsplus_module_2","Scoped","scoped","Multiple","specs","Test","test","annotations","result","dynamicAnnotations","combine","cause","tsplus_module_7","failure","tsplus_module_5","RuntimeFailure","TestAnnotationMap","empty","success","environment"],"sourceRoot":"","sources":["../../_src/control/TestExecutor.ts"],"sourcesContent":[null]}
@@ -1,28 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.TestRunner = void 0;
7
- var tsplus_module_1 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/control/TestRenderer/ConsoleRenderer"));
8
- var tsplus_module_2 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/control/TestAnnotationRenderer/api"));
9
- var tsplus_module_3 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/control/DefaultTestReporter/render"));
10
- var tsplus_module_4 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/test/control/TestLogger"));
11
- var tsplus_module_5 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/IO/api"));
12
- var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/io/Clock/api"));
13
- var tsplus_module_7 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/ExecutionStrategy"));
14
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
- const fileName_1 = "(@fncts/test) src/control/TestRunner.ts";
17
- class TestRunner {
18
- constructor(executor, reporter, bootstrap) {
19
- this.executor = executor;
20
- this.reporter = reporter ?? tsplus_module_3.report(tsplus_module_1.render, tsplus_module_2.Default);
21
- this.bootstrap = bootstrap ?? tsplus_module_4.fromConsole;
22
- }
23
- run(spec) {
24
- return tsplus_module_5.flatMap(([duration, results]) => tsplus_module_5.as(() => results, fileName_1 + ":29:76")(this.reporter(duration, results)), fileName_1 + ":29:15")(tsplus_module_5.timedWith(tsplus_module_6.currentTime, fileName_1 + ":28:17")(this.executor.run(spec, tsplus_module_7.concurrentBounded(10))));
25
- }
26
- }
27
- exports.TestRunner = TestRunner;
28
- //# sourceMappingURL=TestRunner.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestRunner.cjs","mappings":";;;;;;;;;;;;;;;;AAYM,MAAOA,UAAU;EAGrBC,YACWC,QAAyB,EAClCC,QAA0B,EAC1BC,SAA2C;IAFlC,aAAQ,GAARF,QAAQ;IAIjB,IAAI,CAACC,QAAQ,GAAIA,QAAQ,IAAIE,uEAAkF;IAC/G,IAAI,CAACD,SAAS,GAAGA,SAAS,+BAA0B;EACtD;EAEAE,GAAG,CAACC,IAA8B;IAChC,OAAOC,wBAGI,CAAC,CAACC,QAAQ,EAAEC,OAAO,CAAC,KAAKF,yBAAoCE,OAAO,yBAA3C,IAAI,CAACP,QAAQ,CAACM,QAAQ,EAAEC,OAAO,CAAC,CAAY,yBAHzEF,kFAAI,CAACN,QAAQ,CACjBI,GAAG,CAACC,IAAI,EAAEI,kCAAoC,EAAE,CAAC,CAAC,CACtB,CACkD;EACnF;;AACD","names":["TestRunner","constructor","executor","reporter","bootstrap","tsplus_module_3","run","spec","tsplus_module_5","duration","results","tsplus_module_7"],"sourceRoot":"","sources":["../../_src/control/TestRunner.ts"],"sourcesContent":[null]}