You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AbstractSurefireParserTest.java 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /*
  2. * Sonar, open source software quality management tool.
  3. * Copyright (C) 2008-2011 SonarSource
  4. * mailto:contact AT sonarsource DOT com
  5. *
  6. * Sonar is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * Sonar is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with Sonar; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
  19. */
  20. package org.sonar.plugins.surefire.api;
  21. import org.hamcrest.BaseMatcher;
  22. import org.hamcrest.Description;
  23. import org.junit.Test;
  24. import org.sonar.api.batch.SensorContext;
  25. import org.sonar.api.measures.CoreMetrics;
  26. import org.sonar.api.measures.Metric;
  27. import org.sonar.api.resources.*;
  28. import org.sonar.api.test.IsMeasure;
  29. import org.sonar.api.test.IsResource;
  30. import java.net.URISyntaxException;
  31. import java.util.Arrays;
  32. import static org.mockito.Matchers.any;
  33. import static org.mockito.Matchers.anyDouble;
  34. import static org.mockito.Matchers.argThat;
  35. import static org.mockito.Matchers.eq;
  36. import static org.mockito.Mockito.*;
  37. public class AbstractSurefireParserTest {
  38. @Test
  39. public void shouldAggregateReports() throws URISyntaxException {
  40. AbstractSurefireParser parser = newParser();
  41. SensorContext context = mockContext();
  42. parser.collect(new Project("foo"), context, getDir("multipleReports"));
  43. verify(context, times(6)).saveMeasure(argThat(new IsResource(Scopes.FILE, Qualifiers.FILE)), eq(CoreMetrics.TESTS), anyDouble());
  44. verify(context, times(6)).saveMeasure(argThat(new IsResource(Scopes.FILE, Qualifiers.FILE)), eq(CoreMetrics.TEST_ERRORS), anyDouble());
  45. verify(context, times(6)).saveMeasure(argThat(new IsResource(Scopes.FILE, Qualifiers.FILE)), argThat(new IsMeasure(CoreMetrics.TEST_DATA)));
  46. }
  47. /**
  48. * See http://jira.codehaus.org/browse/SONAR-2371
  49. */
  50. @Test
  51. public void shouldInsertZeroWhenNoReports() throws URISyntaxException {
  52. AbstractSurefireParser parser = newParser();
  53. SensorContext context = mockContext();
  54. Project project = mock(Project.class);
  55. parser.collect(project, context, getDir("noReports"));
  56. verify(context).saveMeasure(CoreMetrics.TESTS, 0.0);
  57. }
  58. /**
  59. * See http://jira.codehaus.org/browse/SONAR-2371
  60. */
  61. @Test
  62. public void shouldNotInsertZeroWhenNoReports() throws URISyntaxException {
  63. AbstractSurefireParser parser = newParser();
  64. SensorContext context = mockContext();
  65. Project project = mock(Project.class);
  66. when(project.getModules()).thenReturn(Arrays.asList(new Project("foo")));
  67. parser.collect(project, context, getDir("noReports"));
  68. verify(context, never()).saveMeasure(CoreMetrics.TESTS, 0.0);
  69. }
  70. @Test
  71. public void shouldNotInsertZeroOnFiles() throws URISyntaxException {
  72. AbstractSurefireParser parser = newParser();
  73. SensorContext context = mockContext();
  74. parser.collect(new Project("foo"), context, getDir("noTests"));
  75. verify(context, never()).saveMeasure(any(Resource.class),(Metric)anyObject(), anyDouble());
  76. }
  77. @Test
  78. public void shouldMergeInnerClasses() throws URISyntaxException {
  79. AbstractSurefireParser parser = newParser();
  80. SensorContext context = mock(SensorContext.class);
  81. when(context.isIndexed(argThat(new BaseMatcher<Resource>(){
  82. public boolean matches(Object o) {
  83. return !((Resource)o).getName().contains("$");
  84. }
  85. public void describeTo(Description description) {
  86. }
  87. }), eq(false))).thenReturn(true);
  88. parser.collect(new Project("foo"), context, getDir("innerClasses"));
  89. verify(context).saveMeasure(argThat(new IsResource(Scopes.FILE, Qualifiers.FILE, "org.apache.commons.collections.bidimap.AbstractTestBidiMap")), eq(CoreMetrics.TESTS), eq(7.0));
  90. verify(context).saveMeasure(argThat(new IsResource(Scopes.FILE, Qualifiers.FILE, "org.apache.commons.collections.bidimap.AbstractTestBidiMap")), eq(CoreMetrics.TEST_ERRORS), eq(1.0));
  91. verify(context, never()).saveMeasure(argThat(new IsResource(Scopes.FILE, Qualifiers.FILE, "org.apache.commons.collections.bidimap.AbstractTestBidiMap$TestBidiMapEntrySet")), any(Metric.class), anyDouble());
  92. }
  93. @Test
  94. public void shouldMergeNestedInnerClasses() throws URISyntaxException {
  95. AbstractSurefireParser parser = newParser();
  96. SensorContext context = mockContext();
  97. parser.collect(new Project("foo"), context, getDir("nestedInnerClasses"));
  98. verify(context).saveMeasure(
  99. argThat(new IsResource(Scopes.FILE, Qualifiers.FILE, "org.sonar.plugins.surefire.NestedInnerTest")),
  100. eq(CoreMetrics.TESTS),
  101. eq(3.0));
  102. }
  103. private AbstractSurefireParser newParser() {
  104. return new AbstractSurefireParser() {
  105. @Override
  106. protected Resource<?> getUnitTestResource(String classKey) {
  107. return new File(classKey);
  108. }
  109. };
  110. }
  111. private java.io.File getDir(String dirname) throws URISyntaxException {
  112. return new java.io.File(getClass().getResource("/org/sonar/plugins/surefire/api/AbstractSurefireParserTest/" + dirname).toURI());
  113. }
  114. private SensorContext mockContext() {
  115. SensorContext context = mock(SensorContext.class);
  116. when(context.isIndexed(any(Resource.class), eq(false))).thenReturn(true);
  117. return context;
  118. }
  119. }