just-test-node 1.5.0 → 2.0.0-alpha.3

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 (56) hide show
  1. package/lib/Discover.d.ts +25 -0
  2. package/lib/Discover.js +4 -0
  3. package/lib/OptionsDefinitions.d.ts +16 -0
  4. package/lib/OptionsDefinitions.js +61 -0
  5. package/lib/StackTrace.d.ts +1 -0
  6. package/lib/StackTrace.js +44 -0
  7. package/lib/Suite.d.ts +46 -0
  8. package/lib/Suite.js +113 -0
  9. package/lib/SuiteProvider.d.ts +9 -0
  10. package/lib/SuiteProvider.js +88 -0
  11. package/lib/Test.d.ts +10 -6
  12. package/lib/Test.js +24 -12
  13. package/lib/TestStage.d.ts +1 -1
  14. package/lib/TestStage.js +2 -1
  15. package/lib/code-position-resolution.d.ts +2 -0
  16. package/lib/code-position-resolution.js +50 -0
  17. package/lib/examples/dir-suite/@test-suite +0 -0
  18. package/lib/examples/dir-suite/child-dir-suite/@test-suite +0 -0
  19. package/lib/{exampleTestFile.test.d.ts → examples/dir-suite/child-dir-suite/childDirTests.test.d.ts} +0 -0
  20. package/lib/examples/dir-suite/child-dir-suite/childDirTests.test.js +9 -0
  21. package/lib/examples/dir-suite/inDirSuite.test.d.ts +2 -0
  22. package/lib/examples/dir-suite/inDirSuite.test.js +9 -0
  23. package/lib/examples/dir-suite/just-a-folder/inJustAFolderTest.d.ts +2 -0
  24. package/lib/examples/dir-suite/just-a-folder/inJustAFolderTest.js +9 -0
  25. package/lib/examples/exampleTestFile.test.d.ts +2 -0
  26. package/lib/examples/exampleTestFile.test.js +60 -0
  27. package/lib/help.d.ts +1 -1
  28. package/lib/help.js +2 -1
  29. package/lib/index.d.ts +1 -0
  30. package/lib/index.js +118 -54
  31. package/lib/reporters/JsonReporter.d.ts +20 -0
  32. package/lib/reporters/JsonReporter.js +39 -0
  33. package/lib/reporters/Reporter.d.ts +4 -0
  34. package/lib/reporters/Reporter.js +4 -0
  35. package/lib/reporters/SpecReporter.d.ts +14 -0
  36. package/lib/reporters/SpecReporter.js +85 -0
  37. package/lib/reporters/index.d.ts +3 -0
  38. package/lib/reporters/index.js +17 -0
  39. package/lib/run-results/SuiteRunResult.d.ts +11 -0
  40. package/lib/run-results/SuiteRunResult.js +19 -0
  41. package/lib/run-results/TestRunResult.d.ts +9 -0
  42. package/lib/run-results/TestRunResult.js +15 -0
  43. package/lib/run-results/index.d.ts +2 -0
  44. package/lib/run-results/index.js +16 -0
  45. package/package.json +69 -64
  46. package/lib/OptionsDefinition.d.ts +0 -5
  47. package/lib/OptionsDefinition.js +0 -29
  48. package/lib/PerformancePolyfill.d.ts +0 -1
  49. package/lib/PerformancePolyfill.js +0 -16
  50. package/lib/SpecReporter.d.ts +0 -12
  51. package/lib/SpecReporter.js +0 -76
  52. package/lib/TestRunResult.d.ts +0 -9
  53. package/lib/TestRunResult.js +0 -13
  54. package/lib/TestSuiteClass.d.ts +0 -28
  55. package/lib/TestSuiteClass.js +0 -78
  56. package/lib/exampleTestFile.test.js +0 -59
