just-test-node 1.4.3 → 2.0.0-alpha.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.
Files changed (57) hide show
  1. package/README.md +11 -15
  2. package/lib/Discover.d.ts +25 -0
  3. package/lib/Discover.js +4 -0
  4. package/lib/OptionsDefinitions.d.ts +16 -0
  5. package/lib/OptionsDefinitions.js +61 -0
  6. package/lib/StackTrace.d.ts +1 -0
  7. package/lib/StackTrace.js +44 -0
  8. package/lib/Suite.d.ts +46 -0
  9. package/lib/Suite.js +113 -0
  10. package/lib/SuiteProvider.d.ts +9 -0
  11. package/lib/SuiteProvider.js +88 -0
  12. package/lib/Test.d.ts +13 -6
  13. package/lib/Test.js +41 -39
  14. package/lib/TestStage.d.ts +1 -1
  15. package/lib/TestStage.js +3 -0
  16. package/lib/code-position-resolution.d.ts +2 -0
  17. package/lib/code-position-resolution.js +50 -0
  18. package/lib/examples/dir-suite/@test-suite +0 -0
  19. package/lib/examples/dir-suite/child-dir-suite/@test-suite +0 -0
  20. package/lib/{exampleTestFile.test.d.ts → examples/dir-suite/child-dir-suite/childDirTests.test.d.ts} +0 -0
  21. package/lib/examples/dir-suite/child-dir-suite/childDirTests.test.js +9 -0
  22. package/lib/examples/dir-suite/inDirSuite.test.d.ts +2 -0
  23. package/lib/examples/dir-suite/inDirSuite.test.js +9 -0
  24. package/lib/examples/dir-suite/just-a-folder/inJustAFolderTest.d.ts +2 -0
  25. package/lib/examples/dir-suite/just-a-folder/inJustAFolderTest.js +9 -0
  26. package/lib/examples/exampleTestFile.test.d.ts +2 -0
  27. package/lib/examples/exampleTestFile.test.js +57 -0
  28. package/lib/help.d.ts +1 -1
  29. package/lib/help.js +3 -0
  30. package/lib/index.d.ts +1 -0
  31. package/lib/index.js +111 -70
  32. package/lib/reporters/JsonReporter.d.ts +20 -0
  33. package/lib/reporters/JsonReporter.js +39 -0
  34. package/lib/reporters/Reporter.d.ts +4 -0
  35. package/lib/reporters/Reporter.js +4 -0
  36. package/lib/reporters/SpecReporter.d.ts +14 -0
  37. package/lib/reporters/SpecReporter.js +90 -0
  38. package/lib/reporters/index.d.ts +3 -0
  39. package/lib/reporters/index.js +17 -0
  40. package/lib/run-results/SuiteRunResult.d.ts +11 -0
  41. package/lib/run-results/SuiteRunResult.js +19 -0
  42. package/lib/run-results/TestRunResult.d.ts +9 -0
  43. package/lib/run-results/TestRunResult.js +15 -0
  44. package/lib/run-results/index.d.ts +2 -0
  45. package/lib/run-results/index.js +16 -0
  46. package/package.json +69 -64
  47. package/lib/OptionsDefinition.d.ts +0 -4
  48. package/lib/OptionsDefinition.js +0 -2
  49. package/lib/PerformancePolyfill.d.ts +0 -1
  50. package/lib/PerformancePolyfill.js +0 -14
  51. package/lib/SpecReporter.d.ts +0 -12
  52. package/lib/SpecReporter.js +0 -74
  53. package/lib/TestRunResult.d.ts +0 -9
  54. package/lib/TestRunResult.js +0 -11
  55. package/lib/TestSuiteClass.d.ts +0 -27
  56. package/lib/TestSuiteClass.js +0 -85
  57. package/lib/exampleTestFile.test.js +0 -65
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFunctionCodeRange = void 0;
4
+ const StackTrace_1 = require("./StackTrace");
5
+ function getFunctionCodeRange(func, definingFunc) {
6
+ const { filePath, callPosition } = getCallerPosition(definingFunc);
7
+ const endLocation = isInline(func) ?
8
+ getInlineFuncEndPosition(func, callPosition) :
9
+ callPosition;
10
+ const location = { filePath, start: callPosition, end: endLocation };
11
+ return location;
12
+ }
13
+ exports.getFunctionCodeRange = getFunctionCodeRange;
14
+ function getCallerPosition(func) {
15
+ const callSiteText = (0, StackTrace_1.getCallerLocationText)(func);
16
+ const separator2 = callSiteText.lastIndexOf(":");
17
+ const separator1 = callSiteText.lastIndexOf(":", separator2 - 1);
18
+ const filePath = callSiteText.slice(0, separator1);
19
+ const rowText = callSiteText.slice(separator1 + 1, separator2);
20
+ const columnText = callSiteText.slice(separator2 + 1);
21
+ const line = parseInt(rowText);
22
+ const column = parseInt(columnText);
23
+ return { filePath, callPosition: { line: line - 1, column: column - 1 } };
24
+ }
25
+ function getInlineFuncEndPosition(func, start) {
26
+ const position = getFuncRelativeEndPosition(func);
27
+ const endLine = start.line + position.line;
28
+ const endColumn = position.line == 0 ?
29
+ start.column :
30
+ position.column;
31
+ return { line: endLine, column: endColumn };
32
+ }
33
+ function getFuncRelativeEndPosition(func) {
34
+ let line = 0;
35
+ let column = 0;
36
+ const text = func.toString();
37
+ for (let i = 0; i < text.length; i++) {
38
+ if (text[i] == "\n") {
39
+ line++;
40
+ column = 0;
41
+ }
42
+ column++;
43
+ }
44
+ return { line, column };
45
+ }
46
+ function isInline(func) {
47
+ return func.name.length == 0;
48
+ }
49
+
50
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvZGUtcG9zaXRpb24tcmVzb2x1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2Q0FBcUQ7QUFFckQsU0FBZ0Isb0JBQW9CLENBQUMsSUFBYyxFQUFFLFlBQXNCO0lBQzFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFbkUsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDOUMsWUFBWSxDQUFDO0lBRWQsTUFBTSxRQUFRLEdBQXNCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBRXhGLE9BQU8sUUFBUSxDQUFDO0FBQ2pCLENBQUM7QUFWRCxvREFVQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBYztJQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFBLGtDQUFxQixFQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRWpFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV0RCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXBDLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLElBQWMsRUFBRSxLQUFtQjtJQUNwRSxNQUFNLFFBQVEsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFFM0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxRQUFRLENBQUMsTUFBTSxDQUFDO0lBRWpCLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxJQUFjO0lBQ2pELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVmLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ1g7UUFFRCxNQUFNLEVBQUUsQ0FBQztLQUNUO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUN6QixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsSUFBYztJQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM5QixDQUFDIiwiZmlsZSI6ImNvZGUtcG9zaXRpb24tcmVzb2x1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIuLlxcc3JjIn0=
File without changes
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function default_1(suite) {
4
+ suite.test("test in child-dir-suite", t => {
5
+ });
6
+ }
7
+ exports.default = default_1;
8
+
9
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4YW1wbGVzL2Rpci1zdWl0ZS9jaGlsZC1kaXItc3VpdGUvY2hpbGREaXJUZXN0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsbUJBQXlCLEtBQWdCO0lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDMUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBSEQsNEJBR0MiLCJmaWxlIjoiZXhhbXBsZXMvZGlyLXN1aXRlL2NoaWxkLWRpci1zdWl0ZS9jaGlsZERpclRlc3RzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiLi5cXC4uXFwuLlxcLi5cXHNyYyJ9
@@ -0,0 +1,2 @@
1
+ import { TestSuite } from "just-test-api";
2
+ export default function (suite: TestSuite): void;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function default_1(suite) {
4
+ suite.test("test in dir-suite", t => {
5
+ });
6
+ }
7
+ exports.default = default_1;
8
+
9
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4YW1wbGVzL2Rpci1zdWl0ZS9pbkRpclN1aXRlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxtQkFBeUIsS0FBZ0I7SUFDeEMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFIRCw0QkFHQyIsImZpbGUiOiJleGFtcGxlcy9kaXItc3VpdGUvaW5EaXJTdWl0ZS50ZXN0LmpzIiwic291cmNlUm9vdCI6Ii4uXFwuLlxcLi5cXHNyYyJ9
@@ -0,0 +1,2 @@
1
+ import { TestSuite } from "just-test-api";
2
+ export default function (suite: TestSuite): void;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function default_1(suite) {
4
+ suite.test("test in just-a-folder", t => {
5
+ });
6
+ }
7
+ exports.default = default_1;
8
+
9
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4YW1wbGVzL2Rpci1zdWl0ZS9qdXN0LWEtZm9sZGVyL2luSnVzdEFGb2xkZXJUZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsbUJBQXlCLEtBQWdCO0lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDeEMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBSEQsNEJBR0MiLCJmaWxlIjoiZXhhbXBsZXMvZGlyLXN1aXRlL2p1c3QtYS1mb2xkZXIvaW5KdXN0QUZvbGRlclRlc3QuanMiLCJzb3VyY2VSb290IjoiLi5cXC4uXFwuLlxcLi5cXHNyYyJ9
@@ -0,0 +1,2 @@
1
+ import { TestSuite } from "just-test-api";
2
+ export default function (suite: TestSuite): void;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function someFunction() { }
4
+ function default_1(suite) {
5
+ suite.describe("Passing suite", suite => {
6
+ suite.test("Simple test", t => {
7
+ });
8
+ suite.test("Async", async (t) => {
9
+ await Promise.resolve("Hi");
10
+ });
11
+ suite.describe(someFunction, suite => {
12
+ suite.test("Test", t => {
13
+ });
14
+ });
15
+ });
16
+ suite.describe("Failing suite", suite => {
17
+ suite.test("No stage error", t => {
18
+ throw "asdf";
19
+ });
20
+ suite.test("Arrage error", t => {
21
+ t.arrange();
22
+ throw "asdf";
23
+ });
24
+ suite.test("Act error", t => {
25
+ t.act();
26
+ throw "asdf";
27
+ });
28
+ suite.test("Assert error", t => {
29
+ t.assert();
30
+ throw "asdf";
31
+ });
32
+ suite.test("Throw Error", t => {
33
+ t.assert();
34
+ throw new Error("Some error message.");
35
+ });
36
+ suite.test("Throws after await", async (t) => {
37
+ await new Promise(r => setTimeout(r, 1));
38
+ t.assert();
39
+ throw "error";
40
+ });
41
+ suite.test("Timeout reached.", async (t) => {
42
+ t.timeout = 1;
43
+ await new Promise(r => setTimeout(r, 100));
44
+ });
45
+ });
46
+ suite.describe("Empty suite", suite => {
47
+ });
48
+ suite.describe("Named functions", suite => {
49
+ suite.testFunc(named_function_test_with_spaces);
50
+ suite.testFunc(function inline_function() { });
51
+ });
52
+ }
53
+ exports.default = default_1;
54
+ function named_function_test_with_spaces(t) {
55
+ }
56
+
57
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4YW1wbGVzL2V4YW1wbGVUZXN0RmlsZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsU0FBUyxZQUFZLEtBQUssQ0FBQztBQUUzQixtQkFBeUIsS0FBZ0I7SUFDeEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFFdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7WUFDN0IsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDcEMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFFdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNoQyxNQUFNLE1BQU0sQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDOUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxNQUFNLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQzNCLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sTUFBTSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUM5QixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLE1BQU0sQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDN0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7WUFDMUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6QyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLE9BQU8sQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7WUFDeEMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDZCxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRTtJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEtBQUssQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDekMsS0FBSyxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxlQUFlLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBOURELDRCQThEQztBQUVELFNBQVMsK0JBQStCLENBQUMsQ0FBYTtBQUN0RCxDQUFDIiwiZmlsZSI6ImV4YW1wbGVzL2V4YW1wbGVUZXN0RmlsZS50ZXN0LmpzIiwic291cmNlUm9vdCI6Ii4uXFwuLlxcc3JjIn0=
package/lib/help.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { OptionDefinition } from "./OptionsDefinition";
1
+ import { OptionDefinition } from "./OptionsDefinitions";
2
2
  export declare function printHelp(optionsDefinitions: OptionDefinition[]): void;
