ExternalCompileRunner works with submodules

If there is a test.json in the directory, it expects to find a
submodule in the directory. The submodule should have the same name as
the directory itself. test.json contains a list of global types that
need to be available, or the empty list if none.
This commit is contained in:
Nathan Shively-Sanders 2017-11-10 13:50:18 -08:00
parent 9d56f7b7c1
commit d66e94d09e
4 changed files with 31 additions and 3 deletions

6
.gitmodules vendored Normal file
View file

@ -0,0 +1,6 @@
[submodule "tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter"]
path = tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter
url = https://github.com/Microsoft/TypeScript-React-Starter
[submodule "tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter"]
path = tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter
url = https://github.com/Microsoft/TypeScript-Node-Starter.git

View file

@ -9,6 +9,10 @@ interface ExecResult {
status: number;
}
interface UserConfig {
types: string[];
}
abstract class ExternalCompileRunnerBase extends RunnerBase {
abstract testDir: string;
abstract report(result: ExecResult, cwd: string): string;
@ -33,18 +37,34 @@ abstract class ExternalCompileRunnerBase extends RunnerBase {
const cp = require("child_process");
it("should build successfully", () => {
const cwd = path.join(__dirname, "../../", this.testDir, directoryName);
let cwd = path.join(__dirname, "../../", this.testDir, directoryName);
const timeout = 600000; // 600s = 10 minutes
const stdio = isWorker ? "pipe" : "inherit";
let types: string[];
if (fs.existsSync(path.join(cwd, "test.json"))) {
const update = cp.spawnSync('git', ["submodule", "update", "--remote"], { cwd, timeout, shell: true, stdio })
if (update.status !== 0) throw new Error(`git submodule update for ${directoryName} failed!`);
const config = JSON.parse(fs.readFileSync(path.join(cwd, "test.json"), { encoding: "utf8" })) as UserConfig;
ts.Debug.assert(!!config.types, "Git is the only reason for using test.json right now");
types = config.types;
cwd = path.join(cwd, directoryName);
}
if (fs.existsSync(path.join(cwd, "package.json"))) {
if (fs.existsSync(path.join(cwd, "package-lock.json"))) {
fs.unlinkSync(path.join(cwd, "package-lock.json"));
}
const stdio = isWorker ? "pipe" : "inherit";
const install = cp.spawnSync(`npm`, ["i"], { cwd, timeout, shell: true, stdio });
if (install.status !== 0) throw new Error(`NPM Install for ${directoryName} failed!`);
}
const args = [path.join(__dirname, "tsc.js")];
if (types) {
args.push("--types", types.join(","));
}
args.push("--noEmit");
Harness.Baseline.runBaseline(`${this.kind()}/${directoryName}.log`, () => {
return this.report(cp.spawnSync(`node`, [path.join(__dirname, "tsc.js")], { cwd, timeout, shell: true }), cwd);
return this.report(cp.spawnSync(`node`, args, { cwd, timeout, shell: true }), cwd);
});
});
});

@ -0,0 +1 @@
Subproject commit ed149eb0c787b1195a95b44105822c64bb6eb636

@ -0,0 +1 @@
Subproject commit 96fb6237a9dda8d17059eea7fa7c22dd7db82c97