diff --git a/.gitignore b/.gitignore index d570088..28a78a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ node_modules/ - +*.vsix diff --git a/dist/extension.js b/dist/extension.js index ee6e4f6..0d2cb20 100644 --- a/dist/extension.js +++ b/dist/extension.js @@ -43301,7 +43301,39 @@ var serverProto = grpc.loadPackageDefinition(packageDefinition).server; var apiConsole = vscode.window.createOutputChannel("API Testing"); function activate(context) { console.log('Congratulations, your extension "api-testing" is now active!'); - let atest = vscode.commands.registerCommand("atest", function() { + const toggleLink = { + provideCodeLenses: function(document2, token) { + if (document2.lineAt(0).text !== "#!api-testing") { + return []; + } + const range = new vscode.Range(0, 1, 10, 10); + const lens = new vscode.CodeLens(range, { + command: "atest", + title: "Run Suite" + }); + let result = [lens]; + for (let i = 0; i < document2.lineCount; i++) { + let nameAnchor = document2.lineAt(i).text; + if (nameAnchor.startsWith("- name: ")) { + let name = nameAnchor.replace("- name: ", ""); + const range2 = new vscode.Range(i, 1, 10, 10); + const testcaseLens = new vscode.CodeLens(range2, { + command: "atest", + title: "Run Case", + arguments: [name] + }); + result.push(testcaseLens); + } + } + return result; + }, + resolveCodeLens: function(code, token) { + return code; + } + }; + const codeLens = vscode.languages.registerCodeLensProvider({ language: "yaml", scheme: "file" }, toggleLink); + context.subscriptions.push(codeLens); + let atest = vscode.commands.registerCommand("atest", function(args) { if (vscode.workspace.workspaceFolders !== void 0) { let filename = vscode.window.activeTextEditor.document.fileName; const addr = vscode.workspace.getConfiguration().get("api-testing.server"); @@ -43319,10 +43351,17 @@ function activate(context) { const data = fs.readFileSync(filename); task = data.toString(); } + let kind = "suite"; + let caseName = ""; + if (args && args.length > 0) { + kind = "testcaseInSuite"; + caseName = args; + } const client = new serverProto.Runner(addr, grpc.credentials.createInsecure()); client.run({ - kind: "suite", - data: task + kind, + data: task, + caseName }, function(err, response) { if (err !== void 0 && err !== null) { apiConsole.appendLine(err + " with " + addr); diff --git a/dist/server.proto b/dist/server.proto index 1c3b74e..43f8417 100644 --- a/dist/server.proto +++ b/dist/server.proto @@ -11,6 +11,7 @@ service Runner { message TestTask { string data = 1; string kind = 2; + string caseName = 3; } message HelloReply { diff --git a/extension.js b/extension.js index 4194b23..0e25593 100644 --- a/extension.js +++ b/extension.js @@ -28,7 +28,46 @@ const apiConsole = vscode.window.createOutputChannel("API Testing") function activate(context) { console.log('Congratulations, your extension "api-testing" is now active!'); - let atest = vscode.commands.registerCommand('atest', function() { + const toggleLink = { + provideCodeLenses: function (document, token) { + if (document.lineAt(0).text !== "#!api-testing") { + return [] + } + + // for the whole test suite + const range = new vscode.Range(0, 1, 10, 10) + const lens = new vscode.CodeLens(range, { + command: 'atest', + title: 'Run Suite' + }) + let result = [lens] + + // for test cases + for (let i = 0; i < document.lineCount; i++) { + let nameAnchor = document.lineAt(i).text + if (nameAnchor.startsWith('- name: ')) { + let name = nameAnchor.replace('- name: ', '') + const range = new vscode.Range(i, 1, 10, 10) + const testcaseLens = new vscode.CodeLens(range, { + command: 'atest', + title: 'Run Case', + arguments: [name] + }) + result.push(testcaseLens) + } + } + + return result + }, + resolveCodeLens: function (code,token) { + return code + } + } + + const codeLens = vscode.languages.registerCodeLensProvider({ language: 'yaml', scheme: 'file' }, toggleLink) + context.subscriptions.push(codeLens) + + let atest = vscode.commands.registerCommand('atest', function(args) { if(vscode.workspace.workspaceFolders !== undefined) { let filename = vscode.window.activeTextEditor.document.fileName const addr = vscode.workspace.getConfiguration().get('api-testing.server') @@ -49,10 +88,18 @@ function activate(context) { task = data.toString() } + let kind = "suite" + let caseName = "" + if (args && args.length > 0) { + kind = "testcaseInSuite" + caseName = args + } + const client = new serverProto.Runner(addr, grpc.credentials.createInsecure()); client.run({ - kind: "suite", - data: task + kind: kind, + data: task, + caseName: caseName } , function(err, response) { if (err !== undefined && err !== null) { apiConsole.appendLine(err + " with " + addr); diff --git a/package-lock.json b/package-lock.json index 19881fc..48ffcb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "yaml-readme", - "version": "0.0.9", + "name": "api-testing", + "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "yaml-readme", - "version": "0.0.9", + "name": "api-testing", + "version": "0.0.1", "dependencies": { "@grpc/grpc-js": "~1.0.5", "@grpc/proto-loader": "~0.5.4", diff --git a/package.json b/package.json index 5919482..3aa11e8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "api-testing", "displayName": "API Testing", "description": "API Testing", - "version": "0.0.1", + "version": "0.0.2", "repository": "https://github.com/linuxsuren/vscode-api-testing", "engines": { "vscode": "^1.68.0" diff --git a/server.proto b/server.proto index 1c3b74e..43f8417 100644 --- a/server.proto +++ b/server.proto @@ -11,6 +11,7 @@ service Runner { message TestTask { string data = 1; string kind = 2; + string caseName = 3; } message HelloReply {