mParser = new InstrumentationResultParser( mRunName, listeners ); mRemoteDevice.getSerialNumber() ) ); mParser.handleTestRunFailed( e.toString() ); throw e; String.format( "ShellCommandUnresponsiveException %1$s when running tests %2$s on %3$s", e.toString(), jarFile, mRemoteDevice.getSerialNumber() ) ); mParser.handleTestRunFailed( String.format( "Failed to receive adb shell test output within %1$d ms. " + "Test may have timed out, or adb connection to device became unresponsive", mMaxTimeToOutputResponse ) ); String.format( "TimeoutException when running tests %1$s on %2$s", jarFile, mRemoteDevice.getSerialNumber() ) ); mParser.handleTestRunFailed( e.toString() ); throw e; mParser.handleTestRunFailed( e.toString() ); throw e;
/** * {@inheritDoc} */ public void cancel() { if ( mParser != null ) { mParser.cancel(); } }
if (line.startsWith(Prefixes.STATUS_CODE)) { submitCurrentKeyValue(); mInInstrumentationResultKey = false; parseStatusCode(line); } else if (line.startsWith(Prefixes.STATUS)) { submitCurrentKeyValue(); mInInstrumentationResultKey = false; parseKey(line, Prefixes.STATUS.length()); } else if (line.startsWith(Prefixes.RESULT)) { submitCurrentKeyValue(); mInInstrumentationResultKey = true; parseKey(line, Prefixes.RESULT.length()); } else if (line.startsWith(Prefixes.STATUS_FAILED) || line.startsWith(Prefixes.CODE)) { submitCurrentKeyValue(); mInInstrumentationResultKey = false; parseTime(line); } else { if (mCurrentValue != null) {
/** * Parses out a status code result. */ private void parseStatusCode(String line) { String value = line.substring(Prefixes.STATUS_CODE.length()).trim(); TestResult testInfo = getCurrentTestInfo(); try { testInfo.mCode = Integer.parseInt(value); } catch (NumberFormatException e) { Log.e(LOG_TAG, "Expected integer status code, received: " + value); } // this means we're done with current test result bundle reportResult(testInfo); clearCurrentTestInfo(); }
return; reportTestRunStarted(testInfo); TestIdentifier testId = new TestIdentifier(testInfo.mTestClass, testInfo.mTestName); for (ITestRunListener listener : mTestListeners) { listener.testFailed(ITestRunListener.TestFailure.FAILURE, testId, getTrace(testInfo)); listener.testEnded(testId, getAndResetTestMetrics()); for (ITestRunListener listener : mTestListeners) { listener.testFailed(ITestRunListener.TestFailure.ERROR, testId, getTrace(testInfo)); listener.testEnded(testId, getAndResetTestMetrics()); case StatusCodes.OK: for (ITestRunListener listener : mTestListeners) { listener.testEnded(testId, getAndResetTestMetrics()); Log.e(LOG_TAG, "Unknown status code received: " + testInfo.mCode); for (ITestRunListener listener : mTestListeners) { listener.testEnded(testId, getAndResetTestMetrics());
} else if (mCurrentKey.equals(StatusKeys.SHORTMSG)) { handleTestRunFailed(String.format("Instrumentation run failed due to '%1$s'", statusValue)); TestResult testInfo = getCurrentTestInfo(); handleTestRunFailed(statusValue); } else if (mCurrentKey.equals(StatusKeys.STACK)) { testInfo.mStackTrace = statusValue;
/** * Handles the end of the adb session when a test run failure has not been reported yet */ private void handleOutputDone() { if (!mTestStartReported && !mTestRunFinished) { // no results handleTestRunFailed(NO_TEST_RESULTS_MSG); } else if (mNumTestsExpected > mNumTestsRun) { final String message = String.format("%1$s. Expected %2$d tests, received %3$d", INCOMPLETE_RUN_ERR_MSG_PREFIX, mNumTestsExpected, mNumTestsRun); handleTestRunFailed(message); } else { for (ITestRunListener listener : mTestListeners) { if (!mTestStartReported) { // test run wasn't started, but it finished successfully. Must be a run with // no tests listener.testRunStarted(mTestRunName, 0); } listener.testRunEnded(mTestTime, mInstrumentationResultBundle); } } } }
/** * Processes the instrumentation test output from shell. * * @see MultiLineReceiver#processNewLines */ @Override public void processNewLines(String[] lines) { for (String line : lines) { parse(line); // in verbose mode, dump all adb output to log Log.v(LOG_TAG, line); } }
/** * Called by parent when adb session is complete. */ @Override public void done() { super.done(); if (!mTestRunFailReported) { handleOutputDone(); } }
String.format("%1$s. Reason: '%2$s'. %3$s", INCOMPLETE_TEST_ERR_MSG_PREFIX, errorMsg, INCOMPLETE_TEST_ERR_MSG_POSTFIX)); listener.testEnded(testId, getAndResetTestMetrics());
if (line.startsWith(Prefixes.STATUS_CODE)) { submitCurrentKeyValue(); mInInstrumentationResultKey = false; parseStatusCode(line); } else if (line.startsWith(Prefixes.STATUS)) { submitCurrentKeyValue(); mInInstrumentationResultKey = false; parseKey(line, Prefixes.STATUS.length()); } else if (line.startsWith(Prefixes.RESULT)) { submitCurrentKeyValue(); mInInstrumentationResultKey = true; parseKey(line, Prefixes.RESULT.length()); } else if (line.startsWith(Prefixes.STATUS_FAILED) || line.startsWith(Prefixes.CODE)) { submitCurrentKeyValue(); mInInstrumentationResultKey = false; parseTime(line); } else { if (mCurrentValue != null) {
/** * Parses out a status code result. */ private void parseStatusCode(String line) { String value = line.substring(Prefixes.STATUS_CODE.length()).trim(); TestResult testInfo = getCurrentTestInfo(); testInfo.mCode = StatusCodes.ERROR; try { testInfo.mCode = Integer.parseInt(value); } catch (NumberFormatException e) { Log.w(LOG_TAG, "Expected integer status code, received: " + value); testInfo.mCode = StatusCodes.ERROR; } if (testInfo.mCode != StatusCodes.IN_PROGRESS) { // this means we're done with current test result bundle reportResult(testInfo); clearCurrentTestInfo(); } }
reportTestRunStarted(testInfo); TestIdentifier testId = new TestIdentifier(testInfo.mTestClass, testInfo.mTestName); Map<String, String> metrics; metrics = getAndResetTestMetrics(); for (ITestRunListener listener : mTestListeners) { listener.testFailed(testId, getTrace(testInfo)); listener.testEnded(testId, metrics); metrics = getAndResetTestMetrics(); for (ITestRunListener listener : mTestListeners) { listener.testFailed(testId, getTrace(testInfo)); listener.testEnded(testId, metrics); break; case StatusCodes.IGNORED: metrics = getAndResetTestMetrics(); for (ITestRunListener listener : mTestListeners) { listener.testStarted(testId); break; case StatusCodes.ASSUMPTION_FAILURE: metrics = getAndResetTestMetrics(); for (ITestRunListener listener : mTestListeners) { listener.testAssumptionFailure(testId, getTrace(testInfo)); listener.testEnded(testId, metrics); break; case StatusCodes.OK:
} else if (mCurrentKey.equals(StatusKeys.SHORTMSG)) { handleTestRunFailed(String.format("Instrumentation run failed due to '%1$s'", statusValue)); TestResult testInfo = getCurrentTestInfo(); handleTestRunFailed(statusValue); } else if (mCurrentKey.equals(StatusKeys.STACK)) { testInfo.mStackTrace = statusValue;
/** * Handles the end of the adb session when a test run failure has not been reported yet */ private void handleOutputDone() { if (!mTestStartReported && !mTestRunFinished) { // no results handleTestRunFailed(NO_TEST_RESULTS_MSG); } else if (mNumTestsExpected > mNumTestsRun) { final String message = String.format("%1$s. Expected %2$d tests, received %3$d", INCOMPLETE_RUN_ERR_MSG_PREFIX, mNumTestsExpected, mNumTestsRun); handleTestRunFailed(message); } else { for (ITestRunListener listener : mTestListeners) { if (!mTestStartReported) { // test run wasn't started, but it finished successfully. Must be a run with // no tests listener.testRunStarted(mTestRunName, 0); } listener.testRunEnded(mTestTime, mInstrumentationResultBundle); } } } }
/** * Processes the instrumentation test output from shell. * * @see MultiLineReceiver#processNewLines */ @Override public void processNewLines(String[] lines) { for (String line : lines) { parse(line); // in verbose mode, dump all adb output to log Log.v(LOG_TAG, line); } }
/** * Called by parent when adb session is complete. */ @Override public void done() { super.done(); if (!mTestRunFailReported) { handleOutputDone(); } }
String.format("%1$s. Reason: '%2$s'. %3$s", INCOMPLETE_TEST_ERR_MSG_PREFIX, errorMsg, INCOMPLETE_TEST_ERR_MSG_POSTFIX)); listener.testEnded(testId, getAndResetTestMetrics());
mRemoteDevice.getName())); String runName = mRunName == null ? mPackageName : mRunName; mParser = new InstrumentationResultParser(runName, listeners); e.toString(), getPackageName(), mRemoteDevice.getName())); mParser.handleTestRunFailed(e.toString()); throw e; } catch (ShellCommandUnresponsiveException e) { "ShellCommandUnresponsiveException %1$s when running tests %2$s on %3$s", e.toString(), getPackageName(), mRemoteDevice.getName())); mParser.handleTestRunFailed(String.format( "Failed to receive adb shell test output within %1$d ms. " + "Test may have timed out, or adb connection to device became unresponsive", "TimeoutException when running tests %1$s on %2$s", getPackageName(), mRemoteDevice.getName())); mParser.handleTestRunFailed(e.toString()); throw e; } catch (AdbCommandRejectedException e) { "AdbCommandRejectedException %1$s when running tests %2$s on %3$s", e.toString(), getPackageName(), mRemoteDevice.getName())); mParser.handleTestRunFailed(e.toString()); throw e;
/** * {@inheritDoc} */ public void cancel() { if (mParser != null) { mParser.cancel(); } }