aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xeclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java43
1 files changed, 32 insertions, 11 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java
index baa3f6b..55d3762 100755
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java
@@ -17,8 +17,8 @@
package com.android.ide.eclipse.adt.internal.launch.junit;
import com.android.ddmlib.testrunner.IRemoteAndroidTestRunner.TestSize;
-import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.AdtConstants;
+import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.launch.AndroidLaunch;
import com.android.ide.eclipse.adt.internal.launch.AndroidLaunchConfiguration;
import com.android.ide.eclipse.adt.internal.launch.AndroidLaunchController;
@@ -35,6 +35,9 @@ import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jdt.core.IJavaElement;
@@ -42,6 +45,7 @@ import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.internal.junit.launcher.JUnitLaunchConfigurationConstants;
import org.eclipse.jdt.internal.junit.launcher.TestKindRegistry;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.swt.widgets.Display;
/**
* Run configuration that can execute JUnit tests on an Android platform.
@@ -63,9 +67,10 @@ public class AndroidJUnitLaunchConfigDelegate extends LaunchConfigDelegate {
@Override
protected void doLaunch(final ILaunchConfiguration configuration, final String mode,
- IProgressMonitor monitor, IProject project, final AndroidLaunch androidLaunch,
- AndroidLaunchConfiguration config, AndroidLaunchController controller,
- IFile applicationPackage, ManifestData manifestData) {
+ final IProgressMonitor monitor, final IProject project,
+ final AndroidLaunch androidLaunch, final AndroidLaunchConfiguration config,
+ final AndroidLaunchController controller, final IFile applicationPackage,
+ final ManifestData manifestData) {
String runner = getRunner(project, configuration, manifestData);
if (runner == null) {
@@ -76,7 +81,7 @@ public class AndroidJUnitLaunchConfigDelegate extends LaunchConfigDelegate {
return;
}
// get the target app's package
- String targetAppPackage = getTargetPackage(manifestData, runner);
+ final String targetAppPackage = getTargetPackage(manifestData, runner);
if (targetAppPackage == null) {
AdtPlugin.displayError(LaunchMessages.LaunchDialogTitle,
String.format(LaunchMessages.AndroidJUnitDelegate_NoTargetMsg_3s,
@@ -84,7 +89,7 @@ public class AndroidJUnitLaunchConfigDelegate extends LaunchConfigDelegate {
androidLaunch.stopLaunch();
return;
}
- String testAppPackage = manifestData.getPackage();
+ final String testAppPackage = manifestData.getPackage();
AndroidJUnitLaunchInfo junitLaunchInfo = new AndroidJUnitLaunchInfo(project,
testAppPackage, runner);
junitLaunchInfo.setTestClass(getTestClass(configuration));
@@ -92,11 +97,27 @@ public class AndroidJUnitLaunchConfigDelegate extends LaunchConfigDelegate {
junitLaunchInfo.setTestMethod(getTestMethod(configuration));
junitLaunchInfo.setLaunch(androidLaunch);
junitLaunchInfo.setTestSize(getTestSize(configuration));
- IAndroidLaunchAction junitLaunch = new AndroidJUnitLaunchAction(junitLaunchInfo);
+ final IAndroidLaunchAction junitLaunch = new AndroidJUnitLaunchAction(junitLaunchInfo);
- controller.launch(project, mode, applicationPackage, testAppPackage, targetAppPackage,
- manifestData.getDebuggable(), manifestData.getMinSdkVersionString(),
- junitLaunch, config, androidLaunch, monitor);
+ // launch on a separate thread if currently on the display thread
+ if (Display.getCurrent() != null) {
+ Job job = new Job("Junit Launch") { //$NON-NLS-1$
+ @Override
+ protected IStatus run(IProgressMonitor m) {
+ controller.launch(project, mode, applicationPackage, testAppPackage,
+ targetAppPackage, manifestData.getDebuggable(),
+ manifestData.getMinSdkVersionString(),
+ junitLaunch, config, androidLaunch, monitor);
+ return Status.OK_STATUS;
+ }
+ };
+ job.setPriority(Job.INTERACTIVE);
+ job.schedule();
+ } else {
+ controller.launch(project, mode, applicationPackage, testAppPackage, targetAppPackage,
+ manifestData.getDebuggable(), manifestData.getMinSdkVersionString(),
+ junitLaunch, config, androidLaunch, monitor);
+ }
}
/**
@@ -226,7 +247,7 @@ public class AndroidJUnitLaunchConfigDelegate extends LaunchConfigDelegate {
return null;
}
- private String getRunnerFromConfig(ILaunchConfiguration configuration) throws CoreException {
+ private String getRunnerFromConfig(ILaunchConfiguration configuration) {
return getStringLaunchAttribute(ATTR_INSTR_NAME, configuration);
}