2424import org .assertj .core .api .SoftAssertions ;
2525import org .junit .Before ;
2626import org .junit .Test ;
27- import org .mockito .Mockito ;
2827import static org .mockito .Mockito .when ;
2928import org .sonar .api .batch .fs .internal .DefaultFileSystem ;
3029import org .sonar .api .batch .fs .internal .TestInputFileBuilder ;
3130import org .sonar .api .batch .sensor .internal .DefaultSensorDescriptor ;
3231import org .sonar .api .batch .sensor .internal .SensorContextTester ;
33- import org .sonar .api .config .Configuration ;
3432import org .sonar .api .config .internal .MapSettings ;
3533import org .sonar .cxx .CxxLanguage ;
3634import org .sonar .cxx .sensors .utils .TestUtils ;
@@ -40,22 +38,28 @@ public class CxxClangTidySensorTest {
4038 private DefaultFileSystem fs ;
4139 private CxxLanguage language ;
4240 private final MapSettings settings = new MapSettings ();
43- private final String [] reportName = {"clang-tidy-reports/cpd.report.txt" };
4441
4542 @ Before
4643 public void setUp () {
4744 fs = TestUtils .mockFileSystem ();
4845 language = TestUtils .mockCxxLanguage ();
49- when (language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY )).thenReturn ("sonar.cxx." + CxxClangTidySensor .REPORT_PATH_KEY );
50- when (language .getPluginProperty (CxxClangTidySensor .REPORT_CHARSET_DEF )).thenReturn ("UTF-8" );
51- when (language .IsRecoveryEnabled ()).thenReturn (Optional .of (Boolean .TRUE ));
46+
47+ when (language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY )).
48+ thenReturn ("sonar.cxx." + CxxClangTidySensor .REPORT_PATH_KEY );
49+ when (language .getPluginProperty (CxxClangTidySensor .REPORT_CHARSET_DEF )).
50+ thenReturn ("UTF-8" );
51+ when (language .IsRecoveryEnabled ()).
52+ thenReturn (Optional .of (Boolean .TRUE ));
5253 }
5354
5455 @ Test
5556 public void shouldIgnoreIssuesIfResourceNotFound () {
5657 SensorContextTester context = SensorContextTester .create (fs .baseDir ());
5758
58- settings .setProperty (language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ), reportName [0 ]);
59+ settings .setProperty (
60+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
61+ "clang-tidy-reports/cpd.error.txt"
62+ );
5963 context .setSettings (settings );
6064
6165 CxxClangTidySensor sensor = new CxxClangTidySensor (language );
@@ -64,33 +68,82 @@ public void shouldIgnoreIssuesIfResourceNotFound() {
6468 }
6569
6670 @ Test
67- public void shouldReportCorrectViolations () {
71+ public void shouldReportErrors () {
6872 SensorContextTester context = SensorContextTester .create (fs .baseDir ());
6973
70- settings .setProperty (language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ), reportName [0 ]);
74+ settings .setProperty (
75+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
76+ "clang-tidy-reports/cpd.report-error.txt"
77+ );
7178 context .setSettings (settings );
7279
73- context .fileSystem ().add (TestInputFileBuilder .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
74- .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " ).build ());
80+ context .fileSystem ().add (TestInputFileBuilder
81+ .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
82+ .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " )
83+ .build ());
7584
7685 CxxClangTidySensor sensor = new CxxClangTidySensor (language );
86+ sensor .execute (context );
87+ assertThat (context .allIssues ()).hasSize (1 );
88+ }
7789
78- Configuration settings = Mockito .mock (Configuration .class );
79- when (settings .getStringArray ("sonar.cxx." + CxxClangTidySensor .REPORT_PATH_KEY )).thenReturn (reportName );
90+ @ Test
91+ public void shouldReportWarnings () {
92+ SensorContextTester context = SensorContextTester .create (fs .baseDir ());
8093
94+ settings .setProperty (
95+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
96+ "clang-tidy-reports/cpd.report-warning.txt"
97+ );
98+ context .setSettings (settings );
99+
100+ context .fileSystem ().add (TestInputFileBuilder .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
101+ .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " ).build ());
102+
103+ CxxClangTidySensor sensor = new CxxClangTidySensor (language );
81104 sensor .execute (context );
82105 assertThat (context .allIssues ()).hasSize (1 );
83106 }
84107
108+ @ Test
109+ public void shouldReportFlow () {
110+ SensorContextTester context = SensorContextTester .create (fs .baseDir ());
111+
112+ settings .setProperty (
113+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
114+ "clang-tidy-reports/cpd.report-note.txt"
115+ );
116+ context .setSettings (settings );
117+
118+ context .fileSystem ().add (TestInputFileBuilder
119+ .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
120+ .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " )
121+ .build ());
122+
123+ CxxClangTidySensor sensor = new CxxClangTidySensor (language );
124+ sensor .execute (context );
125+
126+ SoftAssertions softly = new SoftAssertions ();
127+ softly .assertThat (context .allIssues ()).hasSize (1 ); // one issue
128+ softly .assertThat (context .allIssues ().iterator ().next ().flows ()).hasSize (1 ); // with one flow
129+ softly .assertThat (context .allIssues ().iterator ().next ().flows ().get (0 ).locations ()).hasSize (4 ); // with four items
130+ softly .assertAll ();
131+ }
132+
85133 @ Test
86134 public void invalidReportReportsNoIssues () {
87135 SensorContextTester context = SensorContextTester .create (fs .baseDir ());
88136
89- settings .setProperty (language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ), "clang-tidy-reports/cpd.report-empty.txt" );
137+ settings .setProperty (
138+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
139+ "clang-tidy-reports/cpd.report-empty.txt"
140+ );
90141 context .setSettings (settings );
91142
92- context .fileSystem ().add (TestInputFileBuilder .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
93- .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " ).build ());
143+ context .fileSystem ().add (TestInputFileBuilder
144+ .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
145+ .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " )
146+ .build ());
94147
95148 CxxClangTidySensor sensor = new CxxClangTidySensor (language );
96149
@@ -105,9 +158,12 @@ public void sensorDescriptor() {
105158 sensor .describe (descriptor );
106159
107160 SoftAssertions softly = new SoftAssertions ();
108- softly .assertThat (descriptor .name ()).isEqualTo (language .getName () + " ClangTidySensor" );
109- softly .assertThat (descriptor .languages ()).containsOnly (language .getKey ());
110- softly .assertThat (descriptor .ruleRepositories ()).containsOnly (CxxClangTidyRuleRepository .getRepositoryKey (language ));
161+ softly .assertThat (descriptor .name ())
162+ .isEqualTo (language .getName () + " ClangTidySensor" );
163+ softly .assertThat (descriptor .languages ())
164+ .containsOnly (language .getKey ());
165+ softly .assertThat (descriptor .ruleRepositories ())
166+ .containsOnly (CxxClangTidyRuleRepository .getRepositoryKey (language ));
111167 softly .assertAll ();
112168 }
113169
0 commit comments