Skip to content

Commit efcd828

Browse files
authored
SONARPY-2406 Fix coverage by moving files between packages (#2208)
1 parent b138625 commit efcd828

19 files changed

+151
-78
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* SonarQube Python Plugin
3+
* Copyright (C) 2011-2024 SonarSource SA
4+
* mailto:info AT sonarsource DOT com
5+
*
6+
* This program is free software; you can redistribute it and/or
7+
* modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
* See the Sonar Source-Available License for more details.
13+
*
14+
* You should have received a copy of the Sonar Source-Available License
15+
* along with this program; if not, see https://sonarsource.com/license/ssal/
16+
*/
17+
package org.sonar.plugins.python;
18+
19+
import java.util.List;
20+
import java.util.Map;
21+
import org.sonar.python.EscapeCharPositionInfo;
22+
23+
public class NotebookTestUtils {
24+
25+
private NotebookTestUtils() {
26+
// Utility class
27+
}
28+
29+
public static List<EscapeCharPositionInfo> mapToColumnMappingList(Map<Integer, Integer> map) {
30+
return map.entrySet().stream()
31+
.sorted(Map.Entry.comparingByKey())
32+
.map(entry -> new EscapeCharPositionInfo(entry.getKey(), entry.getValue()))
33+
.toList();
34+
}
35+
}

sonar-python-plugin/src/test/java/org/sonar/plugins/python/IpynbNotebookParserTest.java renamed to python-frontend/src/test/java/org/sonar/plugins/python/IpynbNotebookParserTest.java

Lines changed: 18 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,37 @@
1818

1919
import java.io.File;
2020
import java.io.IOException;
21+
import java.nio.charset.StandardCharsets;
22+
import java.nio.file.Files;
2123
import java.util.List;
2224
import java.util.Map;
2325
import org.junit.jupiter.api.Test;
2426
import org.sonar.api.batch.fs.InputFile;
27+
import org.sonar.api.batch.fs.internal.TestInputFileBuilder;
2528
import org.sonar.api.internal.apachecommons.lang3.StringUtils;
26-
import org.sonar.plugins.python.api.IssueLocation;
27-
import org.sonar.plugins.python.api.PythonVisitorContext;
2829
import org.sonar.python.IPythonLocation;
29-
import org.sonar.python.TestPythonVisitorRunner;
30-
import org.sonar.python.checks.TrailingWhitespaceCheck;
3130

3231
import static org.assertj.core.api.Assertions.assertThat;
3332
import static org.assertj.core.api.Assertions.assertThatThrownBy;
34-
import static org.sonar.plugins.python.TestUtils.createInputFile;
35-
import static org.sonar.plugins.python.TestUtils.mapToColumnMappingList;
33+
import static org.sonar.plugins.python.NotebookTestUtils.mapToColumnMappingList;
3634

3735
class IpynbNotebookParserTest {
3836
private final File baseDir = new File("src/test/resources/org/sonar/plugins/python").getAbsoluteFile();
3937

38+
public static PythonInputFile createInputFile(File baseDir, String name, InputFile.Status status, InputFile.Type type) {
39+
try {
40+
return new PythonInputFileImpl(TestInputFileBuilder.create("moduleKey", name)
41+
.setModuleBaseDir(baseDir.toPath())
42+
.setCharset(StandardCharsets.UTF_8)
43+
.setStatus(status)
44+
.setType(type)
45+
.setLanguage("py")
46+
.initMetadata(Files.readString(new File(baseDir, name).toPath()))
47+
.build());
48+
} catch (IOException e) {
49+
throw new IllegalStateException("Cannot read " + name + " from base directory" + baseDir, e);
50+
}
51+
}
4052
@Test
4153
void testParseNotebook() throws IOException {
4254
var inputFile = createInputFile(baseDir, "notebook.ipynb", InputFile.Status.CHANGED, InputFile.Type.MAIN);
@@ -238,65 +250,4 @@ void testParseNotebook1() throws IOException {
238250
assertThat(result.contents()).isEmpty();
239251
}
240252

241-
@Test
242-
void trailing_whitespace() throws IOException {
243-
var inputFile = createInputFile(baseDir, "notebook_trailing_whitespace.ipynb", InputFile.Status.CHANGED, InputFile.Type.MAIN);
244-
var result = IpynbNotebookParser.parseNotebook(inputFile).get();
245-
var check = new TrailingWhitespaceCheck();
246-
var context = new PythonVisitorContext(
247-
TestPythonVisitorRunner.parseNotebookFile(result.locationMap(), result.contents()),
248-
SonarQubePythonFile.create(result),
249-
null,
250-
"");
251-
check.scanFile(context);
252-
253-
var issues = context.getIssues();
254-
assertThat(issues).hasSize(3);
255-
256-
assertThat(issues.get(0).primaryLocation().startLine()).isEqualTo(14);
257-
assertThat(issues.get(0).primaryLocation().endLine()).isEqualTo(14);
258-
assertThat(issues.get(0).primaryLocation().startLineOffset()).isEqualTo(IssueLocation.UNDEFINED_OFFSET);
259-
assertThat(issues.get(0).primaryLocation().endLineOffset()).isEqualTo(IssueLocation.UNDEFINED_OFFSET);
260-
261-
assertThat(issues.get(1).primaryLocation().startLine()).isEqualTo(17);
262-
assertThat(issues.get(1).primaryLocation().endLine()).isEqualTo(17);
263-
assertThat(issues.get(1).primaryLocation().startLineOffset()).isEqualTo(IssueLocation.UNDEFINED_OFFSET);
264-
assertThat(issues.get(1).primaryLocation().endLineOffset()).isEqualTo(IssueLocation.UNDEFINED_OFFSET);
265-
266-
assertThat(issues.get(2).primaryLocation().startLine()).isEqualTo(20);
267-
assertThat(issues.get(2).primaryLocation().endLine()).isEqualTo(20);
268-
assertThat(issues.get(2).primaryLocation().startLineOffset()).isEqualTo(IssueLocation.UNDEFINED_OFFSET);
269-
assertThat(issues.get(2).primaryLocation().endLineOffset()).isEqualTo(IssueLocation.UNDEFINED_OFFSET);
270-
}
271-
272-
@Test
273-
void trailing_whitespace_compressed() throws IOException {
274-
var inputFile = createInputFile(baseDir, "notebook_trailing_whitespace_compressed.ipynb", InputFile.Status.CHANGED, InputFile.Type.MAIN);
275-
var result = IpynbNotebookParser.parseNotebook(inputFile).get();
276-
var check = new TrailingWhitespaceCheck();
277-
var context = new PythonVisitorContext(
278-
TestPythonVisitorRunner.parseNotebookFile(result.locationMap(), result.contents()),
279-
SonarQubePythonFile.create(result),
280-
null,
281-
"");
282-
check.scanFile(context);
283-
284-
var issues = context.getIssues();
285-
assertThat(issues).hasSize(3);
286-
287-
assertThat(issues.get(0).primaryLocation().startLine()).isEqualTo(1);
288-
assertThat(issues.get(0).primaryLocation().endLine()).isEqualTo(1);
289-
assertThat(issues.get(0).primaryLocation().startLineOffset()).isEqualTo(142);
290-
assertThat(issues.get(0).primaryLocation().endLineOffset()).isEqualTo(157); // Should be 154
291-
292-
assertThat(issues.get(1).primaryLocation().startLine()).isEqualTo(1);
293-
assertThat(issues.get(1).primaryLocation().endLine()).isEqualTo(1);
294-
assertThat(issues.get(1).primaryLocation().startLineOffset()).isEqualTo(199);
295-
assertThat(issues.get(1).primaryLocation().endLineOffset()).isEqualTo(207); // Should be 204
296-
297-
assertThat(issues.get(2).primaryLocation().startLine()).isEqualTo(1);
298-
assertThat(issues.get(2).primaryLocation().endLine()).isEqualTo(1);
299-
assertThat(issues.get(2).primaryLocation().startLineOffset()).isEqualTo(249);
300-
assertThat(issues.get(2).primaryLocation().endLineOffset()).isEqualTo(249); // Should be 255
301-
}
302253
}

0 commit comments

Comments
 (0)