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