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,100 @@ public void shouldIgnoreIssuesIfResourceNotFound() {
6468 }
6569
6670 @ Test
67- public void shouldReportCorrectViolations () {
71+ public void shouldReportErrors () {
72+ SensorContextTester context = SensorContextTester .create (fs .baseDir ());
73+
74+ settings .setProperty (
75+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
76+ "clang-tidy-reports/cpd.report-error.txt"
77+ );
78+ context .setSettings (settings );
79+
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 ());
84+
85+ CxxClangTidySensor sensor = new CxxClangTidySensor (language );
86+ sensor .execute (context );
87+ assertThat (context .allIssues ()).hasSize (1 );
88+ }
89+
90+ @ Test
91+ public void shouldReportWarnings () {
6892 SensorContextTester context = SensorContextTester .create (fs .baseDir ());
6993
70- settings .setProperty (language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ), reportName [0 ]);
94+ settings .setProperty (
95+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
96+ "clang-tidy-reports/cpd.report-warning.txt"
97+ );
7198 context .setSettings (settings );
7299
73100 context .fileSystem ().add (TestInputFileBuilder .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
74- .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " ).build ());
101+ .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " ).build ());
75102
76103 CxxClangTidySensor sensor = new CxxClangTidySensor (language );
104+ sensor .execute (context );
105+ assertThat (context .allIssues ()).hasSize (1 );
106+ }
107+
108+ @ Test
109+ public void shouldReportNodiscard () {
110+ SensorContextTester context = SensorContextTester .create (fs .baseDir ());
77111
78- Configuration settings = Mockito .mock (Configuration .class );
79- when (settings .getStringArray ("sonar.cxx." + CxxClangTidySensor .REPORT_PATH_KEY )).thenReturn (reportName );
112+ settings .setProperty (
113+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
114+ "clang-tidy-reports/cpd.report-nodiscard.txt"
115+ );
116+ context .setSettings (settings );
117+
118+ context .fileSystem ().add (TestInputFileBuilder .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
119+ .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " ).build ());
80120
121+ CxxClangTidySensor sensor = new CxxClangTidySensor (language );
81122 sensor .execute (context );
82123 assertThat (context .allIssues ()).hasSize (1 );
83124 }
84125
126+ @ Test
127+ public void shouldReportFlow () {
128+ SensorContextTester context = SensorContextTester .create (fs .baseDir ());
129+
130+ settings .setProperty (
131+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
132+ "clang-tidy-reports/cpd.report-note.txt"
133+ );
134+ context .setSettings (settings );
135+
136+ context .fileSystem ().add (TestInputFileBuilder
137+ .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
138+ .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " )
139+ .build ());
140+
141+ CxxClangTidySensor sensor = new CxxClangTidySensor (language );
142+ sensor .execute (context );
143+
144+ SoftAssertions softly = new SoftAssertions ();
145+ softly .assertThat (context .allIssues ()).hasSize (1 ); // one issue
146+ softly .assertThat (context .allIssues ().iterator ().next ().flows ()).hasSize (1 ); // with one flow
147+ softly .assertThat (context .allIssues ().iterator ().next ().flows ().get (0 ).locations ()).hasSize (4 ); // with four items
148+ softly .assertAll ();
149+ }
150+
85151 @ Test
86152 public void invalidReportReportsNoIssues () {
87153 SensorContextTester context = SensorContextTester .create (fs .baseDir ());
88154
89- settings .setProperty (language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ), "clang-tidy-reports/cpd.report-empty.txt" );
155+ settings .setProperty (
156+ language .getPluginProperty (CxxClangTidySensor .REPORT_PATH_KEY ),
157+ "clang-tidy-reports/cpd.report-empty.txt"
158+ );
90159 context .setSettings (settings );
91160
92- context .fileSystem ().add (TestInputFileBuilder .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
93- .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " ).build ());
161+ context .fileSystem ().add (TestInputFileBuilder
162+ .create ("ProjectKey" , "sources/utils/code_chunks.cpp" )
163+ .setLanguage ("cpp" ).initMetadata ("asd\n asdas\n asda\n " )
164+ .build ());
94165
95166 CxxClangTidySensor sensor = new CxxClangTidySensor (language );
96167
@@ -105,9 +176,12 @@ public void sensorDescriptor() {
105176 sensor .describe (descriptor );
106177
107178 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 ));
179+ softly .assertThat (descriptor .name ())
180+ .isEqualTo (language .getName () + " ClangTidySensor" );
181+ softly .assertThat (descriptor .languages ())
182+ .containsOnly (language .getKey ());
183+ softly .assertThat (descriptor .ruleRepositories ())
184+ .containsOnly (CxxClangTidyRuleRepository .getRepositoryKey (language ));
111185 softly .assertAll ();
112186 }
113187
0 commit comments