2828import org .junit .Rule ;
2929import org .junit .Test ;
3030import org .mockito .Mockito ;
31+ import org .sonar .api .SonarEdition ;
32+ import org .sonar .api .SonarQubeSide ;
33+ import org .sonar .api .SonarRuntime ;
3134import org .sonar .api .batch .fs .InputFile ;
3235import org .sonar .api .batch .fs .internal .DefaultFileSystem ;
3336import org .sonar .api .batch .fs .internal .DefaultInputFile ;
3639import org .sonar .api .batch .rule .CheckFactory ;
3740import org .sonar .api .batch .rule .internal .ActiveRulesBuilder ;
3841import org .sonar .api .batch .rule .internal .NewActiveRule ;
42+ import org .sonar .api .batch .sensor .SensorDescriptor ;
3943import org .sonar .api .batch .sensor .highlighting .TypeOfText ;
4044import org .sonar .api .batch .sensor .internal .DefaultSensorDescriptor ;
4145import org .sonar .api .batch .sensor .internal .SensorContextTester ;
46+ import org .sonar .api .internal .SonarRuntimeImpl ;
4247import org .sonar .api .measures .CoreMetrics ;
4348import org .sonar .api .measures .FileLinesContext ;
4449import org .sonar .api .measures .FileLinesContextFactory ;
4550import org .sonar .api .rule .RuleKey ;
51+ import org .sonar .api .utils .Version ;
4652import org .sonar .api .utils .log .LogTester ;
4753import org .sonar .api .utils .log .LoggerLevel ;
4854import org .sonar .plugins .flex .core .Flex ;
4955
5056import static org .assertj .core .api .Assertions .assertThat ;
57+ import static org .junit .Assert .assertTrue ;
5158import static org .mockito .Mockito .mock ;
5259import static org .mockito .Mockito .when ;
5360
5461public class FlexSquidSensorTest {
5562
5663 private static final File TEST_DIR = new File ("src/test/resources/org/sonar/plugins/flex/squid" );
64+ private static final SonarRuntime SONARQUBE_89 = SonarRuntimeImpl .forSonarQube (Version .create (8 , 9 ), SonarQubeSide .SCANNER , SonarEdition .DEVELOPER );
5765
5866 private FlexSquidSensor sensor ;
5967 private SensorContextTester tester ;
@@ -62,17 +70,22 @@ public class FlexSquidSensorTest {
6270 public LogTester logTester = new LogTester ();
6371
6472 @ Before
65- public void setUp () throws Exception {
73+ public void setUp () {
74+ createSensor (SONARQUBE_89 );
75+ tester = SensorContextTester .create (TEST_DIR );
76+ logTester .clear ();
77+ }
78+
79+ private FlexSquidSensor createSensor (SonarRuntime sonarRuntime ) {
6680 ActiveRulesBuilder activeRulesBuilder = new ActiveRulesBuilder ();
6781 activeRulesBuilder .addRule (new NewActiveRule .Builder ().setRuleKey (RuleKey .of ("flex" , "S1125" )).setSeverity ("BLOCKER" ).build ());
6882 ActiveRules activeRules = activeRulesBuilder .build ();
6983 CheckFactory checkFactory = new CheckFactory (activeRules );
7084 FileLinesContextFactory fileLinesContextFactory = mock (FileLinesContextFactory .class );
7185 FileLinesContext fileLinesContext = mock (FileLinesContext .class );
7286 when (fileLinesContextFactory .createFor (Mockito .any (InputFile .class ))).thenReturn (fileLinesContext );
73- sensor = new FlexSquidSensor (checkFactory , fileLinesContextFactory );
74- tester = SensorContextTester .create (TEST_DIR );
75- logTester .clear ();
87+ sensor = new FlexSquidSensor (sonarRuntime , checkFactory , fileLinesContextFactory );
88+ return sensor ;
7689 }
7790
7891 @ Test
@@ -166,4 +179,37 @@ public void testDescriptor() {
166179 assertThat (descriptor .name ()).isEqualTo ("Flex" );
167180 assertThat (descriptor .languages ()).containsOnly ("flex" );
168181 }
182+
183+ @ Test
184+ public void test_descriptor_sonarlint () {
185+ DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor ();
186+ createSensor (SonarRuntimeImpl .forSonarLint (Version .create (6 , 5 ))).describe (descriptor );
187+ assertThat (descriptor .name ()).isEqualTo ("Flex" );
188+ assertThat (descriptor .languages ()).containsOnly ("flex" );
189+ }
190+
191+ @ Test
192+ public void test_descriptor_sonarqube_9_3 () {
193+ final boolean [] called = {false };
194+ DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor () {
195+ public SensorDescriptor processesFilesIndependently () {
196+ called [0 ] = true ;
197+ return this ;
198+ }
199+ };
200+ createSensor (SonarRuntimeImpl .forSonarQube (Version .create (9 , 3 ), SonarQubeSide .SCANNER , SonarEdition .DEVELOPER )).describe (descriptor );
201+ assertThat (descriptor .name ()).isEqualTo ("Flex" );
202+ assertThat (descriptor .languages ()).containsOnly ("flex" );
203+ assertTrue (called [0 ]);
204+ }
205+
206+ @ Test
207+ public void test_descriptor_sonarqube_9_3_reflection_failure () {
208+ DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor ();
209+ createSensor (SonarRuntimeImpl .forSonarQube (Version .create (9 , 3 ), SonarQubeSide .SCANNER , SonarEdition .DEVELOPER )).describe (descriptor );
210+ assertThat (descriptor .name ()).isEqualTo ("Flex" );
211+ assertThat (descriptor .languages ()).containsOnly ("flex" );
212+ assertTrue (logTester .logs ().contains ("Could not call SensorDescriptor.processesFilesIndependently() method" ));
213+ }
214+
169215}
0 commit comments