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.
- package/lib/Discover.d.ts +25 -0
- package/lib/Discover.js +4 -0
- package/lib/OptionsDefinitions.d.ts +16 -0
- package/lib/OptionsDefinitions.js +61 -0
- package/lib/StackTrace.d.ts +1 -0
- package/lib/StackTrace.js +44 -0
- package/lib/Suite.d.ts +46 -0
- package/lib/Suite.js +113 -0
- package/lib/SuiteProvider.d.ts +9 -0
- package/lib/SuiteProvider.js +88 -0
- package/lib/Test.d.ts +10 -6
- package/lib/Test.js +24 -12
- package/lib/TestStage.d.ts +1 -1
- package/lib/TestStage.js +2 -1
- package/lib/code-position-resolution.d.ts +2 -0
- package/lib/code-position-resolution.js +50 -0
- package/lib/examples/dir-suite/@test-suite +0 -0
- package/lib/examples/dir-suite/child-dir-suite/@test-suite +0 -0
- package/lib/{exampleTestFile.test.d.ts → examples/dir-suite/child-dir-suite/childDirTests.test.d.ts} +0 -0
- package/lib/examples/dir-suite/child-dir-suite/childDirTests.test.js +9 -0
- package/lib/examples/dir-suite/inDirSuite.test.d.ts +2 -0
- package/lib/examples/dir-suite/inDirSuite.test.js +9 -0
- package/lib/examples/dir-suite/just-a-folder/inJustAFolderTest.d.ts +2 -0
- package/lib/examples/dir-suite/just-a-folder/inJustAFolderTest.js +9 -0
- package/lib/examples/exampleTestFile.test.d.ts +2 -0
- package/lib/examples/exampleTestFile.test.js +60 -0
- package/lib/help.d.ts +1 -1
- package/lib/help.js +2 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +118 -54
- package/lib/reporters/JsonReporter.d.ts +20 -0
- package/lib/reporters/JsonReporter.js +39 -0
- package/lib/reporters/Reporter.d.ts +4 -0
- package/lib/reporters/Reporter.js +4 -0
- package/lib/reporters/SpecReporter.d.ts +14 -0
- package/lib/reporters/SpecReporter.js +85 -0
- package/lib/reporters/index.d.ts +3 -0
- package/lib/reporters/index.js +17 -0
- package/lib/run-results/SuiteRunResult.d.ts +11 -0
- package/lib/run-results/SuiteRunResult.js +19 -0
- package/lib/run-results/TestRunResult.d.ts +9 -0
- package/lib/run-results/TestRunResult.js +15 -0
- package/lib/run-results/index.d.ts +2 -0
- package/lib/run-results/index.js +16 -0
- package/package.json +69 -64
- package/lib/OptionsDefinition.d.ts +0 -5
- package/lib/OptionsDefinition.js +0 -29
- package/lib/PerformancePolyfill.d.ts +0 -1
- package/lib/PerformancePolyfill.js +0 -16
- package/lib/SpecReporter.d.ts +0 -12
- package/lib/SpecReporter.js +0 -76
- package/lib/TestRunResult.d.ts +0 -9
- package/lib/TestRunResult.js +0 -13
- package/lib/TestSuiteClass.d.ts +0 -28
- package/lib/TestSuiteClass.js +0 -78
- 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
|
+
}
|
package/lib/Discover.js
ADDED
|
@@ -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 {
|
|
3
|
-
import {
|
|
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:
|
|
11
|
-
|
|
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
|
|
14
|
-
private
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
77
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0RBQTREO0FBQzVELDJDQUF3QztBQUd4QyxNQUFNLGVBQWU7SUFJcEI7UUFITyxVQUFLLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUM7UUFDMUIsWUFBTyxHQUFXLElBQUksQ0FBQztJQUc5QixDQUFDO0lBRU0sT0FBTztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQUM7SUFDaEMsQ0FBQztJQUVNLEdBQUc7UUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLHFCQUFTLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxxQkFBUyxDQUFDLE1BQU0sQ0FBQztJQUMvQixDQUFDO0NBQ0Q7QUFNRCxNQUFhLElBQUk7SUFDaEIsWUFBbUIsS0FBYSxFQUN4QixZQUF3RCxFQUN4RCxNQUFhLEVBQ2IsUUFBMkI7UUFIaEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBNEM7UUFDeEQsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLGFBQVEsR0FBUixRQUFRLENBQW1CO0lBRW5DLENBQUM7SUFFTSxRQUFRO1FBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBdUI7UUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFcEMsSUFBSTtZQUNILElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFM0MsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDckMsSUFBSSxPQUFPLENBQUMsS0FBSztvQkFDaEIsTUFBTSxNQUFNLENBQUM7O29CQUViLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksNkJBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdHO1FBQ0QsT0FBTyxNQUFNLEVBQUU7WUFDZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLDZCQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDMUg7SUFDRixDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQVc7UUFDNUIsT0FBTyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0lBQzFDLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCLEVBQUUsT0FBZTtRQUNoRSxJQUFJLEtBQUssR0FBaUIsU0FBVSxDQUFDO1FBRXJDLElBQUksVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNuQyxPQUFPO1lBQ1AsSUFBSSxPQUFPLENBQWdCLE9BQU8sQ0FBQyxFQUFFO2dCQUNwQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxPQUFPLGlCQUFpQixDQUFDLENBQUM7U0FDdEQ7YUFDSTtZQUNKLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQjtJQUNGLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBZTtRQUN0QyxJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVE7WUFDNUIsT0FBTyxNQUFNLENBQUM7UUFFZixJQUFJLE1BQU0sWUFBWSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUs7WUFDMUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRXJCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRDtBQWpFRCxvQkFpRUMiLCJmaWxlIjoiVGVzdC5qcyIsInNvdXJjZVJvb3QiOiIuLlxcc3JjIn0=
|
package/lib/TestStage.d.ts
CHANGED
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,
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlc3RTdGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDakIsK0NBQU8sQ0FBQTtJQUNQLCtDQUFPLENBQUE7SUFDUCx1Q0FBRyxDQUFBO0lBQ0gsNkNBQU0sQ0FBQTtBQUNWLENBQUMsRUFMVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUtwQiIsImZpbGUiOiJUZXN0U3RhZ2UuanMiLCJzb3VyY2VSb290IjoiLi5cXHNyYyJ9
|
|
@@ -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
|
|
File without changes
|
package/lib/{exampleTestFile.test.d.ts → examples/dir-suite/child-dir-suite/childDirTests.test.d.ts}
RENAMED
|
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
|