Skip to content

Commit 61df13a

Browse files
Merge pull request #165 from TCourtneyOwen/remove-test-infra-during-project-generation
Remove test infra during project generation
2 parents 10648e1 + cb881af commit 61df13a

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

convertToSingleHost.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
const fs = require("fs");
2+
const path = require("path");
3+
const util = require("util");
4+
const testPackages = ["@types/mocha", "@types/node", "current-processes", "mocha", "office-addin-test-helpers",
5+
"office-addin-test-server", "ts-node"];
6+
const readFileAsync = util.promisify(fs.readFile);
7+
const unlinkFileAsync = util.promisify(fs.unlink);
8+
const writeFileAsync = util.promisify(fs.writeFile);
9+
10+
async function removeTestInfraStructure() {
11+
deleteFolder(path.resolve(`${process.cwd()}/test`));
12+
await updatePackageJsonFile();
13+
await updateLaunchJsonFile();
14+
// delete this script
15+
await unlinkFileAsync("./convertToSingleHost.js");
16+
}
17+
18+
async function updatePackageJsonFile() {
19+
// update package.json to reflect selected host
20+
const packageJson = `./package.json`;
21+
const data = await readFileAsync(packageJson, "utf8");
22+
let content = JSON.parse(data);
23+
24+
// remove scripts that are unrelated to the selected host
25+
Object.keys(content.scripts).forEach(function (key) {
26+
if (key === "convert-to-single-host" || key === "test") {
27+
delete content.scripts[key];
28+
}
29+
});
30+
31+
// remove test-related packages
32+
Object.keys(content.devDependencies).forEach(function (key) {
33+
if (testPackages.includes(key)) {
34+
delete content.devDependencies[key]
35+
}
36+
});
37+
38+
// write updated json to file
39+
await writeFileAsync(packageJson, JSON.stringify(content, null, 2));
40+
}
41+
42+
async function updateLaunchJsonFile() {
43+
// remove 'Debug Tests' configuration from launch.json
44+
const launchJson = `.vscode/launch.json`;
45+
const launchJsonContent = await readFileAsync(launchJson, "utf8");
46+
const regex = /"configurations": \[\r?\n(.*{(.*\r?\n)*?.*"name": "Debug Tests",\r?\n(.*\r?\n)*?.*},)/gm;
47+
const updatedContent = launchJsonContent.replace(regex, `"configurations": [`);
48+
await writeFileAsync(launchJson, updatedContent);
49+
}
50+
51+
function deleteFolder(folder) {
52+
try {
53+
if (fs.existsSync(folder)) {
54+
fs.readdirSync(folder).forEach(function (file, index) {
55+
const curPath = `${folder}/${file}`;
56+
57+
if (fs.lstatSync(curPath).isDirectory()) {
58+
deleteFolder(curPath);
59+
}
60+
else {
61+
fs.unlinkSync(curPath);
62+
}
63+
});
64+
fs.rmdirSync(folder);
65+
}
66+
} catch (err) {
67+
throw new Error(`Unable to delete folder "${folder}".\n${err}`);
68+
}
69+
}
70+
71+
/**
72+
* Remove test infrastructure from project.
73+
*/
74+
removeTestInfraStructure().catch(err => {
75+
console.error(`Error: ${err instanceof Error ? err.message : err}`);
76+
process.exitCode = 1;
77+
});

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"build": "webpack -p --mode production --https false",
1717
"build:dev": "webpack --mode development --https false",
1818
"build-dev": "webpack --mode development --https false && echo . && echo . && echo . && echo Please use 'build:dev' instead of 'build-dev'.",
19+
"convert-to-single-host": "node convertToSingleHost.js",
1920
"dev-server": "webpack-dev-server --mode development",
2021
"sideload": "office-toolbox sideload -m manifest.xml -a excel",
2122
"sideload:excel": "office-toolbox sideload -m manifest.xml -a excel",

0 commit comments

Comments
 (0)