|
16 | 16 | */ |
17 | 17 | package org.sonar.plugins.xml; |
18 | 18 |
|
| 19 | +import com.google.gson.Gson; |
19 | 20 | import java.io.File; |
20 | 21 | import java.io.IOException; |
21 | 22 | import java.nio.charset.StandardCharsets; |
22 | 23 | import java.nio.file.Path; |
23 | | -import java.util.Arrays; |
24 | | -import org.junit.jupiter.api.BeforeEach; |
| 24 | +import java.util.Map; |
25 | 25 | import org.junit.jupiter.api.Test; |
26 | 26 | import org.sonar.api.batch.fs.InputFile; |
27 | 27 | import org.sonar.api.batch.fs.internal.TestInputFileBuilder; |
28 | 28 | import org.sonar.api.batch.sensor.internal.SensorContextTester; |
29 | 29 | import org.sonar.api.measures.CoreMetrics; |
30 | | -import org.sonar.api.measures.FileLinesContext; |
31 | | -import org.sonar.api.measures.FileLinesContextFactory; |
32 | 30 | import org.sonarsource.analyzer.commons.xml.ParseException; |
33 | 31 | import org.sonarsource.analyzer.commons.xml.XmlFile; |
34 | 32 |
|
35 | 33 | import static org.assertj.core.api.Assertions.assertThat; |
36 | 34 | import static org.junit.jupiter.api.Assertions.assertThrows; |
37 | | -import static org.mockito.ArgumentMatchers.any; |
38 | | -import static org.mockito.Mockito.mock; |
39 | | -import static org.mockito.Mockito.verify; |
40 | | -import static org.mockito.Mockito.verifyNoMoreInteractions; |
41 | | -import static org.mockito.Mockito.when; |
42 | 35 |
|
43 | 36 | class LineCounterTest { |
44 | 37 |
|
45 | | - private FileLinesContextFactory fileLinesContextFactory; |
46 | | - private FileLinesContext fileLinesContext; |
47 | | - |
48 | | - @BeforeEach |
49 | | - void setUp() { |
50 | | - fileLinesContextFactory = mock(FileLinesContextFactory.class); |
51 | | - fileLinesContext = mock(FileLinesContext.class); |
52 | | - when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(fileLinesContext); |
53 | | - } |
54 | | - |
55 | 38 | @Test |
56 | 39 | void test_simple_file() throws IOException { |
57 | | - verifyMetrics("simple.xml", 1, |
58 | | - 1, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18); |
| 40 | + verifyMetrics("simple.xml", 1, """ |
| 41 | + {"ncloc_data":{"1":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1}}"""); |
59 | 42 | } |
60 | 43 |
|
61 | 44 | @Test |
62 | 45 | void test_complex_file() throws IOException { |
63 | | - verifyMetrics("complex.xml", 17, |
64 | | - 1, 2, 3, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 25, 26, 27, 34, 35, 36, 37, 38, 39); |
| 46 | + verifyMetrics("complex.xml", 17, """ |
| 47 | + {"ncloc_data":{"1":1,"2":1,"3":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"22":1,"25":1,"26":1,"27":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1}}"""); |
65 | 48 | } |
66 | 49 |
|
67 | 50 | @Test |
68 | 51 | void test_invalid_file() { |
69 | | - assertThrows(ParseException.class, () -> verifyMetrics("invalid.xml", -1)); |
| 52 | + assertThrows(ParseException.class, () -> verifyMetrics("invalid.xml", -1, "")); |
70 | 53 | } |
71 | 54 |
|
72 | 55 | @Test // SONARXML-19 |
73 | 56 | void test_file_with_char_before_prolog() throws Exception { |
74 | | - verifyMetrics("char_before_prolog.xml", 1, 3, 6, 7, 8, 9, 10, 11, 12, 13); |
| 57 | + verifyMetrics("char_before_prolog.xml", 1, """ |
| 58 | + {"ncloc_data":{"3":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1}}"""); |
75 | 59 | } |
76 | 60 |
|
77 | | - private void verifyMetrics(String filename, int commentLinesNumber, int... linesOfCode) throws IOException { |
| 61 | + private void verifyMetrics(String filename, int commentLinesNumber, String linesMetrics) throws IOException { |
78 | 62 | File moduleBaseDir = new File("src/test/resources/parsers/linecount"); |
79 | 63 | SensorContextTester context = SensorContextTester.create(moduleBaseDir); |
80 | 64 | InputFile inputFile = createInputFile(moduleBaseDir.toPath(), filename); |
81 | | - LineCounter.analyse(context, fileLinesContextFactory, XmlFile.create(inputFile)); |
82 | | - |
83 | | - Arrays.stream(linesOfCode).forEach(line -> |
84 | | - verify(fileLinesContext).setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, 1)); |
85 | | - |
86 | | - verify(fileLinesContext).save(); |
87 | | - verifyNoMoreInteractions(fileLinesContext); |
88 | | - |
89 | | - assertThat(context.measure(inputFile.key(), CoreMetrics.NCLOC).value()).isEqualTo(linesOfCode.length); |
| 65 | + var fileLinesContext = new FileLinesContextTester(); |
| 66 | + LineCounter.analyse(context, fileLinesContext, XmlFile.create(inputFile)); |
| 67 | + Map<String, Map<Integer, Object>> metrics = fileLinesContext.metrics(inputFile); |
| 68 | + assertThat(new Gson().toJson(metrics)).isEqualTo(linesMetrics); |
| 69 | + int expectedNcloc = metrics.get(CoreMetrics.NCLOC_DATA_KEY).size(); |
| 70 | + assertThat(context.measure(inputFile.key(), CoreMetrics.NCLOC).value()).isEqualTo(expectedNcloc); |
90 | 71 | assertThat(context.measure(inputFile.key(), CoreMetrics.COMMENT_LINES).value()).isEqualTo(commentLinesNumber); |
91 | 72 | } |
92 | 73 |
|
|
0 commit comments