summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStas Negara <snegara@google.com>2015-05-14 12:28:40 -0700
committerStas Negara <snegara@google.com>2015-05-14 12:30:21 -0700
commit54fcf098f463a4e541aecf7df53cafcd43adab15 (patch)
treee35cd1bade9650932911698493fd30906e5be75d
parent905019fb9557e1728bd83016ca96665193a1c501 (diff)
downloadtesting-54fcf098f463a4e541aecf7df53cafcd43adab15.tar.gz
Make debug a matrix configuration selection context sensitive.
Change-Id: I6014c30bdbbba9892d5e5afddf7feba1b2b10a7b
-rw-r--r--src/com/google/gct/testing/DebugConfigurationAction.java92
1 files changed, 68 insertions, 24 deletions
diff --git a/src/com/google/gct/testing/DebugConfigurationAction.java b/src/com/google/gct/testing/DebugConfigurationAction.java
index 901a4ee..7ef8990 100644
--- a/src/com/google/gct/testing/DebugConfigurationAction.java
+++ b/src/com/google/gct/testing/DebugConfigurationAction.java
@@ -17,6 +17,7 @@ package com.google.gct.testing;
import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.IDevice;
+import com.google.gct.testing.results.GoogleCloudTestProxy.GoogleCloudRootTestProxy;
import com.google.gct.testing.results.GoogleCloudTestTreeView;
import com.google.gct.testing.results.GoogleCloudTestingResultsForm;
import com.intellij.execution.ExecutionException;
@@ -37,10 +38,11 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import org.jetbrains.android.run.TargetSelectionMode;
import org.jetbrains.android.run.testing.AndroidTestRunConfiguration;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import javax.imageio.ImageIO;
import javax.swing.*;
-import java.io.IOException;
public class DebugConfigurationAction extends AnAction {
@@ -60,6 +62,23 @@ public class DebugConfigurationAction extends AnAction {
public DebugConfigurationAction() {
super(TEXT, DESCRIPTION, ICON);
+ getTemplatePresentation().setEnabled(false);
+ }
+
+ @Override
+ public void update(AnActionEvent actionEvent) {
+ GoogleCloudTestTreeView sender = actionEvent.getData(GoogleCloudTestTreeView.CLOUD_TEST_RUNNER_VIEW);
+
+ if (sender == null) {
+ return;
+ }
+
+ AbstractTestProxy selectedNode = ((GoogleCloudTestingResultsForm)sender.getResultsViewer()).getTreeView().getSelectedTest();
+ if (selectedNode == null || isRootNode(selectedNode)) {
+ actionEvent.getPresentation().setEnabled(false);
+ } else {
+ actionEvent.getPresentation().setEnabled(true);
+ }
}
@Override
@@ -73,33 +92,47 @@ public class DebugConfigurationAction extends AnAction {
Project project = actionEvent.getData(PlatformDataKeys.PROJECT);
- AbstractTestProxy selectedLeaf =
- getFirstLeaf(((GoogleCloudTestingResultsForm)sender.getResultsViewer()).getTreeView().getSelectedTest());
-
- if (selectedLeaf.getParent() == null || selectedLeaf.getParent().getParent() == null) {
- //This leaf is not a test. Most probably it is a pending configuration, so ignore.
- CloudTestingUtils.showBalloonMessage(project, "Tests were not yet executed for this configuration", MessageType.WARNING, 3);
- return;
+ AbstractTestProxy selectedNode = ((GoogleCloudTestingResultsForm)sender.getResultsViewer()).getTreeView().getSelectedTest();
+
+ assert !isRootNode(selectedNode); // The action should have been disabled for the root node.
+
+ String configurationName;
+ String className = null;
+ String methodName = null;
+ if (isRootNode(selectedNode.getParent())) {
+ // User selected a configuration node.
+ configurationName = selectedNode.getName();
+ } else if (isRootNode(selectedNode.getParent().getParent())) {
+ // User selected a class node.
+ className = selectedNode.getName();
+ configurationName = selectedNode.getParent().getName();
+ } else {
+ // User selected a method node.
+ methodName = selectedNode.getName();
+ className = selectedNode.getParent().getName();
+ configurationName = selectedNode.getParent().getParent().getName();
}
- AbstractTestProxy selectedConfigurationNode = selectedLeaf.getParent().getParent();
- ConfigurationInstance configurationInstance =
- ConfigurationInstance.parseFromResultsViewerDisplayString(selectedConfigurationNode.getName());
-
- ApplicationManager.getApplication().executeOnPooledThread(new DebuggingStater(environment, project, configurationInstance));
+ ApplicationManager.getApplication()
+ .executeOnPooledThread(new DebuggingStater(environment, project, configurationName, className, methodName));
}
private class DebuggingStater extends Thread {
private final ExecutionEnvironment environment;
private final Project project;
private final ConfigurationInstance configurationInstance;
+ private final String className;
+ private final String methodName;
private final RunProfile runProfile;
private final ProgramRunner runner;
- private DebuggingStater(ExecutionEnvironment environment, Project project, ConfigurationInstance configurationInstance) {
+ private DebuggingStater(ExecutionEnvironment environment, Project project, @NotNull String configurationName,
+ @Nullable String className, @Nullable String methodName) {
this.environment = environment;
this.project = project;
- this.configurationInstance = configurationInstance;
+ configurationInstance = ConfigurationInstance.parseFromResultsViewerDisplayString(configurationName);
+ this.className = className;
+ this.methodName = methodName;
runProfile = environment.getRunProfile();
runner = RunnerRegistry.getInstance().getRunner(DefaultDebugExecutor.getDebugExecutorInstance().getId(), runProfile);
}
@@ -136,10 +169,7 @@ public class DebugConfigurationAction extends AnAction {
}
}
- // Clone the run configuration such that we do not need to reuse and restore the original one.
- final AndroidTestRunConfiguration runConfiguration = (AndroidTestRunConfiguration) ((AndroidTestRunConfiguration)runProfile).clone();
- runConfiguration.setTargetSelectionMode(TargetSelectionMode.CLOUD_DEVICE_DEBUGGING);
- runConfiguration.CLOUD_DEVICE_SERIAL_NUMBER = device.getSerialNumber();
+ final AndroidTestRunConfiguration runConfiguration = prepareTestRunConfiguration(device.getSerialNumber());
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
@@ -157,6 +187,23 @@ public class DebugConfigurationAction extends AnAction {
}
}
+ private AndroidTestRunConfiguration prepareTestRunConfiguration(String deviceSerialNumber) {
+ // Clone the run configuration such that we do not need to reuse and restore the original one.
+ final AndroidTestRunConfiguration runConfiguration = (AndroidTestRunConfiguration) ((AndroidTestRunConfiguration)runProfile).clone();
+ runConfiguration.setTargetSelectionMode(TargetSelectionMode.CLOUD_DEVICE_DEBUGGING);
+ runConfiguration.CLOUD_DEVICE_SERIAL_NUMBER = deviceSerialNumber;
+ if (className != null) {
+ runConfiguration.CLASS_NAME = className;
+ if (methodName != null) {
+ runConfiguration.METHOD_NAME = methodName;
+ runConfiguration.TESTING_TYPE = AndroidTestRunConfiguration.TEST_METHOD;
+ } else {
+ runConfiguration.TESTING_TYPE = AndroidTestRunConfiguration.TEST_CLASS;
+ }
+ }
+ return runConfiguration;
+ }
+
private IDevice getMatchingDevice() {
for (IDevice device : AndroidDebugBridge.getBridge().getDevices()) {
String deviceConfigurationInstance =
@@ -174,11 +221,8 @@ public class DebugConfigurationAction extends AnAction {
}
}
- private AbstractTestProxy getFirstLeaf(AbstractTestProxy testNode) {
- while (!testNode.isLeaf()) {
- return getFirstLeaf(testNode.getChildren().get(0));
- }
- return testNode;
+ private boolean isRootNode(AbstractTestProxy node) {
+ return node instanceof GoogleCloudRootTestProxy;
}
}