@Test
  public void should_store_zero_tests_when_directory_is_null_or_non_existing_or_a_file()
      throws Exception {

    SensorContext context = mock(SensorContext.class);
    parser.collect(context, null, false);
    verify(context, never()).newMeasure();

    context = mock(SensorContext.class);
    parser.collect(context, getDir("nonExistingReportsDirectory"), false);
    verify(context, never()).newMeasure();

    context = mock(SensorContext.class);
    parser.collect(context, getDir("file.txt"), true);
    verify(context, never()).newMeasure();
  }
  @Test
  public void should_register_tests() throws URISyntaxException {
    SensorContextTester context = SensorContextTester.create(new File(""));

    MutableTestCase testCase = mock(MutableTestCase.class);
    when(testCase.setDurationInMs(anyLong())).thenReturn(testCase);
    when(testCase.setStatus(any(TestCase.Status.class))).thenReturn(testCase);
    when(testCase.setMessage(anyString())).thenReturn(testCase);
    when(testCase.setStackTrace(anyString())).thenReturn(testCase);
    when(testCase.setType(anyString())).thenReturn(testCase);
    MutableTestPlan testPlan = mock(MutableTestPlan.class);
    when(testPlan.addTestCase(anyString())).thenReturn(testCase);
    when(perspectives.as(
            eq(MutableTestPlan.class),
            argThat(
                new ArgumentMatcher<InputFile>() {
                  @Override
                  public boolean matches(Object o) {
                    if (o instanceof InputFile) {
                      return ":ch.hortis.sonar.mvn.mc.MetricsCollectorRegistryTest"
                          .equals(((InputFile) o).key());
                    }
                    return false;
                  }
                })))
        .thenReturn(testPlan);

    parser.collect(context, getDir("multipleReports"), true);

    verify(testPlan).addTestCase("testGetUnKnownCollector");
    verify(testPlan).addTestCase("testGetJDependsCollector");
  }
  // SONAR-2841: if there's only a test suite report, then it should be read.
  @Test
  public void shouldUseTestSuiteReportIfAlone() throws URISyntaxException {
    SensorContextTester context = mockContext();

    parser.collect(context, getDir("onlyTestSuiteReport"), true);
    assertThat(context.measures(":org.sonar.SecondTest")).hasSize(6);
    assertThat(context.measures(":org.sonar.JavaNCSSCollectorTest")).hasSize(6);
  }
 @Test
 public void shouldMergeNestedInnerClasses() throws URISyntaxException {
   SensorContextTester context = mockContext();
   parser.collect(context, getDir("nestedInnerClasses"), true);
   assertThat(
           context
               .measure(":org.sonar.plugins.surefire.NestedInnerTest", CoreMetrics.TESTS)
               .value())
       .isEqualTo(3);
 }
 @Test
 public void shouldAggregateReports() throws URISyntaxException {
   SensorContextTester context = mockContext();
   parser.collect(context, getDir("multipleReports"), true);
   assertThat(context.measures(":ch.hortis.sonar.mvn.mc.MetricsCollectorRegistryTest")).hasSize(6);
   assertThat(context.measures(":ch.hortis.sonar.mvn.mc.CloverCollectorTest")).hasSize(6);
   assertThat(context.measures(":ch.hortis.sonar.mvn.mc.CheckstyleCollectorTest")).hasSize(6);
   assertThat(context.measures(":ch.hortis.sonar.mvn.SonarMojoTest")).hasSize(6);
   assertThat(context.measures(":ch.hortis.sonar.mvn.mc.JDependsCollectorTest")).hasSize(6);
   assertThat(context.measures(":ch.hortis.sonar.mvn.mc.JavaNCSSCollectorTest")).hasSize(6);
 }
  @Test
  public void should_not_count_negative_tests() throws URISyntaxException {
    SensorContextTester context = mockContext();

    parser.collect(context, getDir("negativeTestTime"), true);
    // Test times : -1.120, 0.644, 0.015 -> computed time : 0.659, ignore negative time.
    assertThat(context.measure(":java.Foo", CoreMetrics.SKIPPED_TESTS).value()).isEqualTo(0);
    assertThat(context.measure(":java.Foo", CoreMetrics.TESTS).value()).isEqualTo(6);
    assertThat(context.measure(":java.Foo", CoreMetrics.TEST_ERRORS).value()).isEqualTo(0);
    assertThat(context.measure(":java.Foo", CoreMetrics.TEST_FAILURES).value()).isEqualTo(0);
    assertThat(context.measure(":java.Foo", CoreMetrics.TEST_EXECUTION_TIME).value())
        .isEqualTo(659);
  }
 @Test
 public void shouldMergeInnerClasses() throws URISyntaxException {
   SensorContextTester context = mockContext();
   parser.collect(context, getDir("innerClasses"), true);
   assertThat(
           context
               .measure(
                   ":org.apache.commons.collections.bidimap.AbstractTestBidiMap",
                   CoreMetrics.TESTS)
               .value())
       .isEqualTo(7);
   assertThat(
           context
               .measure(
                   ":org.apache.commons.collections.bidimap.AbstractTestBidiMap",
                   CoreMetrics.TEST_ERRORS)
               .value())
       .isEqualTo(1);
   assertThat(
           context.measures(
               ":org.apache.commons.collections.bidimap.AbstractTestBidiMap$TestBidiMapEntrySet"))
       .isEmpty();
 }
 @Test
 public void shouldNotInsertZeroOnFiles() throws URISyntaxException {
   SensorContext context = mock(SensorContext.class);
   parser.collect(context, getDir("noTests"), true);
   verify(context, never()).newMeasure();
 }