diff options
author | Brett Chabot <brettchabot@android.com> | 2011-06-27 19:15:11 -0700 |
---|---|---|
committer | Brett Chabot <brettchabot@android.com> | 2011-06-28 19:10:22 -0700 |
commit | f1f923f7156205f34198bf90e682ca61bb039ffb (patch) | |
tree | 50e12f88b03ad753be1de8f647f61e305058b487 /ddms | |
parent | 5773adb742c8915f9f72b47ab8f00ed4f79357ae (diff) | |
download | sdk-f1f923f7156205f34198bf90e682ca61bb039ffb.zip sdk-f1f923f7156205f34198bf90e682ca61bb039ffb.tar.gz sdk-f1f923f7156205f34198bf90e682ca61bb039ffb.tar.bz2 |
Fix instrumentation repetition parsing and multi listener handling.
Change-Id: Ib295bb21c45dd2f52f547f86a5b3c4aaa959c139
Diffstat (limited to 'ddms')
2 files changed, 52 insertions, 8 deletions
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/testrunner/InstrumentationResultParser.java b/ddms/libs/ddmlib/src/com/android/ddmlib/testrunner/InstrumentationResultParser.java index 908c56b..7e2e52d 100644 --- a/ddms/libs/ddmlib/src/com/android/ddmlib/testrunner/InstrumentationResultParser.java +++ b/ddms/libs/ddmlib/src/com/android/ddmlib/testrunner/InstrumentationResultParser.java @@ -97,6 +97,7 @@ public class InstrumentationResultParser extends MultiLineReceiver { private static final int START = 1; private static final int ERROR = -1; private static final int OK = 0; + private static final int IN_PROGRESS = 2; } /** Prefixes used to identify output. */ @@ -399,15 +400,17 @@ public class InstrumentationResultParser extends MultiLineReceiver { 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.e(LOG_TAG, "Expected integer status code, received: " + value); } - - // this means we're done with current test result bundle - reportResult(testInfo); - clearCurrentTestInfo(); + if (testInfo.mCode != StatusCodes.IN_PROGRESS) { + // this means we're done with current test result bundle + reportResult(testInfo); + clearCurrentTestInfo(); + } } /** @@ -415,6 +418,7 @@ public class InstrumentationResultParser extends MultiLineReceiver { * * @see IShellOutputReceiver#isCancelled() */ + @Override public boolean isCancelled() { return mIsCancelled; } @@ -439,6 +443,7 @@ public class InstrumentationResultParser extends MultiLineReceiver { } reportTestRunStarted(testInfo); TestIdentifier testId = new TestIdentifier(testInfo.mTestClass, testInfo.mTestName); + Map<String, String> metrics; switch (testInfo.mCode) { case StatusCodes.START: @@ -447,32 +452,36 @@ public class InstrumentationResultParser extends MultiLineReceiver { } break; case StatusCodes.FAILURE: + metrics = getAndResetTestMetrics(); for (ITestRunListener listener : mTestListeners) { listener.testFailed(ITestRunListener.TestFailure.FAILURE, testId, getTrace(testInfo)); - listener.testEnded(testId, getAndResetTestMetrics()); + listener.testEnded(testId, metrics); } mNumTestsRun++; break; case StatusCodes.ERROR: + metrics = getAndResetTestMetrics(); for (ITestRunListener listener : mTestListeners) { listener.testFailed(ITestRunListener.TestFailure.ERROR, testId, getTrace(testInfo)); - listener.testEnded(testId, getAndResetTestMetrics()); + listener.testEnded(testId, metrics); } mNumTestsRun++; break; case StatusCodes.OK: + metrics = getAndResetTestMetrics(); for (ITestRunListener listener : mTestListeners) { - listener.testEnded(testId, getAndResetTestMetrics()); + listener.testEnded(testId, metrics); } mNumTestsRun++; break; default: + metrics = getAndResetTestMetrics(); Log.e(LOG_TAG, "Unknown status code received: " + testInfo.mCode); for (ITestRunListener listener : mTestListeners) { - listener.testEnded(testId, getAndResetTestMetrics()); + listener.testEnded(testId, metrics); } mNumTestsRun++; break; diff --git a/ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/InstrumentationResultParserTest.java b/ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/InstrumentationResultParserTest.java index d8a15cc..650e79c 100644 --- a/ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/InstrumentationResultParserTest.java +++ b/ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/InstrumentationResultParserTest.java @@ -123,6 +123,41 @@ public class InstrumentationResultParserTest extends TestCase { } /** + * Test parsing output for a test that produces repeated metrics values + * <p/> + * This mimics launch performance test output. + */ + public void testParse_repeatedTestMetrics() { + StringBuilder output = new StringBuilder(); + // add test start output + addCommonStatus(output); + addStartCode(output); + + addStatusKey(output, "currentiterations", "1"); + addStatusCode(output, "2"); + addStatusKey(output, "currentiterations", "2"); + addStatusCode(output, "2"); + addStatusKey(output, "currentiterations", "3"); + addStatusCode(output, "2"); + + // add test end + addCommonStatus(output); + addStatusKey(output, "numiterations", "3"); + addSuccessCode(output); + + final Capture<Map<String, String>> captureMetrics = new Capture<Map<String, String>>(); + mMockListener.testRunStarted(RUN_NAME, 1); + mMockListener.testStarted(TEST_ID); + mMockListener.testEnded(EasyMock.eq(TEST_ID), EasyMock.capture(captureMetrics)); + mMockListener.testRunEnded(0, Collections.EMPTY_MAP); + + injectAndVerifyTestString(output.toString()); + + assertEquals("3", captureMetrics.getValue().get("currentiterations")); + assertEquals("3", captureMetrics.getValue().get("numiterations")); + } + + /** * Test parsing output for a test failure. */ public void testParse_testFailed() { |