summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Fraser <george@fivetran.com>2018-09-16 11:26:19 -0700
committerGeorge Fraser <george@fivetran.com>2018-09-16 11:26:19 -0700
commit2615850fb5ee84f176cb510ba34c9f8d6ee90d7d (patch)
tree8887d865aa178a7b9564a18fe74df0ba50f4dda6
parente10debe4f63d79d437b097213d491d0c2ccffe98 (diff)
downloadjava-language-server-2615850fb5ee84f176cb510ba34c9f8d6ee90d7d.zip
Configurable test command
-rw-r--r--.vscode/settings.json2
-rw-r--r--lib/extension.ts31
-rw-r--r--package.json20
-rw-r--r--src/main/java/org/javacs/JavaCompilerService.java1
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);
}
}
}