@@ -0,0 +1,25 @@
1
+ export interface TextPosition {
2
+ /**
3
+ * Zero based line.
4
+ */
5
+ line: number;
6
+ /**
7
+ * Zero based column.
8
+ */
9
+ column: number;
10
+ }
11
+ export interface FunctionCodeRange {
12
+ filePath: string;
13
+ start: TextPosition;
14
+ end: TextPosition;
15
+ }
16
+ export interface DiscoveredSuite {
17
+ title: string;
18
+ location: FunctionCodeRange;
19
+ tests: DiscoveredTest[];
20
+ suites: DiscoveredSuite[];
21
+ }
22
+ export interface DiscoveredTest {
23
+ title: string;
24
+ location: FunctionCodeRange;
25
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRpc2NvdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoiRGlzY292ZXIuanMiLCJzb3VyY2VSb290IjoiLi5cXHNyYyJ9
@@ -0,0 +1,16 @@
1
+ import { OptionDefinition as ArgsOptionDefinition } from "command-line-args";
2
+ export interface Options {
3
+ glob: string;
4
+ filter: string;
5
+ help: boolean;
6
+ debug: boolean;
7
+ discover: boolean;
8
+ reporter: "spec" | "json";
9
+ testFailureExitCode: number;
10
+ directorySuitesGlob: string;
11
+ }
12
+ export declare function validateOptions(options: Options): void;
13
+ export interface OptionDefinition extends ArgsOptionDefinition {
14
+ description: string;
15
+ }
16
+ export declare const optionsDefinitions: OptionDefinition[];
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.optionsDefinitions = exports.validateOptions = void 0;
4
+ function validateOptions(options) {
5
+ if (!["spec", "json"].includes(options.reporter))
6
+ throw "invalid reporter.";
7
+ }
8
+ exports.validateOptions = validateOptions;
9
+ exports.optionsDefinitions = [
10
+ {
11
+ name: 'help', alias: 'h',
12
+ type: Boolean,
13
+ defaultValue: false,
14
+ description: "Show help."
15
+ },
16
+ {
17
+ name: 'glob',
18
+ type: String,
19
+ defaultValue: "./{*.test.js,!(node_modules)/**/*.test.js}",
20
+ description: "Test files glob pattern."
21
+ },
22
+ {
23
+ name: "filter",
24
+ type: String,
25
+ defaultOption: true,
26
+ defaultValue: "",
27
+ description: "Filters tests."
28
+ },
29
+ {
30
+ name: 'debug',
31
+ type: Boolean,
32
+ defaultValue: false,
33
+ description: "Debug mode. Will disable timeouts."
34
+ },
35
+ {
36
+ name: 'discover',
37
+ type: Boolean,
38
+ defaultValue: false,
39
+ description: "Outputs the available the tests as json."
40
+ },
41
+ {
42
+ name: "reporter",
43
+ type: String,
44
+ defaultValue: "spec",
45
+ description: `The reporter to use for ouput. Options: "spec", "json"`,
46
+ },
47
+ {
48
+ name: "testFailureExitCode",
49
+ type: Number,
50
+ defaultValue: 1,
51
+ description: `The exit code to use when has test failures.`,
52
+ },
53
+ {
54
+ name: 'directorySuitesGlob',
55
+ type: String,
56
+ defaultValue: "./{@test-suite,!(node_modules)/**/@test-suite}",
57
+ description: "Directory suite files glob pattern."
58
+ }
59
+ ];
60
+
61
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9wdGlvbnNEZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhQSxTQUFnQixlQUFlLENBQUMsT0FBZ0I7SUFDL0MsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQy9DLE1BQU0sbUJBQW1CLENBQUM7QUFDNUIsQ0FBQztBQUhELDBDQUdDO0FBTVksUUFBQSxrQkFBa0IsR0FBdUI7SUFDckQ7UUFDQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHO1FBQ3hCLElBQUksRUFBRSxPQUFPO1FBQ2IsWUFBWSxFQUFFLEtBQUs7UUFDbkIsV0FBVyxFQUFFLFlBQVk7S0FDekI7SUFDRDtRQUNDLElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFLE1BQU07UUFDWixZQUFZLEVBQUUsNENBQTRDO1FBQzFELFdBQVcsRUFBRSwwQkFBMEI7S0FDdkM7SUFDRDtRQUNDLElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBSSxFQUFFLE1BQU07UUFDWixhQUFhLEVBQUUsSUFBSTtRQUNuQixZQUFZLEVBQUUsRUFBRTtRQUNoQixXQUFXLEVBQUUsZ0JBQWdCO0tBQzdCO0lBQ0Q7UUFDQyxJQUFJLEVBQUUsT0FBTztRQUNiLElBQUksRUFBRSxPQUFPO1FBQ2IsWUFBWSxFQUFFLEtBQUs7UUFDbkIsV0FBVyxFQUFFLG9DQUFvQztLQUNqRDtJQUNEO1FBQ0MsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLE9BQU87UUFDYixZQUFZLEVBQUUsS0FBSztRQUNuQixXQUFXLEVBQUUsMENBQTBDO0tBQ3ZEO0lBQ0Q7UUFDQyxJQUFJLEVBQUUsVUFBVTtRQUNoQixJQUFJLEVBQUUsTUFBTTtRQUNaLFlBQVksRUFBRSxNQUFNO1FBQ3BCLFdBQVcsRUFBRSx3REFBd0Q7S0FDckU7SUFDRDtRQUNDLElBQUksRUFBRSxxQkFBcUI7UUFDM0IsSUFBSSxFQUFFLE1BQU07UUFDWixZQUFZLEVBQUUsQ0FBQztRQUNmLFdBQVcsRUFBRSw4Q0FBOEM7S0FDM0Q7SUFDRDtRQUNDLElBQUksRUFBRSxxQkFBcUI7UUFDM0IsSUFBSSxFQUFFLE1BQU07UUFDWixZQUFZLEVBQUUsZ0RBQWdEO1FBQzlELFdBQVcsRUFBRSxxQ0FBcUM7S0FDbEQ7Q0FDRCxDQUFDIiwiZmlsZSI6Ik9wdGlvbnNEZWZpbml0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIuLlxcc3JjIn0=
@@ -0,0 +1 @@
1
+ export declare function getCallerLocationText(currentFunction: Function): string;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCallerLocationText = void 0;
4
+ function getCallerLocationText(currentFunction) {
5
+ const originalLimit = Error.stackTraceLimit;
6
+ const originalPrepare = Error.prepareStackTrace;
7
+ Error.stackTraceLimit = 1;
8
+ Error.prepareStackTrace = getFirstCallLocation;
9
+ const object = { stack: "", originalPrepare: originalPrepare };
10
+ Error.captureStackTrace(object, currentFunction);
11
+ const location = object.stack;
12
+ Error.stackTraceLimit = originalLimit;
13
+ Error.prepareStackTrace = originalPrepare;
14
+ return location;
15
+ }
16
+ exports.getCallerLocationText = getCallerLocationText;
17
+ function getFirstCallLocation(object, stack) {
18
+ const callSite = stack[0];
19
+ if (!object.originalPrepare)
20
+ return `${callSite.getFileName()}:${callSite.getLineNumber()}:${callSite.getColumnNumber()}`;
21
+ // Support for ts-node
22
+ const formattedByRuntime = object.originalPrepare(object, [new SimplifiedCallSite(callSite)]);
23
+ return formattedByRuntime.slice("Error\n at ".length);
24
+ }
25
+ class SimplifiedCallSite {
26
+ constructor(callSite) {
27
+ this.callSite = callSite;
28
+ }
29
+ getThis() { return undefined; }
30
+ getTypeName() { return null; }
31
+ getFunction() { return undefined; }
32
+ getFunctionName() { return null; }
33
+ getMethodName() { return null; }
34
+ getFileName() { return this.callSite.getFileName(); }
35
+ getLineNumber() { return this.callSite.getLineNumber(); }
36
+ getColumnNumber() { return this.callSite.getColumnNumber(); }
37
+ getEvalOrigin() { return undefined; }
38
+ isToplevel() { return true; }
39
+ isEval() { return false; }
40
+ isNative() { return false; }
41
+ isConstructor() { return false; }
42
+ }
43
+
44
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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
package/lib/Suite.d.ts ADDED
@@ -0,0 +1,46 @@
1
+ import { TestSuite, TestParams } from "just-test-api";
2
+ import { Event1 } from "itay-events";
3
+ import { Test } from "./Test";
4
+ import { TestRunResult } from "./run-results/TestRunResult";
5
+ import { SuiteRunResult } from "./run-results/SuiteRunResult";
6
+ import { DiscoveredSuite, FunctionCodeRange } from "./Discover";
7
+ export interface RunParams {
8
+ debug: boolean;
9
+ }
10
+ export interface TestEndedArgs {
11
+ test: Test;
12
+ result: TestRunResult;
13
+ }
14
+ export interface SuiteEndedArgs {
15
+ suite: Suite;
16
+ result: SuiteRunResult;
17
+ }
18
+ export declare class Suite implements TestSuite {
19
+ title: string;
20
+ location: FunctionCodeRange;
21
+ parent?: Suite;
22
+ private isPartial;
23
+ tests: Test[];
24
+ private _childrenSuites;
25
+ childrenSuites: ReadonlyArray<Suite>;
26
+ onSuiteStarted: Event1<Suite>;
27
+ onSuiteEnded: Event1<SuiteEndedArgs>;
28
+ onTestStarted: Event1<Test>;
29
+ onTestEnded: Event1<TestEndedArgs>;
30
+ constructor();
31
+ discover(): DiscoveredSuite;
32
+ describe(title: string | {
33
+ name: string;
34
+ }, suiteFunction: (suite: Suite) => void): void;
35
+ addChildSuite(childSuite: Suite): void;
36
+ test(title: string, testFunction: (test: TestParams) => Promise<void> | void): void;
37
+ testFunc(namedTestFunction: (test: TestParams) => Promise<void> | void): void;
38
+ private getTitleFor;
39
+ run(params: RunParams): Promise<boolean>;
40
+ private getStatus;
41
+ treeShake(lowerCasedFilter: string): boolean;
42
+ private calcIsPartial;
43
+ private isTitlePassingFilter;
44
+ private runDirectDescendantsTests;
45
+ private runSubSuites;
46
+ }
package/lib/Suite.js ADDED
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Suite = void 0;
4
+ const itay_events_1 = require("itay-events");
5
+ const Test_1 = require("./Test");
6
+ const SuiteRunResult_1 = require("./run-results/SuiteRunResult");
7
+ const code_position_resolution_1 = require("./code-position-resolution");
8
+ class Suite {
9
+ constructor() {
10
+ this.title = "";
11
+ this.location = null;
12
+ this.isPartial = false;
13
+ this.tests = [];
14
+ this._childrenSuites = [];
15
+ this.childrenSuites = this._childrenSuites;
16
+ this.onSuiteStarted = new itay_events_1.Event1();
17
+ this.onSuiteEnded = new itay_events_1.Event1();
18
+ this.onTestStarted = new itay_events_1.Event1();
19
+ this.onTestEnded = new itay_events_1.Event1();
20
+ }
21
+ discover() {
22
+ return {
23
+ title: this.title,
24
+ location: this.location,
25
+ tests: this.tests.map(e => e.discover()),
26
+ suites: this.childrenSuites.map(e => e.discover())
27
+ };
28
+ }
29
+ describe(title, suiteFunction) {
30
+ let childSuite = new Suite();
31
+ childSuite.title = typeof (title) === "string" ? title : title.name;
32
+ childSuite.location = (0, code_position_resolution_1.getFunctionCodeRange)(suiteFunction, this.describe);
33
+ this.addChildSuite(childSuite);
34
+ suiteFunction(childSuite);
35
+ }
36
+ addChildSuite(childSuite) {
37
+ childSuite.onTestStarted.add(t => this.onTestStarted.trigger(t));
38
+ childSuite.onTestEnded.add(result => this.onTestEnded.trigger(result));
39
+ childSuite.onSuiteStarted.add(s => this.onSuiteStarted.trigger(s));
40
+ childSuite.onSuiteEnded.add(s => this.onSuiteEnded.trigger(s));
41
+ childSuite.parent = this;
42
+ this._childrenSuites.push(childSuite);
43
+ }
44
+ test(title, testFunction) {
45
+ const location = (0, code_position_resolution_1.getFunctionCodeRange)(testFunction, this.test);
46
+ this.tests.push(new Test_1.Test(title, testFunction, this, location));
47
+ }
48
+ testFunc(namedTestFunction) {
49
+ const location = (0, code_position_resolution_1.getFunctionCodeRange)(namedTestFunction, this.testFunc);
50
+ this.tests.push(new Test_1.Test(this.getTitleFor(namedTestFunction), namedTestFunction, this, location));
51
+ }
52
+ getTitleFor(func) {
53
+ return func.name.replace(/_/g, " ");
54
+ }
55
+ async run(params) {
56
+ this.onSuiteStarted.trigger(this);
57
+ const startTime = performance.now();
58
+ const testsPassed = await this.runDirectDescendantsTests(params);
59
+ const subSuitesPassed = await this.runSubSuites(params);
60
+ const passed = testsPassed && subSuitesPassed;
61
+ this.onSuiteEnded.trigger({
62
+ suite: this,
63
+ result: new SuiteRunResult_1.SuiteRunResult(this.title, performance.now() - startTime, this.getStatus(passed))
64
+ });
65
+ return passed;
66
+ }
67
+ getStatus(runPassed) {
68
+ if (!runPassed)
69
+ return SuiteRunResult_1.SuiteResultStatus.Failed;
70
+ if (this.isPartial)
71
+ return SuiteRunResult_1.SuiteResultStatus.Partial;
72
+ return SuiteRunResult_1.SuiteResultStatus.Passed;
73
+ }
74
+ treeShake(lowerCasedFilter) {
75
+ if (this.isTitlePassingFilter(lowerCasedFilter))
76
+ return true;
77
+ const originalTestsCount = this.tests.length;
78
+ const originalchildrenSuitesCount = this.childrenSuites.length;
79
+ this.tests = this.tests.filter(e => e.title.toLowerCase().includes(lowerCasedFilter));
80
+ this.childrenSuites = this.childrenSuites.filter(e => e.treeShake(lowerCasedFilter));
81
+ this.isPartial = this.calcIsPartial(originalTestsCount, originalchildrenSuitesCount);
82
+ return this.tests.length > 0 || this.childrenSuites.length > 0;
83
+ }
84
+ calcIsPartial(originalTestsCount, originalchildrenSuitesCount) {
85
+ return this.tests.length < originalTestsCount ||
86
+ this.childrenSuites.length < originalchildrenSuitesCount ||
87
+ this.childrenSuites.some(e => e.isPartial);
88
+ }
89
+ isTitlePassingFilter(lowerCasedFilter) {
90
+ return this.title.toLowerCase().includes(lowerCasedFilter.toLowerCase());
91
+ }
92
+ async runDirectDescendantsTests(testRunOptions) {
93
+ let passed = true;
94
+ for (let test of this.tests) {
95
+ this.onTestStarted.trigger(test);
96
+ let result = await test.run(testRunOptions);
97
+ passed = passed && result.passed;
98
+ this.onTestEnded.trigger({ test, result });
99
+ }
100
+ return passed;
101
+ }
102
+ async runSubSuites(params) {
103
+ let passed = true;
104
+ for (let suite of this.childrenSuites) {
105
+ let suitePassed = await suite.run(params);
106
+ passed = passed && suitePassed;
107
+ }
108
+ return passed;
109
+ }
110
+ }
111
+ exports.Suite = Suite;
112
+
113
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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
@@ -0,0 +1,9 @@
1
+ import { Suite } from "./Suite";
2
+ export declare class SuiteProvider {
3
+ root: Suite;
4
+ private directorySuites;
5
+ constructor(directorySuiteFilesPaths: string[]);
6
+ private findParentForDirAt;
7
+ private setUnderRoot;
8
+ getSuiteForTestFile(filePath: string): Suite;
9
+ }
@@ -0,0 +1,88 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.SuiteProvider = void 0;
23
+ const path = __importStar(require("path"));
24
+ const Suite_1 = require("./Suite");
25
+ class SuiteProvider {
26
+ constructor(directorySuiteFilesPaths) {
27
+ this.root = new Suite_1.Suite();
28
+ this.directorySuites = [];
29
+ const dirs = directorySuiteFilesPaths.map(e => new DirectorySuite(path.resolve(e)));
30
+ dirs.sort(e => e.path.length);
31
+ for (let i = 0; i < dirs.length; i++) {
32
+ const current = dirs[i];
33
+ const parent = this.findParentForDirAt(dirs, i);
34
+ if (parent)
35
+ parent.setAsParentOf(current);
36
+ else
37
+ this.setUnderRoot(current);
38
+ }
39
+ }
40
+ findParentForDirAt(dirs, i) {
41
+ const current = dirs[i];
42
+ for (let j = i - 1; j >= 0; j--) {
43
+ const checkedParent = dirs[j];
44
+ if (current.path.startsWith(checkedParent.path))
45
+ return checkedParent;
46
+ }
47
+ return null;
48
+ }
49
+ setUnderRoot(dirSuite) {
50
+ this.directorySuites.push(dirSuite);
51
+ this.root.addChildSuite(dirSuite.suite);
52
+ }
53
+ getSuiteForTestFile(filePath) {
54
+ filePath = path.resolve(filePath);
55
+ for (const dirSuite of this.directorySuites) {
56
+ const suite = dirSuite.getSuiteOrNull(filePath);
57
+ if (suite)
58
+ return suite;
59
+ }
60
+ return this.root;
61
+ }
62
+ }
63
+ exports.SuiteProvider = SuiteProvider;
64
+ class DirectorySuite {
65
+ constructor(directorySuiteFilePath) {
66
+ this.path = path.dirname(directorySuiteFilePath);
67
+ this.subDirectorySuites = [];
68
+ this.suite = new Suite_1.Suite();
69
+ this.suite.title = path.basename(this.path);
70
+ this.suite.location = { filePath: directorySuiteFilePath, start: { line: 0, column: 0 }, end: { line: 0, column: 0 } };
71
+ }
72
+ setAsParentOf(child) {
73
+ this.subDirectorySuites.push(child);
74
+ this.suite.addChildSuite(child.suite);
75
+ }
76
+ getSuiteOrNull(filePath) {
77
+ if (!filePath.startsWith(this.path))
78
+ return null;
79
+ for (const subDirSuite of this.subDirectorySuites) {
80
+ const suite = subDirSuite.getSuiteOrNull(filePath);
81
+ if (suite)
82
+ return suite;
83
+ }
84
+ return this.suite;
85
+ }
86
+ }
87
+
88
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4SCxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQXFCO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxjQUFjLENBQUMsUUFBZ0I7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQztRQUViLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ2xELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbkQsSUFBSSxLQUFLO2dCQUNSLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDbkIsQ0FBQztDQUNEIiwiZmlsZSI6IlN1aXRlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiLi5cXHNyYyJ9
package/lib/Test.d.ts CHANGED
@@ -1,15 +1,19 @@
1
1
  import { TestParams } from "just-test-api";
2
- import { TestRunResult } from "./TestRunResult";
3
- import { TestSuiteClass } from "./TestSuiteClass";
2
+ import { DiscoveredTest, FunctionCodeRange } from "./Discover";
3
+ import { TestRunResult } from "./run-results/TestRunResult";
4
+ import { Suite } from "./Suite";
4
5
  export interface TestRunOptions {
5
6
  debug: boolean;
6
7
  }
7
8
  export declare class Test {
8
9
  title: string;
9
10
  testFunction: (test: TestParams) => Promise<void> | void;
10
- parent: TestSuiteClass;
11
- constructor(title: string, testFunction: (test: TestParams) => Promise<void> | void, parent: TestSuiteClass);
11
+ parent: Suite;
12
+ location: FunctionCodeRange;
13
+ constructor(title: string, testFunction: (test: TestParams) => Promise<void> | void, parent: Suite, location: FunctionCodeRange);
14
+ discover(): DiscoveredTest;
12
15
  run(options: TestRunOptions): Promise<TestRunResult>;
13
- private isPromise(result);
14
- private timeout(promise, timeout);
16
+ private isPromise;
17
+ private withTimeout;
18
+ private stringifyReason;
15
19
  }
package/lib/Test.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const TestRunResult_1 = require("./TestRunResult");
3
+ exports.Test = void 0;
4
+ const TestRunResult_1 = require("./run-results/TestRunResult");
4
5
  const TestStage_1 = require("./TestStage");
5
6
  class TestParamsClass {
6
7
  constructor() {
@@ -18,33 +19,37 @@ class TestParamsClass {
18
19
  }
19
20
  }
20
21
  class Test {
21
- constructor(title, testFunction, parent) {
22
+ constructor(title, testFunction, parent, location) {
22
23
  this.title = title;
23
24
  this.testFunction = testFunction;
24
25
  this.parent = parent;
26
+ this.location = location;
27
+ }
28
+ discover() {
29
+ return { title: this.title, location: this.location };
25
30
  }
26
31
  async run(options) {
27
- let testParams = new TestParamsClass();
32
+ const testParams = new TestParamsClass();
33
+ const startTime = performance.now();
28
34
  try {
29
35
  let result = this.testFunction(testParams);
30
36
  if (result && this.isPromise(result)) {
31
- if (options.debug) {
37
+ if (options.debug)
32
38
  await result;
33
- }
34
- else {
35
- await this.timeout(result, testParams.timeout);
36
- }
39
+ else
40
+ await this.withTimeout(result, testParams.timeout);
37
41
  }
42
+ return Promise.resolve(new TestRunResult_1.TestRunResult(this.title, performance.now() - startTime, testParams.stage, true));
38
43
  }
39
44
  catch (reason) {
40
- return Promise.resolve(new TestRunResult_1.TestRunResult(this, testParams.stage, false, reason));
45
+ const reasonText = this.stringifyReason(reason);
46
+ return Promise.resolve(new TestRunResult_1.TestRunResult(this.title, performance.now() - startTime, testParams.stage, false, reasonText));
41
47
  }
42
- return Promise.resolve(new TestRunResult_1.TestRunResult(this, testParams.stage, true));
43
48
  }
44
49
  isPromise(result) {
45
50
  return typeof result.then === "function";
46
51
  }
47
- async timeout(promise, timeout) {
52
+ async withTimeout(promise, timeout) {
48
53
  let timer = undefined;
49
54
  let firstValue = await Promise.race([
50
55
  promise,
@@ -59,7 +64,14 @@ class Test {
59
64
  clearTimeout(timer);
60
65
  }
61
66
  }
67
+ stringifyReason(reason) {
68
+ if (typeof reason == "string")
69
+ return reason;
70
+ if (reason instanceof Error && reason.stack)
71
+ return reason.stack;
72
+ return String(reason);
73
+ }
62
74
  }
63
75
  exports.Test = Test;
64
76
 
65
- //# sourceMappingURL=data:application/json;charset=utf8;base64,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
77
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0RBQTREO0FBQzVELDJDQUF3QztBQUd4QyxNQUFNLGVBQWU7SUFJcEI7UUFITyxVQUFLLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUM7UUFDMUIsWUFBTyxHQUFXLElBQUksQ0FBQztJQUc5QixDQUFDO0lBRU0sT0FBTztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUM7SUFDaEMsQ0FBQztJQUVNLEdBQUc7UUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLHFCQUFTLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxxQkFBUyxDQUFDLE1BQU0sQ0FBQztJQUMvQixDQUFDO0NBQ0Q7QUFNRCxNQUFhLElBQUk7SUFDaEIsWUFBbUIsS0FBYSxFQUN4QixZQUF3RCxFQUN4RCxNQUFhLEVBQ2IsUUFBMkI7UUFIaEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBNEM7UUFDeEQsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLGFBQVEsR0FBUixRQUFRLENBQW1CO0lBRW5DLENBQUM7SUFFTSxRQUFRO1FBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBdUI7UUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFcEMsSUFBSTtZQUNILElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFM0MsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDckMsSUFBSSxPQUFPLENBQUMsS0FBSztvQkFDaEIsTUFBTSxNQUFNLENBQUM7O29CQUViLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksNkJBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdHO1FBQ0QsT0FBTyxNQUFNLEVBQUU7WUFDZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLDZCQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDMUg7SUFDRixDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQVc7UUFDNUIsT0FBTyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0lBQzFDLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCLEVBQUUsT0FBZTtRQUNoRSxJQUFJLEtBQUssR0FBaUIsU0FBVSxDQUFDO1FBRXJDLElBQUksVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNuQyxPQUFPO1lBQ1AsSUFBSSxPQUFPLENBQWdCLE9BQU8sQ0FBQyxFQUFFO2dCQUNwQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxPQUFPLGlCQUFpQixDQUFDLENBQUM7U0FDdEQ7YUFDSTtZQUNKLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQjtJQUNGLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBZTtRQUN0QyxJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVE7WUFDNUIsT0FBTyxNQUFNLENBQUM7UUFFZixJQUFJLE1BQU0sWUFBWSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUs7WUFDMUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRXJCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRDtBQWpFRCxvQkFpRUMiLCJmaWxlIjoiVGVzdC5qcyIsInNvdXJjZVJvb3QiOiIuLlxcc3JjIn0=
@@ -2,5 +2,5 @@ export declare enum TestStage {
2
2
  NoStage = 0,
3
3
  Arrange = 1,
4
4
  Act = 2,
5
- Assert = 3,
5
+ Assert = 3
6
6
  }
package/lib/TestStage.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestStage = void 0;
3
4
  var TestStage;
4
5
  (function (TestStage) {
5
6
  TestStage[TestStage["NoStage"] = 0] = "NoStage";
@@ -8,4 +9,4 @@ var TestStage;
8
9
  TestStage[TestStage["Assert"] = 3] = "Assert";
9
10
  })(TestStage = exports.TestStage || (exports.TestStage = {}));
10
11
 
11
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlc3RTdGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLElBQVksU0FLWDtBQUxELFdBQVksU0FBUztJQUNqQiwrQ0FBTyxDQUFBO0lBQ1AsK0NBQU8sQ0FBQTtJQUNQLHVDQUFHLENBQUE7SUFDSCw2Q0FBTSxDQUFBO0FBQ1YsQ0FBQyxFQUxXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBS3BCIiwiZmlsZSI6IlRlc3RTdGFnZS5qcyIsInNvdXJjZVJvb3QiOiIuLlxcc3JjIn0=
12
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlc3RTdGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDakIsK0NBQU8sQ0FBQTtJQUNQLCtDQUFPLENBQUE7SUFDUCx1Q0FBRyxDQUFBO0lBQ0gsNkNBQU0sQ0FBQTtBQUNWLENBQUMsRUFMVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUtwQiIsImZpbGUiOiJUZXN0U3RhZ2UuanMiLCJzb3VyY2VSb290IjoiLi5cXHNyYyJ9
@@ -0,0 +1,2 @@
1
+ import { FunctionCodeRange } from "./Discover";
2
+ export declare function getFunctionCodeRange(func: Function, definingFunc: Function): FunctionCodeRange;
@@ -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;