package/lib/help.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printHelp = void 0;
3
4
  function printHelp(optionsDefinitions) {
4
5
  console.log();
5
6
  console.log("Help");
@@ -18,3 +19,5 @@ function printHelp(optionsDefinitions) {
18
19
  });
19
20
  }
20
21
  exports.printHelp = printHelp;
22
+
23
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhlbHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsU0FBZ0IsU0FBUyxDQUFDLGtCQUFzQztJQUMvRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVkLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDWixZQUFZLElBQUksTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEM7UUFFRCxZQUFZLElBQUksS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFO1lBQ25CLFlBQVksSUFBSSxlQUFlLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNoRDtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBckJELDhCQXFCQyIsImZpbGUiOiJoZWxwLmpzIiwic291cmNlUm9vdCI6Ii4uXFxzcmMifQ==
package/lib/index.d.ts CHANGED
@@ -1 +1,2 @@
1
+ #!/usr/bin/env node
1
2
  export {};
package/lib/index.js CHANGED
@@ -1,91 +1,132 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
6
+ }) : (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ o[k2] = m[k];
9
+ }));
10
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
11
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
12
+ }) : function(o, v) {
13
+ o["default"] = v;
14
+ });
15
+ var __importStar = (this && this.__importStar) || function (mod) {
16
+ if (mod && mod.__esModule) return mod;
17
+ var result = {};
18
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
19
+ __setModuleDefault(result, mod);
20
+ return result;
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
24
  };
