2222import java .io .File ;
2323import org .junit .Before ;
2424import org .junit .Test ;
25- import org .sonar .api .batch .SensorContext ;
25+ import org .sonar .api .batch .fs . InputComponent ;
2626import org .sonar .api .batch .fs .internal .DefaultFileSystem ;
2727import org .sonar .api .batch .fs .internal .DefaultInputFile ;
28+ import org .sonar .api .batch .sensor .internal .SensorContextTester ;
2829import org .sonar .api .config .MapSettings ;
2930import org .sonar .api .config .Settings ;
3031import org .sonar .api .measures .CoreMetrics ;
31- import org .sonar .api .resources . Project ;
32+ import org .sonar .api .measures . Metric ;
3233
33- import static org .mockito .Matchers .anyDouble ;
3434import static org .mockito .Matchers .eq ;
3535import static org .mockito .Mockito .mock ;
3636import static org .mockito .Mockito .verify ;
3737import static org .mockito .Mockito .verifyNoMoreInteractions ;
38+ import static org .assertj .core .api .Assertions .assertThat ;
3839
3940public class PythonXUnitSensorTest {
41+
42+ private File baseDir = new File ("src/test/resources/org/sonar/plugins/python" );
4043 Settings settings ;
4144 PythonXUnitSensor sensor ;
42- SensorContext context ;
43- Project project ;
45+ SensorContextTester context = SensorContextTester .create (baseDir );
4446 DefaultFileSystem fs ;
4547
4648 @ Before
4749 public void setUp () {
4850 settings = new MapSettings ();
49- project = mock (Project .class );
50- fs = new DefaultFileSystem (new File ("src/test/resources/org/sonar/plugins/python" ));
51- context = mock (SensorContext .class );
51+ fs = new DefaultFileSystem (baseDir );
5252 sensor = new PythonXUnitSensor (settings , fs );
5353 }
5454
@@ -58,55 +58,61 @@ public void shouldSaveCorrectMeasures() {
5858 DefaultInputFile testFile2 = new DefaultInputFile ("" , "tests/dir/test_sample2.py" );
5959 fs .add (testFile1 );
6060 fs .add (testFile2 );
61- sensor .analyse ( project , context );
61+ sensor .execute ( context );
6262
63- verify (context ).saveMeasure (testFile1 , CoreMetrics .TESTS , 3. );
64- verify (context ).saveMeasure (testFile2 , CoreMetrics .TESTS , 3. );
65- verify (context ).saveMeasure (testFile1 , CoreMetrics .TESTS , 0. );
63+ assertThat (measure (testFile1 , CoreMetrics .TESTS )).isEqualTo (3 );
64+ assertThat (measure (testFile2 , CoreMetrics .TESTS )).isEqualTo (3 );
6665
67- verify (context ).saveMeasure (testFile1 , CoreMetrics .SKIPPED_TESTS , 0. );
68- verify (context ).saveMeasure (testFile2 , CoreMetrics .SKIPPED_TESTS , 1. );
69- verify (context ).saveMeasure (testFile1 , CoreMetrics .SKIPPED_TESTS , 1. );
66+ assertThat (measure (testFile1 , CoreMetrics .SKIPPED_TESTS )).isEqualTo (0 );
67+ assertThat (measure (testFile2 , CoreMetrics .SKIPPED_TESTS )).isEqualTo (1 );
7068
71- verify (context ).saveMeasure (testFile1 , CoreMetrics .TEST_ERRORS , 1. );
72- verify (context ).saveMeasure (testFile2 , CoreMetrics .TEST_ERRORS , 1. );
73- verify (context ).saveMeasure (testFile1 , CoreMetrics .TEST_ERRORS , 0. );
69+ assertThat (measure (testFile1 , CoreMetrics .TEST_ERRORS )).isEqualTo (1 );
70+ assertThat (measure (testFile2 , CoreMetrics .TEST_ERRORS )).isEqualTo (1 );
7471
75- verify (context ).saveMeasure (testFile1 , CoreMetrics .TEST_FAILURES , 1. );
76- verify (context ).saveMeasure (testFile2 , CoreMetrics .TEST_FAILURES , 1. );
77- verify (context ).saveMeasure (testFile1 , CoreMetrics .TEST_FAILURES , 0. );
72+ assertThat (measure (testFile1 , CoreMetrics .TEST_FAILURES )).isEqualTo (1 );
73+ assertThat (measure (testFile2 , CoreMetrics .TEST_FAILURES )).isEqualTo (1 );
7874 }
7975
8076 @ Test
8177 public void shouldSaveCorrectMeasuresSimpleMode () {
8278 settings .setProperty (PythonXUnitSensor .SKIP_DETAILS , true );
8379 fs .add (new DefaultInputFile ("" , "test_sample.py" ));
8480 fs .add (new DefaultInputFile ("" , "tests/dir/test_sample.py" ));
85- sensor .analyse ( project , context );
81+ sensor .execute ( context );
8682
8783 // includes test with not found file
88- verify (context ).saveMeasure (CoreMetrics .TESTS , 7. );
89- verify (context ).saveMeasure (CoreMetrics .SKIPPED_TESTS , 2. );
90- // includes test with not found file
91- verify (context ).saveMeasure (CoreMetrics .TEST_ERRORS , 3. );
92- verify (context ).saveMeasure (CoreMetrics .TEST_FAILURES , 2. );
93- verify (context ).saveMeasure (eq (CoreMetrics .TEST_EXECUTION_TIME ), anyDouble ());
94- verifyNoMoreInteractions (context );
84+ assertThat (moduleMeasure (CoreMetrics .TESTS )).isEqualTo (7 );
85+ assertThat (moduleMeasure (CoreMetrics .SKIPPED_TESTS )).isEqualTo (1 );
86+ assertThat (moduleMeasure (CoreMetrics .TEST_ERRORS )).isEqualTo (3 );
87+ assertThat (moduleMeasure (CoreMetrics .TEST_FAILURES )).isEqualTo (2 );
9588 }
9689
9790 @ Test
9891 public void shouldReportNothingWhenNoReportFound () {
92+ DefaultInputFile testFile1 = new DefaultInputFile ("" , "test_sample1.py" );
93+ fs .add (testFile1 );
94+
9995 settings .setProperty (PythonXUnitSensor .REPORT_PATH_KEY , "notexistingpath" );
10096 sensor = new PythonXUnitSensor (settings , fs );
101- sensor .analyse ( project , context );
97+ sensor .execute ( context );
10298
103- verifyNoMoreInteractions (context );
99+ assertThat (context .measures (context .module ().key ())).isEmpty ();
100+ assertThat (context .measures (testFile1 .key ())).isEmpty ();
104101 }
105102
106103 @ Test (expected = IllegalStateException .class )
107104 public void shouldThrowWhenGivenInvalidTime () {
108105 settings .setProperty (PythonXUnitSensor .REPORT_PATH_KEY , "xunit-reports/invalid-time-xunit-report.xml" );
109106 sensor = new PythonXUnitSensor (settings , fs );
110- sensor .analyse ( project , context );
107+ sensor .execute ( context );
111108 }
109+
110+ private Integer moduleMeasure (Metric <Integer > metric ) {
111+ return measure (context .module (), metric );
112+ }
113+
114+ private Integer measure (InputComponent component , Metric <Integer > metric ) {
115+ return context .measure (component .key (), metric ).value ();
116+ }
117+
112118}
0 commit comments