aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java2
-rwxr-xr-xeclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java74
2 files changed, 55 insertions, 21 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java
index fcb859a..2bde545 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/AndroidJUnitLaunchAction.java
@@ -239,7 +239,7 @@ class AndroidJUnitLaunchAction implements IAndroidLaunchAction {
* @see org.eclipse.debug.core.model.ITerminate#isTerminated()
*/
public boolean isTerminated() {
- return mIsTerminated;
+ return mIsTerminated || isInterrupted();
}
/**
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java
index 0a045bc..461fd9d 100755
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/junit/runtime/RemoteAdtTestRunner.java
@@ -33,7 +33,7 @@ import java.io.IOException;
* Supports Eclipse JUnit execution of Android tests.
* <p/>
* Communicates back to a Eclipse JDT JUnit client via a socket connection.
- *
+ *
* @see org.eclipse.jdt.internal.junit.runner.RemoteTestRunner for more details on the protocol
*/
@SuppressWarnings("restriction")
@@ -41,17 +41,17 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
private AndroidJUnitLaunchInfo mLaunchInfo;
private TestExecution mExecution;
-
+
/**
* Initialize the JDT JUnit test runner parameters from the {@code args}.
- *
- * @param args name-value pair of arguments to pass to parent JUnit runner.
+ *
+ * @param args name-value pair of arguments to pass to parent JUnit runner.
* @param launchInfo the Android specific test launch info
*/
protected void init(String[] args, AndroidJUnitLaunchInfo launchInfo) {
defaultInit(args);
mLaunchInfo = launchInfo;
- }
+ }
/**
* Runs a set of tests, and reports back results using parent class.
@@ -65,13 +65,13 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
* <li>The test execution result for each test method. Expects individual notifications of
* the test execution start, any failures, and the end of the test execution.</li>
* <li>The end of the test run, with its elapsed time.</li>
- * </ol>
+ * </ol>
* <p/>
* In order to satisfy this, this method performs two actual Android instrumentation runs.
* The first is a 'log only' run that will collect the test tree data, without actually
* executing the tests, and send it back to JDT JUnit. The second is the actual test execution,
* whose results will be communicated back in real-time to JDT JUnit.
- *
+ *
* @param testClassNames ignored - the AndroidJUnitLaunchInfo will be used to determine which
* tests to run.
* @param testName ignored
@@ -81,16 +81,16 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
public void runTests(String[] testClassNames, String testName, TestExecution execution) {
// hold onto this execution reference so it can be used to report test progress
mExecution = execution;
-
- RemoteAndroidTestRunner runner = new RemoteAndroidTestRunner(mLaunchInfo.getAppPackage(),
- mLaunchInfo.getRunner(), mLaunchInfo.getDevice());
+
+ RemoteAndroidTestRunner runner = new RemoteAndroidTestRunner(mLaunchInfo.getAppPackage(),
+ mLaunchInfo.getRunner(), mLaunchInfo.getDevice());
if (mLaunchInfo.getTestClass() != null) {
if (mLaunchInfo.getTestMethod() != null) {
runner.setMethodName(mLaunchInfo.getTestClass(), mLaunchInfo.getTestMethod());
- } else {
+ } else {
runner.setClassName(mLaunchInfo.getTestClass());
- }
+ }
}
if (mLaunchInfo.getTestPackage() != null) {
@@ -102,6 +102,8 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
runner.setLogOnly(true);
TestCollector collector = new TestCollector();
try {
+ AdtPlugin.printToConsole(mLaunchInfo.getProject(), "Collecting test information");
+
runner.run(collector);
if (collector.getErrorMessage() != null) {
// error occurred during test collection.
@@ -111,6 +113,9 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
return;
}
notifyTestRunStarted(collector.getTestCaseCount());
+ AdtPlugin.printToConsole(mLaunchInfo.getProject(),
+ "Sending test information to Eclipse");
+
collector.sendTrees(this);
// now do real execution
@@ -118,23 +123,24 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
if (mLaunchInfo.isDebugMode()) {
runner.setDebug(true);
}
+ AdtPlugin.printToConsole(mLaunchInfo.getProject(), "Running tests...");
runner.run(new TestRunListener());
} catch (IOException e) {
reportError(String.format(LaunchMessages.RemoteAdtTestRunner_RunIOException_s,
e.getMessage()));
}
}
-
+
/**
* Main entry method to run tests
- *
+ *
* @param programArgs JDT JUnit program arguments to be processed by parent
* @param junitInfo the {@link AndroidJUnitLaunchInfo} containing info about this test ru
*/
public void runTests(String[] programArgs, AndroidJUnitLaunchInfo junitInfo) {
init(programArgs, junitInfo);
run();
- }
+ }
/**
* Stop the current test run.
@@ -147,7 +153,7 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
protected void stop() {
if (mExecution != null) {
mExecution.stop();
- }
+ }
}
private void notifyTestRunEnded(long elapsedTime) {
@@ -161,14 +167,14 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
* @param errorMessage
*/
private void reportError(String errorMessage) {
- AdtPlugin.printErrorToConsole(mLaunchInfo.getProject(),
+ AdtPlugin.printErrorToConsole(mLaunchInfo.getProject(),
String.format(LaunchMessages.RemoteAdtTestRunner_RunFailedMsg_s, errorMessage));
// is this needed?
//notifyTestRunStopped(-1);
}
/**
- * TestRunListener that communicates results in real-time back to JDT JUnit
+ * TestRunListener that communicates results in real-time back to JDT JUnit
*/
private class TestRunListener implements ITestRunListener {
@@ -189,8 +195,8 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
} else {
statusString = MessageIds.TEST_FAILED;
}
- TestReferenceFailure failure =
- new TestReferenceFailure(new TestCaseReference(test),
+ TestReferenceFailure failure =
+ new TestReferenceFailure(new TestCaseReference(test),
statusString, trace, null);
mExecution.getListener().notifyTestFailed(failure);
}
@@ -234,5 +240,33 @@ public class RemoteAdtTestRunner extends RemoteTestRunner {
TestCaseReference testId = new TestCaseReference(test);
mExecution.getListener().notifyTestStarted(testId);
}
+
+ }
+
+ /**
+ * Override parent to get extra logs.
+ */
+ @Override
+ protected boolean connect() {
+ boolean result = super.connect();
+ if (!result) {
+ AdtPlugin.printErrorToConsole(mLaunchInfo.getProject(),
+ "Connect to Eclipse test result listener failed");
+ }
+ return result;
+ }
+
+ /**
+ * Override parent to dump error message to console.
+ */
+ @Override
+ public void runFailed(String message, Exception exception) {
+ if (exception != null) {
+ AdtPlugin.logAndPrintError(exception, mLaunchInfo.getProject().getName(),
+ "Test launch failed: %s", message);
+ } else {
+ AdtPlugin.printErrorToConsole(mLaunchInfo.getProject(), "Test launch failed: %s",
+ message);
+ }
}
} \ No newline at end of file