From 06dab2c3dfb8eafc7f395c1a891767d60ad64d8d Mon Sep 17 00:00:00 2001 From: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com> Date: Tue, 24 Dec 2024 18:11:11 -0800 Subject: [PATCH] Use should for better test readability --- package-lock.json | 73 +++++++++++++++++++++++++++++++++++- package.json | 4 +- src/test/extension.test.ts | 21 +++++------ src/utils/path.test.ts | 77 ++++++++++++++++++++------------------ tsconfig.test.json | 3 +- 5 files changed, 126 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed692dd4b4..a80a79fbe1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "claude-dev", - "version": "2.2.2", + "version": "3.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "claude-dev", - "version": "2.2.2", + "version": "3.0.4", "license": "Apache-2.0", "dependencies": { "@anthropic-ai/bedrock-sdk": "^0.10.2", @@ -48,6 +48,7 @@ "@types/diff": "^5.2.1", "@types/mocha": "^10.0.7", "@types/node": "20.x", + "@types/should": "^11.2.0", "@types/vscode": "^1.84.0", "@typescript-eslint/eslint-plugin": "^7.14.1", "@typescript-eslint/parser": "^7.11.0", @@ -57,6 +58,7 @@ "eslint": "^8.57.0", "npm-run-all": "^4.1.5", "prettier": "^3.3.3", + "should": "^13.2.3", "typescript": "^5.4.5" }, "engines": { @@ -4589,6 +4591,13 @@ "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", "license": "MIT" }, + "node_modules/@types/should": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@types/should/-/should-11.2.0.tgz", + "integrity": "sha512-+J77XoXmKIXcLK5fWS5B3j31F4wfdclzk+lRxFcKfXTHzZfd153u8w96W30dQBIT4kwKobjvYa0kIb0BWJX21Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/turndown": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@types/turndown/-/turndown-5.0.5.tgz", @@ -10365,6 +10374,66 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true, + "license": "MIT" + }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", diff --git a/package.json b/package.json index bd19359929..630f3d274a 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "watch:esbuild": "node esbuild.js --watch", "watch:tsc": "tsc --noEmit --watch --project tsconfig.json", "package": "npm run build:webview && npm run check-types && npm run lint && node esbuild.js --production", - "compile-tests": "tsc -p ./tsconfig.test.json --outDir out", + "compile-tests": "tsc -p ./tsconfig.test.json --outDir out", "watch-tests": "tsc -p . -w --outDir out", "pretest": "npm run compile-tests && npm run compile && npm run lint", "check-types": "tsc --noEmit", @@ -151,6 +151,7 @@ "@types/diff": "^5.2.1", "@types/mocha": "^10.0.7", "@types/node": "20.x", + "@types/should": "^11.2.0", "@types/vscode": "^1.84.0", "@typescript-eslint/eslint-plugin": "^7.14.1", "@typescript-eslint/parser": "^7.11.0", @@ -160,6 +161,7 @@ "eslint": "^8.57.0", "npm-run-all": "^4.1.5", "prettier": "^3.3.3", + "should": "^13.2.3", "typescript": "^5.4.5" }, "dependencies": { diff --git a/src/test/extension.test.ts b/src/test/extension.test.ts index c4381abd33..440a353ec6 100644 --- a/src/test/extension.test.ts +++ b/src/test/extension.test.ts @@ -1,28 +1,25 @@ -import * as assert from "assert" - -// You can import and use all API from the 'vscode' module -// as well as import your extension to test it -import * as vscode from "vscode" -// import * as myExtension from '../../extension'; - import { readFile } from "fs/promises" +import { describe, it, after } from "mocha" import path from "path" +import "should" +import * as vscode from "vscode" const packagePath = path.join(__dirname, "..", "..", "..", "package.json") -suite("Extension Test Suite", () => { - suiteTeardown(() => { +describe("Cline Extension", () => { + after(() => { vscode.window.showInformationMessage("All tests done!") }) - test("Sanity check", async () => { + it("should verify extension ID matches package.json", async () => { const packageJSON = JSON.parse(await readFile(packagePath, "utf8")) const id = packageJSON.publisher + "." + packageJSON.name const clineExtensionApi = vscode.extensions.getExtension(id) - assert.equal(clineExtensionApi?.id, id) + + clineExtensionApi?.id.should.equal(id) }) - test("Ensure that the extension is correctly loaded by running a command", async () => { + it("should successfully execute the plus button command", async () => { await new Promise((resolve) => setTimeout(resolve, 400)) await vscode.commands.executeCommand("cline.plusButtonClicked") }) diff --git a/src/utils/path.test.ts b/src/utils/path.test.ts index 7fd3ada5ba..8efa6e59e2 100644 --- a/src/utils/path.test.ts +++ b/src/utils/path.test.ts @@ -1,48 +1,53 @@ -import * as assert from "assert" -import * as path from "path" +import { describe, it } from "mocha" import * as os from "os" +import * as path from "path" +import "should" import { arePathsEqual, getReadablePath } from "./path" -suite("Path Utils", () => { - test("arePathsEqual handles undefined paths", () => { - assert.strictEqual(arePathsEqual(undefined, undefined), true) - assert.strictEqual(arePathsEqual("foo", undefined), false) - assert.strictEqual(arePathsEqual(undefined, "foo"), false) - }) +describe("Path Utilities", () => { + describe("arePathsEqual", () => { + it("should handle undefined paths", () => { + arePathsEqual(undefined, undefined).should.be.true() + arePathsEqual("foo", undefined).should.be.false() + arePathsEqual(undefined, "foo").should.be.false() + }) - test("arePathsEqual handles case sensitivity based on platform", () => { - if (process.platform === "win32") { - assert.strictEqual(arePathsEqual("FOO/BAR", "foo/bar"), true) - } else { - assert.strictEqual(arePathsEqual("FOO/BAR", "foo/bar"), false) - } - }) + it("should handle case sensitivity based on platform", () => { + if (process.platform === "win32") { + arePathsEqual("FOO/BAR", "foo/bar").should.be.true() + } else { + arePathsEqual("FOO/BAR", "foo/bar").should.be.false() + } + }) - test("arePathsEqual handles normalized paths", () => { - assert.strictEqual(arePathsEqual("/tmp/./dir", "/tmp/../tmp/dir"), true) - assert.strictEqual(arePathsEqual("/tmp/./dir", "/tmp/../dir"), false) + it("should handle normalized paths", () => { + arePathsEqual("/tmp/./dir", "/tmp/../tmp/dir").should.be.true() + arePathsEqual("/tmp/./dir", "/tmp/../dir").should.be.false() + }) }) - test("getReadablePath handles desktop path", () => { - const desktop = path.join(os.homedir(), "Desktop") - const testPath = path.join(desktop, "test.txt") - assert.strictEqual(getReadablePath(desktop, "test.txt"), testPath.replace(/\\/g, "/")) - }) + describe("getReadablePath", () => { + it("should handle desktop path", () => { + const desktop = path.join(os.homedir(), "Desktop") + const testPath = path.join(desktop, "test.txt") + getReadablePath(desktop, "test.txt").should.equal(testPath.replace(/\\/g, "/")) + }) - test("getReadablePath shows relative paths within cwd", () => { - const cwd = "/home/user/project" - const filePath = "/home/user/project/src/file.txt" - assert.strictEqual(getReadablePath(cwd, filePath), "src/file.txt") - }) + it("should show relative paths within cwd", () => { + const cwd = "/home/user/project" + const filePath = "/home/user/project/src/file.txt" + getReadablePath(cwd, filePath).should.equal("src/file.txt") + }) - test("getReadablePath shows basename when path equals cwd", () => { - const cwd = "/home/user/project" - assert.strictEqual(getReadablePath(cwd, cwd), "project") - }) + it("should show basename when path equals cwd", () => { + const cwd = "/home/user/project" + getReadablePath(cwd, cwd).should.equal("project") + }) - test("getReadablePath shows absolute path when outside cwd", () => { - const cwd = "/home/user/project" - const filePath = "/home/user/other/file.txt" - assert.strictEqual(getReadablePath(cwd, filePath), filePath) + it("should show absolute path when outside cwd", () => { + const cwd = "/home/user/project" + const filePath = "/home/user/other/file.txt" + getReadablePath(cwd, filePath).should.equal(filePath) + }) }) }) diff --git a/tsconfig.test.json b/tsconfig.test.json index b0340129a8..3063d7b5f5 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -7,7 +7,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "module": "commonjs", - "moduleResolution": "node" + "moduleResolution": "node", + "types": ["node", "mocha", "vscode"] }, "include": ["src/**/*.test.ts"] }