1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.eluder.coveralls.maven.plugin.logging;
26
27 import java.io.IOException;
28
29 import org.apache.maven.plugin.logging.Log;
30 import org.eluder.coveralls.maven.plugin.ProcessingException;
31 import org.eluder.coveralls.maven.plugin.domain.Source;
32 import org.eluder.coveralls.maven.plugin.logging.Logger.Position;
33 import org.eluder.coveralls.maven.plugin.source.SourceCallback;
34 import org.eluder.coveralls.maven.plugin.source.UniqueSourceCallback;
35 import org.junit.jupiter.api.Assertions;
36 import org.junit.jupiter.api.Test;
37 import org.junit.jupiter.api.extension.ExtendWith;
38 import org.mockito.ArgumentMatchers;
39 import org.mockito.Mock;
40 import org.mockito.Mockito;
41 import org.mockito.junit.jupiter.MockitoExtension;
42
43
44
45
46 @ExtendWith(MockitoExtension.class)
47 class CoverageTracingLoggerTest {
48
49
50 @Mock
51 Log logMock;
52
53
54 @Mock
55 SourceCallback sourceCallbackMock;
56
57
58
59
60 @Test
61 void constructorWithNull() {
62 Assertions.assertThrows(IllegalArgumentException.class, () -> new CoverageTracingLogger(null));
63 }
64
65
66
67
68 @Test
69 void position() {
70 Assertions.assertEquals(Position.AFTER, new CoverageTracingLogger(this.sourceCallbackMock).getPosition());
71 }
72
73
74
75
76
77
78
79
80
81 @Test
82 void logForSources() throws ProcessingException, IOException {
83 final var source1 = new Source("Source1.java", "public class Source1 {\n if(true) { }\n}\n",
84 "FE0538639E8CE73733E77659C1043B5C");
85 source1.addCoverage(1, 0);
86 source1.addCoverage(2, 0);
87 source1.addCoverage(3, 0);
88 source1.addBranchCoverage(2, 0, 0, 3);
89 source1.addBranchCoverage(2, 0, 1, 0);
90 final var source2 = new Source("Source2.java",
91 "public class Source2 {\n new Interface() { public void run() { } };\n}\n",
92 "34BD6501A6D1CE5181AECEA688C7D382");
93 source2.addCoverage(1, 1);
94 source2.addCoverage(3, 1);
95 final var source2inner = new Source("Source2.java",
96 "public class Source2 {\n new Interface() { public void run() { } };\n}\n",
97 "34BD6501A6D1CE5181AECEA688C7D382");
98 source2inner.setClassifier("$1");
99 source2inner.addCoverage(2, 1);
100
101 final var coverageTracingLogger = new CoverageTracingLogger(this.sourceCallbackMock);
102 final var uniqueSourceCallback = new UniqueSourceCallback(coverageTracingLogger);
103 uniqueSourceCallback.onSource(source1);
104 uniqueSourceCallback.onSource(source2);
105 uniqueSourceCallback.onSource(source2inner);
106 uniqueSourceCallback.onComplete();
107 coverageTracingLogger.log(this.logMock);
108
109 Assertions.assertEquals(8, coverageTracingLogger.getLines());
110 Assertions.assertEquals(6, coverageTracingLogger.getRelevant());
111 Assertions.assertEquals(3, coverageTracingLogger.getCovered());
112 Assertions.assertEquals(3, coverageTracingLogger.getMissed());
113 Assertions.assertEquals(2, coverageTracingLogger.getBranches());
114 Assertions.assertEquals(1, coverageTracingLogger.getCoveredBranches());
115 Assertions.assertEquals(1, coverageTracingLogger.getMissedBranches());
116 Mockito.verify(this.sourceCallbackMock, Mockito.times(2)).onSource(ArgumentMatchers.any(Source.class));
117 Mockito.verify(this.logMock).info("Gathered code coverage metrics for 2 source files with 8 lines of code:");
118 Mockito.verify(this.logMock).info("- 6 relevant lines");
119 Mockito.verify(this.logMock).info("- 3 covered lines");
120 Mockito.verify(this.logMock).info("- 3 missed lines");
121 Mockito.verify(this.logMock).info("- 2 branches");
122 Mockito.verify(this.logMock).info("- 2 branches");
123 Mockito.verify(this.logMock).info("- 1 covered branches");
124 Mockito.verify(this.logMock).info("- 1 missed branches");
125 }
126
127 }