From 5e6a83a6bd8dd6942378ce0550c44b117ec978a1 Mon Sep 17 00:00:00 2001 From: John Kane Date: Wed, 15 Jan 2025 16:25:32 +0000 Subject: [PATCH] chore: add tsconfig and build for e2e This was previously implicit and depended on a the root build. This clashes with my attempts to update the typescript version, so I am scoping the e2e tests to their own build. --- package.json | 4 ++-- test/e2e/.eslintrc.js | 21 +++++++++++++++++++ test/e2e/.gitignore | 1 + test/e2e/package.json | 5 ++++- test/e2e/{ => src}/client.ts | 0 test/e2e/{ => src}/common/assertLspCommand.ts | 0 test/e2e/{ => src}/common/types.ts | 0 test/e2e/{ => src}/helpers/assertions.ts | 0 test/e2e/{ => src}/helpers/commands.ts | 0 test/e2e/{ => src}/helpers/editor.ts | 0 test/e2e/{ => src}/helpers/getTestContract.ts | 0 test/e2e/{ => src}/helpers/joinLines.ts | 0 test/e2e/{ => src}/helpers/sleep.ts | 0 test/e2e/{ => src}/helpers/workspace.ts | 0 test/e2e/{ => src}/index.ts | 0 test/{ => e2e/src}/runTests.ts | 18 ++++++++++++---- .../{ => src}/tests/commands/clean.test.ts | 8 ++++++- .../{ => src}/tests/commands/flatten.test.ts | 0 .../onEnterRules.test.ts | 0 test/e2e/tsconfig.json | 13 ++++++++++++ 20 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 test/e2e/.eslintrc.js create mode 100644 test/e2e/.gitignore rename test/e2e/{ => src}/client.ts (100%) rename test/e2e/{ => src}/common/assertLspCommand.ts (100%) rename test/e2e/{ => src}/common/types.ts (100%) rename test/e2e/{ => src}/helpers/assertions.ts (100%) rename test/e2e/{ => src}/helpers/commands.ts (100%) rename test/e2e/{ => src}/helpers/editor.ts (100%) rename test/e2e/{ => src}/helpers/getTestContract.ts (100%) rename test/e2e/{ => src}/helpers/joinLines.ts (100%) rename test/e2e/{ => src}/helpers/sleep.ts (100%) rename test/e2e/{ => src}/helpers/workspace.ts (100%) rename test/e2e/{ => src}/index.ts (100%) rename test/{ => e2e/src}/runTests.ts (71%) rename test/e2e/{ => src}/tests/commands/clean.test.ts (90%) rename test/e2e/{ => src}/tests/commands/flatten.test.ts (100%) rename test/e2e/{ => src}/tests/language-configuration/onEnterRules.test.ts (100%) create mode 100644 test/e2e/tsconfig.json diff --git a/package.json b/package.json index 335d96a2..cfa99e25 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,11 @@ "url": "https://github.com/NomicFoundation/hardhat-vscode/issues" }, "scripts": { - "build": "tsc -b ./client/tsconfig.json && tsc -b ./server/tsconfig.build.json && tsc -b ./coc/tsconfig.json && tsc -b", + "build": "tsc -b ./client/tsconfig.json && tsc -b ./server/tsconfig.build.json && tsc -b ./coc/tsconfig.json", "watch": "concurrently -n client,server \"tsc -b -w ./client/tsconfig.json\" \"tsc -b -w ./server/tsconfig.build.json\"", "test:unit": "npm -w server run test", "test:protocol": "npm -w test/protocol run test", - "test:e2e": "npm run build && node ./out/test/runTests.js", + "test:e2e": "npm -w test/e2e run test", "test": "npm run test:unit && npm run test:protocol && npm run test:e2e", "test:coverage": "npm -w server run test:coverage", "test:codecov": "npm -w server run test:codecov", diff --git a/test/e2e/.eslintrc.js b/test/e2e/.eslintrc.js new file mode 100644 index 00000000..e2060254 --- /dev/null +++ b/test/e2e/.eslintrc.js @@ -0,0 +1,21 @@ +/** @type {import('eslint').Linter.Config} */ +module.exports = { + root: true, + extends: [`../../.eslintrc.js`], + parserOptions: { + project: `${__dirname}/tsconfig.json`, + sourceType: "module", + }, + overrides: [ + { + files: ["**/*.ts"], + rules: { + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-empty-function": "warn", + "@typescript-eslint/no-non-null-assertion": "off", + "no-empty": "warn", + }, + }, + ], +}; diff --git a/test/e2e/.gitignore b/test/e2e/.gitignore new file mode 100644 index 00000000..1fcb1529 --- /dev/null +++ b/test/e2e/.gitignore @@ -0,0 +1 @@ +out diff --git a/test/e2e/package.json b/test/e2e/package.json index dfba3368..3d4e05b3 100644 --- a/test/e2e/package.json +++ b/test/e2e/package.json @@ -3,6 +3,9 @@ "version": "1.0.0", "private": true, "scripts": { - "postinstall": "cd ./projects/main && npm install" + "postinstall": "cd ./projects/main && npm install", + "pretest": "tsc -b ./tsconfig.json", + "test": "node ./out/src/runTests.js", + "clean": "rimraf out .nyc_output coverage *.tsbuildinfo" } } diff --git a/test/e2e/client.ts b/test/e2e/src/client.ts similarity index 100% rename from test/e2e/client.ts rename to test/e2e/src/client.ts diff --git a/test/e2e/common/assertLspCommand.ts b/test/e2e/src/common/assertLspCommand.ts similarity index 100% rename from test/e2e/common/assertLspCommand.ts rename to test/e2e/src/common/assertLspCommand.ts diff --git a/test/e2e/common/types.ts b/test/e2e/src/common/types.ts similarity index 100% rename from test/e2e/common/types.ts rename to test/e2e/src/common/types.ts diff --git a/test/e2e/helpers/assertions.ts b/test/e2e/src/helpers/assertions.ts similarity index 100% rename from test/e2e/helpers/assertions.ts rename to test/e2e/src/helpers/assertions.ts diff --git a/test/e2e/helpers/commands.ts b/test/e2e/src/helpers/commands.ts similarity index 100% rename from test/e2e/helpers/commands.ts rename to test/e2e/src/helpers/commands.ts diff --git a/test/e2e/helpers/editor.ts b/test/e2e/src/helpers/editor.ts similarity index 100% rename from test/e2e/helpers/editor.ts rename to test/e2e/src/helpers/editor.ts diff --git a/test/e2e/helpers/getTestContract.ts b/test/e2e/src/helpers/getTestContract.ts similarity index 100% rename from test/e2e/helpers/getTestContract.ts rename to test/e2e/src/helpers/getTestContract.ts diff --git a/test/e2e/helpers/joinLines.ts b/test/e2e/src/helpers/joinLines.ts similarity index 100% rename from test/e2e/helpers/joinLines.ts rename to test/e2e/src/helpers/joinLines.ts diff --git a/test/e2e/helpers/sleep.ts b/test/e2e/src/helpers/sleep.ts similarity index 100% rename from test/e2e/helpers/sleep.ts rename to test/e2e/src/helpers/sleep.ts diff --git a/test/e2e/helpers/workspace.ts b/test/e2e/src/helpers/workspace.ts similarity index 100% rename from test/e2e/helpers/workspace.ts rename to test/e2e/src/helpers/workspace.ts diff --git a/test/e2e/index.ts b/test/e2e/src/index.ts similarity index 100% rename from test/e2e/index.ts rename to test/e2e/src/index.ts diff --git a/test/runTests.ts b/test/e2e/src/runTests.ts similarity index 71% rename from test/runTests.ts rename to test/e2e/src/runTests.ts index 94a2fdfc..0dad05f8 100644 --- a/test/runTests.ts +++ b/test/e2e/src/runTests.ts @@ -1,7 +1,7 @@ import * as path from "path"; import { runTests } from "@vscode/test-electron"; -(async () => { +const main = async () => { try { // The folder containing the Extension Manifest package.json // Passed to `--extensionDevelopmentPath` @@ -9,14 +9,18 @@ import { runTests } from "@vscode/test-electron"; __dirname, "..", "..", + "..", + "..", "client" ); // The path to test runner // Passed to --extensionTestsPath - const extensionTestsPath = path.resolve(__dirname, "e2e", "index"); + const extensionTestsPath = path.resolve(__dirname, "index"); - const folder = path.resolve(__dirname, "..", "..", "test", "e2e"); + const folder = path.resolve(__dirname, "..", "..", "..", "e2e"); + + console.log("---------------> folder", folder); // Download VS Code, unzip it and run the e2e test await runTests({ @@ -39,4 +43,10 @@ import { runTests } from "@vscode/test-electron"; console.error("Failed to run tests, err:", err); process.exitCode = 1; } -})(); +}; + +main().catch((err) => { + // eslint-disable-next-line no-console + console.error("Failed to run tests, err:", err); + process.exitCode = 1; +}); diff --git a/test/e2e/tests/commands/clean.test.ts b/test/e2e/src/tests/commands/clean.test.ts similarity index 90% rename from test/e2e/tests/commands/clean.test.ts rename to test/e2e/src/tests/commands/clean.test.ts index 62835c4f..007e747a 100644 --- a/test/e2e/tests/commands/clean.test.ts +++ b/test/e2e/src/tests/commands/clean.test.ts @@ -12,9 +12,11 @@ suite("task - clean", function () { // Create an artifacts folder to be cleaned up const artifactsPath = path.join(getRootPath(), "projects/main/artifacts"); + if (!existsSync(artifactsPath)) { mkdirSync(artifactsPath); } + assert.ok(existsSync(artifactsPath)); // Run clean task @@ -22,12 +24,16 @@ suite("task - clean", function () { type: "hardhat", task: "clean", }); + await waitForUI(); // Wait for the task to finish await new Promise((resolve) => vscode.tasks.onDidEndTask(resolve)); // Assert the artifacts were removed - assert.ok(!existsSync(artifactsPath)); + assert.ok( + !existsSync(artifactsPath), + `Artifacts folder was not removed: ${artifactsPath}` + ); }); }); diff --git a/test/e2e/tests/commands/flatten.test.ts b/test/e2e/src/tests/commands/flatten.test.ts similarity index 100% rename from test/e2e/tests/commands/flatten.test.ts rename to test/e2e/src/tests/commands/flatten.test.ts diff --git a/test/e2e/tests/language-configuration/onEnterRules.test.ts b/test/e2e/src/tests/language-configuration/onEnterRules.test.ts similarity index 100% rename from test/e2e/tests/language-configuration/onEnterRules.test.ts rename to test/e2e/src/tests/language-configuration/onEnterRules.test.ts diff --git a/test/e2e/tsconfig.json b/test/e2e/tsconfig.json new file mode 100644 index 00000000..f8052d89 --- /dev/null +++ b/test/e2e/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "module": "commonjs" /* Specify what module code is generated. */, + "resolveJsonModule": true /* Enable importing .json files. */, + "outDir": "./out" /* Specify an output folder for all emitted files. */, + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + "strict": true /* Enable all strict type-checking options. */, + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": ["src", "projects/main"] +}