11
25
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const args = require("command-line-args");
13
- const glob = require("glob");
14
- const path = require("path");
26
+ const command_line_args_1 = __importDefault(require("command-line-args"));
27
+ const glob_1 = __importDefault(require("glob"));
28
+ const path_1 = __importDefault(require("path"));
29
+ const OptionsDefinitions_1 = require("./OptionsDefinitions");
15
30
  const help_1 = require("./help");
16
- const TestSuiteClass_1 = require("./TestSuiteClass");
17
- const SpecReporter_1 = require("./SpecReporter");
18
- const PerformancePolyfill_1 = require("./PerformancePolyfill");
19
- PerformancePolyfill_1.polyfillPerformance();
20
- const optionsDefinitions = [
21
- {
22
- name: 'glob', alias: 'g',
23
- type: String,
24
- defaultValue: "./!(node_modules)/**/*.test.js",
25
- description: "Test files glob pattern."
26
- },
27
- {
28
- name: "filter", alias: "f",
29
- type: String,
30
- defaultOption: true,
31
- defaultValue: "",
32
- description: "Filters tests."
33
- },
34
- {
35
- name: 'help', alias: 'h',
36
- type: Boolean,
37
- description: "Show help."
38
- },
39
- ];
40
- const options = args(optionsDefinitions);
41
- if (options.help) {
42
- help_1.printHelp(optionsDefinitions);
43
- process.exit();
44
- }
45
- glob(options.glob, (error, matches) => {
46
- if (error) {
47
- console.error(error);
48
- process.exit(1);
49
- }
50
- test(matches).catch(reason => {
51
- console.error("An unexpected error has occured:", reason);
52
- });
53
- });
54
- function test(files) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- let suite = createRootSuite(files);
57
- let reporter = new SpecReporter_1.SpecReporter(console);
58
- reporter.listenTo(suite);
59
- let passed = yield suite.run({ filter: options.filter });
60
- if (passed) {
61
- process.exit(0);
31
+ const reporters_1 = require("./reporters");
32
+ const SuiteProvider_1 = require("./SuiteProvider");
33
+ main();
34
+ async function main() {
35
+ try {
36
+ const options = (0, command_line_args_1.default)(OptionsDefinitions_1.optionsDefinitions);
37
+ (0, OptionsDefinitions_1.validateOptions)(options);
38
+ if (options.help) {
39
+ (0, help_1.printHelp)(OptionsDefinitions_1.optionsDefinitions);
40
+ return;
62
41
  }
63
- else {
64
- process.exit(1);
42
+ const restoreConsole = disableConsole();
43
+ const testFilesPromise = getTestFilesAsync(options);
44
+ const directorySuitesPromise = getDirectorySuitesAsync(options);
45
+ const directorySuites = await directorySuitesPromise;
46
+ const suiteProvider = new SuiteProvider_1.SuiteProvider(directorySuites);
47
+ const testFiles = await testFilesPromise;
48
+ restoreConsole();
49
+ if (options.discover) {
50
+ await outputDiscoveredTests(testFiles, suiteProvider);
51
+ return;
65
52
  }
53
+ const passed = await test(testFiles, suiteProvider, options);
54
+ if (!passed)
55
+ process.exit(options.testFailureExitCode);
56
+ }
57
+ catch (error) {
58
+ console.error(error);
59
+ process.exit(-1);
60
+ }
61
+ }
62
+ ;
63
+ function disableConsole() {
64
+ const original = console;
65
+ function nothing() { }
66
+ ;
67
+ console = { log: nothing, info: nothing, debug: nothing, warn: nothing, error: nothing };
68
+ return () => { console = original; };
69
+ }
70
+ async function getTestFilesAsync(options) {
71
+ return await globAsync(options.glob);
72
+ }
73
+ async function getDirectorySuitesAsync(options) {
74
+ return await globAsync(options.directorySuitesGlob);
75
+ }
76
+ function globAsync(pattern) {
77
+ return new Promise((resolve, reject) => {
78
+ (0, glob_1.default)(pattern, (error, matches) => {
79
+ if (error)
80
+ reject(error);
81
+ else
82
+ resolve(matches);
83
+ });
66
84
  });
67
85
  }
68
- function createRootSuite(files) {
69
- let rootSuite = new TestSuiteClass_1.TestSuiteClass();
70
- for (let file of files) {
71
- processTestFile(rootSuite, file);
86
+ async function test(files, suiteProvider, options) {
87
+ const reporter = createReporter(options.reporter);
88
+ disableConsole();
89
+ const suite = await createTree(files, suiteProvider);
90
+ reporter.listenTo(suite);
91
+ if (options.filter)
92
+ suite.treeShake(options.filter.toLowerCase());
93
+ return await suite.run({ debug: options.debug });
94
+ }
95
+ function createReporter(reporter) {
96
+ switch (reporter) {
97
+ case "spec":
98
+ return new reporters_1.SpecReporter(console);
99
+ case "json":
100
+ return new reporters_1.JsonReporter(console);
72
101
  }
73
- return rootSuite;
74
102
  }
75
- function processTestFile(suite, file) {
103
+ async function createTree(filesPaths, suiteProvider) {
104
+ for (let filePath of filesPaths) {
105
+ const testFuncPromise = getTestFileFunctionAsync(filePath);
106
+ const suite = suiteProvider.getSuiteForTestFile(filePath);
107
+ const testFunc = await testFuncPromise;
108
+ testFunc(suite);
109
+ }
110
+ return suiteProvider.root;
111
+ }
112
+ async function getTestFileFunctionAsync(file) {
76
113
  let testFileFunction;
77
114
  try {
78
- testFileFunction = require(path.resolve(file));
115
+ testFileFunction = await Promise.resolve().then(() => __importStar(require(path_1.default.resolve(file))));
79
116
  }
80
117
  catch (reason) {
81
- console.error(`The file '${file}' matched the tests glob but failed to be imported. reason:`, reason);
82
- process.exit(1);
118
+ throw `The file '${file}' matched the tests glob but failed to be imported. reason: ${reason}`;
83
119
  }
84
120
  if (typeof testFileFunction != "function")
85
121
  testFileFunction = testFileFunction.default;
86
122
  if (typeof testFileFunction != "function") {
87
- console.error(`The file '${file}' matched the tests glob but did not export a default function.`);
88
- process.exit(1);
123
+ throw `The file '${file}' matched the tests glob but did not export a default function.`;
89
124
  }
90
- testFileFunction(suite);
125
+ return testFileFunction;
126
+ }
127
+ async function outputDiscoveredTests(files, suiteProvider) {
128
+ let suite = await createTree(files, suiteProvider);
129
+ console.log(JSON.stringify(suite.discover()));
91
130
  }
131
+
132
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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
@@ -0,0 +1,20 @@
1
+ import { SuiteResultStatus } from "../run-results/SuiteRunResult";
2
+ import { TestRunResult } from "../run-results/TestRunResult";
3
+ import { Suite } from "../Suite";
4
+ import { Reporter } from "./Reporter";
5
+ export interface SuiteResult {
6
+ title: string;
7
+ elapsed: number;
8
+ status: SuiteResultStatus;
9
+ tests: TestRunResult[];
10
+ childrenSuites: SuiteResult[];
11
+ }
12
+ export declare class JsonReporter implements Reporter {
13
+ private output;
14
+ private suiteToResultMap;
15
+ private testToResultMap;
16
+ constructor(output: Console);
17
+ listenTo(rootSuite: Suite): void;
18
+ private outputResultsFor;
19
+ private getResultOfSuite;
20
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonReporter = void 0;
4
+ class JsonReporter {
5
+ constructor(output) {
6
+ this.output = output;
7
+ this.suiteToResultMap = new Map();
8
+ this.testToResultMap = new Map();
9
+ }
10
+ listenTo(rootSuite) {
11
+ rootSuite.onSuiteEnded.add(args => {
12
+ this.suiteToResultMap.set(args.suite, args.result);
13
+ if (args.suite == rootSuite)
14
+ this.outputResultsFor(rootSuite);
15
+ });
16
+ rootSuite.onTestEnded.add(args => {
17
+ this.testToResultMap.set(args.test, args.result);
18
+ });
19
+ }
20
+ outputResultsFor(suite) {
21
+ const result = this.getResultOfSuite(suite);
22
+ this.output.log(JSON.stringify(result));
23
+ }
24
+ getResultOfSuite(suite) {
25
+ const runResult = this.suiteToResultMap.get(suite);
26
+ const tests = suite.tests.map(e => this.testToResultMap.get(e));
27
+ const childrenSuites = suite.childrenSuites.map(e => this.getResultOfSuite(e));
28
+ return {
29
+ title: suite.title,
30
+ status: runResult.status,
31
+ elapsed: runResult.elapsed,
32
+ tests: tests,
33
+ childrenSuites: childrenSuites
34
+ };
35
+ }
36
+ }
37
+ exports.JsonReporter = JsonReporter;
38
+
39
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlcG9ydGVycy9Kc29uUmVwb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBY0EsTUFBYSxZQUFZO0lBSXhCLFlBQW9CLE1BQWU7UUFBZixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBSDNCLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBQ3BELG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFHekQsQ0FBQztJQUVNLFFBQVEsQ0FBQyxTQUFnQjtRQUMvQixTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRW5ELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFZO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQVk7UUFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUM7UUFDakUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQztRQUVoRixPQUFPO1lBQ04sS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN4QixPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU87WUFDMUIsS0FBSyxFQUFFLEtBQUs7WUFDWixjQUFjLEVBQUUsY0FBYztTQUM5QixDQUFDO0lBQ0gsQ0FBQztDQUNEO0FBdkNELG9DQXVDQyIsImZpbGUiOiJyZXBvcnRlcnMvSnNvblJlcG9ydGVyLmpzIiwic291cmNlUm9vdCI6Ii4uXFwuLlxcc3JjIn0=
@@ -0,0 +1,4 @@
1
+ import { Suite } from "../Suite";
2
+ export interface Reporter {
3
+ listenTo(suite: Suite): void;
4
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlcG9ydGVycy9SZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InJlcG9ydGVycy9SZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIuLlxcLi5cXHNyYyJ9
@@ -0,0 +1,14 @@
1
+ import { Suite } from "../Suite";
2
+ import { Reporter } from "./Reporter";
3
+ export declare class SpecReporter implements Reporter {
4
+ private output;
5
+ private symbols;
6
+ private indentation;
7
+ private passedCount;
8
+ private errors;
9
+ constructor(output: Console);
10
+ listenTo(rootSuite: Suite): void;
11
+ private onEnd;
12
+ private formatElapsed;
13
+ private getTestFullTitle;
14
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SpecReporter = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ class SpecReporter {
9
+ constructor(output) {
10
+ this.output = output;
11
+ this.symbols = {
12
+ ok: '✓',
13
+ err: '✖',
14
+ };
15
+ this.indentation = " ";
16
+ this.passedCount = 0;
17
+ this.errors = [];
18
+ }
19
+ listenTo(rootSuite) {
20
+ let indent = "";
21
+ rootSuite.onSuiteStarted.add(suite => {
22
+ if (suite == rootSuite)
23
+ return;
24
+ this.output.log();
25
+ this.output.info(indent + suite.title);
26
+ indent += this.indentation;
27
+ });
28
+ rootSuite.onSuiteEnded.add(args => {
29
+ indent = indent.substr(0, indent.length - this.indentation.length);
30
+ if (args.suite == rootSuite) {
31
+ this.onEnd();
32
+ }
33
+ });
34
+ rootSuite.onTestEnded.add(args => {
35
+ const result = args.result;
36
+ const elapsed = this.formatElapsed(result.elapsed);
37
+ if (result.passed) {
38
+ this.passedCount++;
39
+ this.output.log(chalk_1.default.green(`${indent}${this.symbols.ok} ${result.title}`) + ` ${elapsed}`);
40
+ }
41
+ else {
42
+ this.errors.push(args);
43
+ this.output.log(chalk_1.default.red(`${indent}${this.symbols.err} ${result.title}`) + ` ${elapsed}`);
44
+ }
45
+ });
46
+ }
47
+ onEnd() {
48
+ if (!this.errors)
49
+ return;
50
+ this.output.log();
51
+ this.output.log("Failed tests:");
52
+ this.output.log("=============");
53
+ for (let failedTestRun of this.errors) {
54
+ this.output.log();
55
+ let title = this.getTestFullTitle(failedTestRun.test);
56
+ this.output.log(title);
57
+ let isError = failedTestRun.result.reason instanceof Error;
58
+ let message = isError ?
59
+ failedTestRun.result.reason.message :
60
+ JSON.stringify(failedTestRun.result.reason);
61
+ this.output.log(this.indentation + chalk_1.default.red(`${message}`));
62
+ isError && this.output.log(this.indentation + `${failedTestRun.result.reason.stack}`);
63
+ }
64
+ this.output.log();
65
+ this.output.log(chalk_1.default.green(`${this.passedCount} passing`));
66
+ if (this.errors.length > 0) {
67
+ this.output.log(chalk_1.default.red(`${this.errors.length} failing`));
68
+ }
69
+ this.output.log();
70
+ }
71
+ formatElapsed(elapsed) {
72
+ return chalk_1.default.grey(`(${elapsed.toFixed(2)}ms)`);
73
+ }
74
+ getTestFullTitle(test) {
75
+ let titles = [test.title];
76
+ let parent = test.parent;
77
+ while (parent && parent.title) {
78
+ titles.push(parent.title);
79
+ parent = parent.parent;
80
+ }
81
+ let title = titles.pop();
82
+ while (titles.length > 0) {
83
+ title += " -> " + titles.pop();
84
+ }
85
+ return title;
86
+ }
87
+ }
88
+ exports.SpecReporter = SpecReporter;
89
+
90
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlcG9ydGVycy9TcGVjUmVwb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBSzFCLE1BQWEsWUFBWTtJQVd4QixZQUFvQixNQUFlO1FBQWYsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQVYzQixZQUFPLEdBQUc7WUFDakIsRUFBRSxFQUFFLEdBQUc7WUFDUCxHQUFHLEVBQUUsR0FBRztTQUNSLENBQUM7UUFFTSxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixXQUFNLEdBQW9CLEVBQUUsQ0FBQztJQUdyQyxDQUFDO0lBRU0sUUFBUSxDQUFDLFNBQWdCO1FBQy9CLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVoQixTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxJQUFJLEtBQUssSUFBSSxTQUFTO2dCQUNyQixPQUFPO1lBRVIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVuRSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxFQUFFO2dCQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDYjtRQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENB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QWEsQ0FBQyxPQUFlO1FBQ3BDLE9BQU8sZUFBSyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ2xDLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLElBQUksTUFBTSxHQUFzQixJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTVDLE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDdkI7UUFFRCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFHLENBQUM7UUFFMUIsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QixLQUFLLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMvQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztDQUNEO0FBeEdELG9DQXdHQyIsImZpbGUiOiJyZXBvcnRlcnMvU3BlY1JlcG9ydGVyLmpzIiwic291cmNlUm9vdCI6Ii4uXFwuLlxcc3JjIn0=
@@ -0,0 +1,3 @@
1
+ export * from "./Reporter";
2
+ export * from "./SpecReporter";
3
+ export * from "./JsonReporter";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./Reporter"), exports);
14
+ __exportStar(require("./SpecReporter"), exports);
15
+ __exportStar(require("./JsonReporter"), exports);
16
+
17
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlcG9ydGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkI7QUFDM0IsaURBQStCO0FBQy9CLGlEQUErQiIsImZpbGUiOiJyZXBvcnRlcnMvaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi5cXC4uXFxzcmMifQ==
@@ -0,0 +1,11 @@
1
+ export declare enum SuiteResultStatus {
2
+ Passed = "passed",
3
+ Failed = "failed",
4
+ Partial = "partial"
5
+ }
6
+ export declare class SuiteRunResult {
7
+ title: string;
8
+ elapsed: number;
9
+ status: SuiteResultStatus;
10
+ constructor(title: string, elapsed: number, status: SuiteResultStatus);
11
+ }