public void testAppInfo() throws Exception {
      AppInfo info = new AppInfo("app_name");
      assertEquals("app_name", info.getName());
      assertEquals("app_name", info.getOutputKey());
      assertEquals("app_name", info.getPostKey());

      info = new AppInfo("AppName");
      assertEquals("AppName", info.getName());
      assertEquals("appname", info.getOutputKey());
      assertEquals("appname", info.getPostKey());

      info = new AppInfo("App Name");
      assertEquals("App Name", info.getName());
      assertEquals("appname", info.getOutputKey());
      assertEquals("appname", info.getPostKey());

      info = new AppInfo("App & Name");
      assertEquals("App & Name", info.getName());
      assertEquals("app&name", info.getOutputKey());
      assertEquals("app&name", info.getPostKey());
      assertEquals("App & Name,app&name\n", info.getAppListEntry());

      info = new AppInfo("App Name", "key");
      assertEquals("App Name", info.getName());
      assertEquals("appname", info.getOutputKey());
      assertEquals("key", info.getPostKey());

      assertNull(info.getTime());
      info.setTime(0);
      assertEquals(new Integer(0), info.getTime());
      assertEquals("App Name,key\n", info.getAppListEntry());
    }
  /**
   * Report the metrics and attach it to the listener.
   *
   * <p>If any of the app times are {@code null}, that app is assumed to not have launched and will
   * be marked as failed.
   *
   * @param listener the {@link ITestInvocationListener}
   */
  private void reportMetrics(ITestInvocationListener listener) {
    listener.testRunStarted(TEST_KEY, 0);
    Map<String, String> metrics = new HashMap<String, String>();

    for (AppInfo appInfo : mAppInfos.values()) {
      TestIdentifier testId =
          new TestIdentifier(getClass().getCanonicalName(), appInfo.getPostKey());
      listener.testStarted(testId);
      if (appInfo.getTime() != null) {
        metrics.put(appInfo.getPostKey(), Integer.toString(appInfo.getTime()));
      } else {
        listener.testFailed(TestFailure.FAILURE, testId, "No app launch time");
      }
      Map<String, String> empty = Collections.emptyMap();
      listener.testEnded(testId, empty);
    }
    CLog.d("About to report app launch metrics: %s", metrics);
    listener.testRunEnded(0, metrics);
  }