Skip to content

Commit 594ac01

Browse files
authored
Merge pull request #19815 from Microsoft/add-definitely-typed-runner
Add DefinitelyTyped runner
2 parents 90f87ef + bb79308 commit 594ac01

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+83
-269
lines changed

Jakefile.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ var harnessCoreSources = [
105105
"projectsRunner.ts",
106106
"loggedIO.ts",
107107
"rwcRunner.ts",
108-
"userRunner.ts",
108+
"externalCompileRunner.ts",
109109
"test262Runner.ts",
110110
"./parallel/shared.ts",
111111
"./parallel/host.ts",

src/harness/externalCompileRunner.ts

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/// <reference path="harness.ts"/>
2+
/// <reference path="runnerbase.ts" />
3+
abstract class ExternalCompileRunnerBase extends RunnerBase {
4+
abstract testDir: string;
5+
public enumerateTestFiles() {
6+
return Harness.IO.getDirectories(this.testDir);
7+
}
8+
/** Setup the runner's tests so that they are ready to be executed by the harness
9+
* The first test should be a describe/it block that sets up the harness's compiler instance appropriately
10+
*/
11+
public initializeTests(): void {
12+
// Read in and evaluate the test list
13+
const testList = this.tests && this.tests.length ? this.tests : this.enumerateTestFiles();
14+
15+
describe(`${this.kind()} code samples`, () => {
16+
for (const test of testList) {
17+
this.runTest(test);
18+
}
19+
});
20+
}
21+
private runTest(directoryName: string) {
22+
describe(directoryName, () => {
23+
const cp = require("child_process");
24+
const path = require("path");
25+
const fs = require("fs");
26+
27+
it("should build successfully", () => {
28+
const cwd = path.join(__dirname, "../../", this.testDir, directoryName);
29+
const timeout = 600000; // 600s = 10 minutes
30+
if (fs.existsSync(path.join(cwd, "package.json"))) {
31+
if (fs.existsSync(path.join(cwd, "package-lock.json"))) {
32+
fs.unlinkSync(path.join(cwd, "package-lock.json"));
33+
}
34+
const stdio = isWorker ? "pipe" : "inherit";
35+
const install = cp.spawnSync(`npm`, ["i"], { cwd, timeout, shell: true, stdio });
36+
if (install.status !== 0) throw new Error(`NPM Install for ${directoryName} failed!`);
37+
}
38+
Harness.Baseline.runBaseline(`${this.kind()}/${directoryName}.log`, () => {
39+
const result = cp.spawnSync(`node`, [path.join(__dirname, "tsc.js")], { cwd, timeout, shell: true });
40+
// tslint:disable-next-line:no-null-keyword
41+
return result.status === 0 && !result.stdout.length && !result.stderr.length ? null : `Exit Code: ${result.status}
42+
Standard output:
43+
${result.stdout.toString().replace(/\r\n/g, "\n")}
44+
45+
46+
Standard error:
47+
${result.stderr.toString().replace(/\r\n/g, "\n")}`;
48+
});
49+
});
50+
});
51+
}
52+
}
53+
54+
class UserCodeRunner extends ExternalCompileRunnerBase {
55+
public readonly testDir = "tests/cases/user/";
56+
public kind(): TestRunnerKind {
57+
return "user";
58+
}
59+
}
60+
61+
class DefinitelyTypedRunner extends ExternalCompileRunnerBase {
62+
public readonly testDir = "../DefinitelyTyped/types/";
63+
public workingDirectory = this.testDir;
64+
public kind(): TestRunnerKind {
65+
return "dt";
66+
}
67+
}

src/harness/parallel/host.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,18 @@ namespace Harness.Parallel.Host {
7777
console.log("Discovering runner-based tests...");
7878
const discoverStart = +(new Date());
7979
const { statSync }: { statSync(path: string): { size: number }; } = require("fs");
80+
const path: { join: (...args: string[]) => string } = require("path");
8081
for (const runner of runners) {
81-
const files = runner.enumerateTestFiles();
82-
for (const file of files) {
82+
for (const file of runner.enumerateTestFiles()) {
8383
let size: number;
8484
if (!perfData) {
8585
try {
86-
size = statSync(file).size;
86+
size = statSync(path.join(runner.workingDirectory, file)).size;
8787
}
8888
catch {
8989
// May be a directory
9090
try {
91-
size = Harness.IO.listFiles(file, /.*/g, { recursive: true }).reduce((acc, elem) => acc + statSync(elem).size, 0);
91+
size = Harness.IO.listFiles(path.join(runner.workingDirectory, file), /.*/g, { recursive: true }).reduce((acc, elem) => acc + statSync(elem).size, 0);
9292
}
9393
catch {
9494
// Unknown test kind, just return 0 and let the historical analysis take over after one run

src/harness/runner.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
/// <reference path="fourslashRunner.ts" />
1919
/// <reference path="projectsRunner.ts" />
2020
/// <reference path="rwcRunner.ts" />
21-
/// <reference path="userRunner.ts" />
21+
/// <reference path="externalCompileRunner.ts" />
2222
/// <reference path="harness.ts" />
2323
/// <reference path="./parallel/shared.ts" />
2424

@@ -62,6 +62,8 @@ function createRunner(kind: TestRunnerKind): RunnerBase {
6262
return new Test262BaselineRunner();
6363
case "user":
6464
return new UserCodeRunner();
65+
case "dt":
66+
return new DefinitelyTypedRunner();
6567
}
6668
ts.Debug.fail(`Unknown runner kind ${kind}`);
6769
}
@@ -183,6 +185,9 @@ function handleTestConfig() {
183185
case "user":
184186
runners.push(new UserCodeRunner());
185187
break;
188+
case "dt":
189+
runners.push(new DefinitelyTypedRunner());
190+
break;
186191
}
187192
}
188193
}

src/harness/runnerbase.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/// <reference path="harness.ts" />
22

33

4-
type TestRunnerKind = CompilerTestKind | FourslashTestKind | "project" | "rwc" | "test262" | "user";
4+
type TestRunnerKind = CompilerTestKind | FourslashTestKind | "project" | "rwc" | "test262" | "user" | "dt";
55
type CompilerTestKind = "conformance" | "compiler";
66
type FourslashTestKind = "fourslash" | "fourslash-shims" | "fourslash-shims-pp" | "fourslash-server";
77

@@ -22,6 +22,9 @@ abstract class RunnerBase {
2222

2323
abstract enumerateTestFiles(): string[];
2424

25+
/** The working directory where tests are found. Needed for batch testing where the input path will differ from the output path inside baselines */
26+
public workingDirectory = "";
27+
2528
/** Setup the runner's tests so that they are ready to be executed by the harness
2629
* The first test should be a describe/it block that sets up the harness's compiler instance appropriately
2730
*/

src/harness/tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
"projectsRunner.ts",
8484
"loggedIO.ts",
8585
"rwcRunner.ts",
86-
"userRunner.ts",
86+
"externalCompileRunner.ts",
8787
"test262Runner.ts",
8888
"./parallel/shared.ts",
8989
"./parallel/host.ts",

src/harness/userRunner.ts

-51
This file was deleted.

tests/baselines/reference/user/ajv.log

-6
This file was deleted.

tests/baselines/reference/user/antd.log

-6
This file was deleted.

tests/baselines/reference/user/axios.log

-6
This file was deleted.

tests/baselines/reference/user/bignumber.js.log

-6
This file was deleted.

tests/baselines/reference/user/discord.js.log

-6
This file was deleted.

tests/baselines/reference/user/eventemitter2.log

-6
This file was deleted.

tests/baselines/reference/user/eventemitter3.log

-6
This file was deleted.

tests/baselines/reference/user/firebase.log

-6
This file was deleted.

tests/baselines/reference/user/github.log

-6
This file was deleted.

tests/baselines/reference/user/immutable.log

-6
This file was deleted.

tests/baselines/reference/user/isobject.log

-6
This file was deleted.

tests/baselines/reference/user/jimp.log

-6
This file was deleted.

tests/baselines/reference/user/jsonschema.log

-6
This file was deleted.

tests/baselines/reference/user/keycode.log

-6
This file was deleted.

tests/baselines/reference/user/localforage.log

-6
This file was deleted.

tests/baselines/reference/user/log4js.log

-6
This file was deleted.

tests/baselines/reference/user/mobx.log

-6
This file was deleted.

tests/baselines/reference/user/moment.log

-6
This file was deleted.

tests/baselines/reference/user/mqtt.log

-6
This file was deleted.

tests/baselines/reference/user/parse5.log

-6
This file was deleted.

tests/baselines/reference/user/portfinder.log

-6
This file was deleted.

tests/baselines/reference/user/postcss.log

-6
This file was deleted.

tests/baselines/reference/user/protobufjs.log

-6
This file was deleted.

tests/baselines/reference/user/redux.log

-6
This file was deleted.

tests/baselines/reference/user/reselect.log

-6
This file was deleted.

tests/baselines/reference/user/should.log

-6
This file was deleted.

tests/baselines/reference/user/sift.log

-6
This file was deleted.

0 commit comments

Comments
 (0)