diff options
-rwxr-xr-x | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchConfigDelegate.java | 43 |
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); } |