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.util;
25
26 import static org.junit.jupiter.api.Assertions.assertEquals;
27 import static org.junit.jupiter.api.Assertions.assertThrows;
28 import static org.mockito.Mockito.lenient;
29
30 import java.io.File;
31 import java.io.IOException;
32 import java.nio.file.Files;
33 import java.nio.file.Path;
34 import java.util.Arrays;
35 import java.util.Collections;
36 import java.util.List;
37
38 import org.apache.maven.model.Build;
39 import org.apache.maven.model.Model;
40 import org.apache.maven.model.Reporting;
41 import org.apache.maven.project.MavenProject;
42 import org.eluder.coveralls.maven.plugin.CoverageParser;
43 import org.eluder.coveralls.maven.plugin.parser.CoberturaParser;
44 import org.eluder.coveralls.maven.plugin.parser.JaCoCoParser;
45 import org.eluder.coveralls.maven.plugin.parser.SagaParser;
46 import org.eluder.coveralls.maven.plugin.source.SourceLoader;
47 import org.junit.jupiter.api.BeforeEach;
48 import org.junit.jupiter.api.Test;
49 import org.junit.jupiter.api.extension.ExtendWith;
50 import org.junit.jupiter.api.io.CleanupMode;
51 import org.junit.jupiter.api.io.TempDir;
52 import org.mockito.Mock;
53 import org.mockito.junit.jupiter.MockitoExtension;
54
55 @ExtendWith(MockitoExtension.class)
56 class CoverageParsersFactoryTest {
57
58 @TempDir(cleanup = CleanupMode.ON_SUCCESS)
59 public Path folder;
60
61 @Mock
62 private MavenProject projectMock;
63
64 @Mock
65 private SourceLoader sourceLoaderMock;
66
67 @Mock
68 private Model modelMock;
69
70 @Mock
71 private Reporting reportingMock;
72
73 @Mock
74 private Build buildMock;
75
76 private Path reportingDir;
77
78 private Path targetDir;
79
80 @BeforeEach
81 void init() throws IOException {
82 reportingDir = Files.createDirectory(folder.resolve("reportingDir"));
83 targetDir = Files.createDirectory(folder.resolve("targetDir"));
84 lenient().when(projectMock.getCollectedProjects()).thenReturn(Collections.<MavenProject>emptyList());
85 lenient().when(projectMock.getModel()).thenReturn(modelMock);
86 lenient().when(projectMock.getBuild()).thenReturn(buildMock);
87 lenient().when(modelMock.getReporting()).thenReturn(reportingMock);
88 lenient().when(reportingMock.getOutputDirectory()).thenReturn(reportingDir.toFile().getAbsolutePath());
89 lenient().when(buildMock.getDirectory()).thenReturn(targetDir.toFile().getAbsolutePath());
90 }
91
92 @Test
93 void testCreateEmptyParsers() {
94 assertThrows(IOException.class, () -> {
95 createCoverageParsersFactory().createParsers();
96 });
97 }
98
99 @Test
100 void testCreateJaCoCoParser() throws IOException {
101 Path jacocoDir = Files.createDirectory(reportingDir.resolve("jacoco"));
102 Files.createFile(jacocoDir.resolve("jacoco.xml"));
103 List<CoverageParser> parsers = createCoverageParsersFactory().createParsers();
104 assertEquals(1, parsers.size());
105 assertEquals(JaCoCoParser.class, parsers.get(0).getClass());
106 }
107
108 @Test
109 void testCreateCoberturaParser() throws IOException {
110 Path coberturaDir = Files.createDirectory(reportingDir.resolve("cobertura"));
111 Files.createFile(coberturaDir.resolve("coverage.xml"));
112 List<CoverageParser> parsers = createCoverageParsersFactory().createParsers();
113 assertEquals(1, parsers.size());
114 assertEquals(CoberturaParser.class, parsers.get(0).getClass());
115 }
116
117 @Test
118 void testCreateSagaParser() throws IOException {
119 Path sagaDir = Files.createDirectory(targetDir.resolve("saga-coverage"));
120 Files.createFile(sagaDir.resolve("total-coverage.xml"));
121 List<CoverageParser> parsers = createCoverageParsersFactory().createParsers();
122 assertEquals(1, parsers.size());
123 assertEquals(SagaParser.class, parsers.get(0).getClass());
124 }
125
126 @Test
127 void testWithJaCoCoReport() throws IOException {
128 File jacocoFile = Files.createFile(reportingDir.resolve("jacoco-report.xml")).toFile();
129 jacocoFile.createNewFile();
130 CoverageParsersFactory factory = createCoverageParsersFactory().withJaCoCoReports(Arrays.asList(jacocoFile));
131 List<CoverageParser> parsers = factory.createParsers();
132 assertEquals(1, parsers.size());
133 assertEquals(JaCoCoParser.class, parsers.get(0).getClass());
134 }
135
136 @Test
137 void testWithCoberturaReport() throws IOException {
138 File coberturaFile = Files.createFile(reportingDir.resolve("cobertura-report.xml")).toFile();
139 coberturaFile.createNewFile();
140 CoverageParsersFactory factory = createCoverageParsersFactory().withCoberturaReports(Arrays.asList(coberturaFile));
141 List<CoverageParser> parsers = factory.createParsers();
142 assertEquals(1, parsers.size());
143 assertEquals(CoberturaParser.class, parsers.get(0).getClass());
144 }
145
146 @Test
147 void testWithSagaReport() throws IOException {
148 File sagaFile = Files.createFile(reportingDir.resolve("saga-report.xml")).toFile();
149 sagaFile.createNewFile();
150 CoverageParsersFactory factory = createCoverageParsersFactory().withSagaReports(Arrays.asList(sagaFile));
151 List<CoverageParser> parsers = factory.createParsers();
152 assertEquals(1, parsers.size());
153 assertEquals(SagaParser.class, parsers.get(0).getClass());
154 }
155
156 @Test
157 void testWithRelativeReportDirectory() throws IOException {
158 Path coberturaDir = Files.createDirectory(reportingDir.resolve("customdir"));
159 Files.createFile(coberturaDir.resolve("coverage.xml"));
160 CoverageParsersFactory factory = createCoverageParsersFactory().withRelativeReportDirs(Arrays.asList("customdir"));
161 List<CoverageParser> parsers = factory.createParsers();
162 assertEquals(1, parsers.size());
163 assertEquals(CoberturaParser.class, parsers.get(0).getClass());
164 }
165
166 @Test
167 void testWithRootRelativeReportDirectory() throws IOException {
168 Files.createFile(reportingDir.resolve("coverage.xml")).toFile();
169 CoverageParsersFactory factory = createCoverageParsersFactory().withRelativeReportDirs(Arrays.asList(File.separator));
170 List<CoverageParser> parsers = factory.createParsers();
171 assertEquals(1, parsers.size());
172 assertEquals(CoberturaParser.class, parsers.get(0).getClass());
173 }
174
175 private CoverageParsersFactory createCoverageParsersFactory() {
176 return new CoverageParsersFactory(projectMock, sourceLoaderMock);
177 }
178 }