diff options
author | George Fraser <george@fivetran.com> | 2018-09-16 11:26:19 -0700 |
---|---|---|
committer | George Fraser <george@fivetran.com> | 2018-09-16 11:26:19 -0700 |
commit | 2615850fb5ee84f176cb510ba34c9f8d6ee90d7d (patch) | |
tree | 8887d865aa178a7b9564a18fe74df0ba50f4dda6 | |
parent | e10debe4f63d79d437b097213d491d0c2ccffe98 (diff) | |
download | java-language-server-2615850fb5ee84f176cb510ba34c9f8d6ee90d7d.zip |
Configurable test command
-rw-r--r-- | .vscode/settings.json | 2 | ||||
-rw-r--r-- | lib/extension.ts | 31 | ||||
-rw-r--r-- | package.json | 20 | ||||
-rw-r--r-- | src/main/java/org/javacs/JavaCompilerService.java | 1 |
4 files changed, 43 insertions, 11 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json index 5638af6..54083e6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,5 +17,7 @@ "[java]": { "editor.formatOnSave": true }, + "java.testMethod": ["mvn", "test", "-Dtest=${class}#${method}"], + "java.testClass": ["mvn", "test", "-Dtest=${class}"], "java.trace.server": "messages" }
\ No newline at end of file diff --git a/lib/extension.ts b/lib/extension.ts index 2f49560..250e4c7 100644 --- a/lib/extension.ts +++ b/lib/extension.ts @@ -183,13 +183,34 @@ function runTest(sourceUri: string, enclosingClass: string, method: string): The enclosingClass: enclosingClass, method: method, } - // TODO make this configurable var shell; - if (method != null) - shell = new ShellExecution('mvn', ['test', `-Dtest=${enclosingClass}#${method}`]) - else - shell = new ShellExecution('mvn', ['test', `-Dtest=${enclosingClass}`]) + let config = workspace.getConfiguration('java') + if (method != null) { + let command = config.get('testMethod') as string[] + if (command.length == 0) { + window.showErrorMessage('Set "java.testMethod" in .vscode/settings.json') + shell = new ShellExecution('echo', ['Set "java.testMethod" in .vscode/settings.json, for example ["mvn", "test", "-Dtest=${class}#${method}"]']) + } else { + shell = templateCommand(command, enclosingClass, method) + } + } else { + let command = config.get('testClass') as string[] + if (command.length == 0) { + window.showErrorMessage('Set "java.testClass" in .vscode/settings.json') + shell = new ShellExecution('echo', ['Set "java.testClass" in .vscode/settings.json, for example ["mvn", "test", "-Dtest=${class}"]']) + } else { + shell = templateCommand(command, enclosingClass, method) + } + } let workspaceFolder = workspace.getWorkspaceFolder(Uri.parse(sourceUri)) let task = new Task(kind, workspaceFolder, 'Java Test', 'Java Language Server', shell) return tasks.executeTask(task) +} + +function templateCommand(command: string[], enclosingClass: string, method: string) { + for (var i = 0; i < command.length; i++) { + command[i] = command[i].replace('${class}', enclosingClass) + command[i] = command[i].replace('${method}', method) + } + return new ShellExecution(command[0], command.slice(1)) }
\ No newline at end of file diff --git a/package.json b/package.json index 2c01e95..491d419 100644 --- a/package.json +++ b/package.json @@ -52,12 +52,6 @@ "path": "./snippets/java.json" } ], - "jsonValidation": [ - { - "fileMatch": "javaconfig.json", - "url": "./lib/javaconfig.schema.json" - } - ], "configuration": { "title": "Java configuration", "properties": { @@ -76,6 +70,20 @@ }, "description": "External dependencies of the form groupId:artifactId:version or groupId:artifactId:packaging:version:scope" }, + "java.testMethod": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Command to run one test method, for example [\"mvn\", \"test\", \"-Dtest=${class}#${method}\"" + }, + "java.testClass": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Command to run all tests in a class, for example [\"mvn\", \"test\", \"-Dtest=${class}\"" + }, "java.trace.server": { "scope": "window", "type": "string", diff --git a/src/main/java/org/javacs/JavaCompilerService.java b/src/main/java/org/javacs/JavaCompilerService.java index 2026a40..46d767c 100644 --- a/src/main/java/org/javacs/JavaCompilerService.java +++ b/src/main/java/org/javacs/JavaCompilerService.java @@ -1188,6 +1188,7 @@ public class JavaCompilerService { found.add(new TestMethod(task, parse, enclosingClass, Optional.of(node))); if (!testClasses.contains(enclosingClass)) { found.add(new TestMethod(task, parse, enclosingClass, Optional.empty())); + testClasses.add(enclosingClass); } } } |