1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugin.surefire.extensions;
20
21 import java.io.File;
22 import java.lang.reflect.Field;
23 import java.util.Deque;
24 import java.util.HashMap;
25 import java.util.Map;
26
27 import org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter;
28 import org.apache.maven.plugin.surefire.report.StatelessXmlReporter;
29 import org.apache.maven.plugin.surefire.report.TestSetStats;
30 import org.apache.maven.plugin.surefire.report.WrappedReportEntry;
31 import org.apache.maven.surefire.extensions.StatelessReportEventListener;
32 import org.junit.jupiter.api.Test;
33
34 import static org.assertj.core.api.Assertions.assertThat;
35
36
37
38
39 public class StatelessReporterTest {
40
41 @SuppressWarnings("unchecked")
42 private static <T> T getInternalState(Object target, String fieldName) {
43 try {
44 Class<?> clazz = target.getClass();
45 while (clazz != null) {
46 try {
47 Field field = clazz.getDeclaredField(fieldName);
48 field.setAccessible(true);
49 return (T) field.get(target);
50 } catch (NoSuchFieldException e) {
51 clazz = clazz.getSuperclass();
52 }
53 }
54 throw new NoSuchFieldException(fieldName);
55 } catch (Exception e) {
56 throw new RuntimeException(e);
57 }
58 }
59
60 @Test
61 public void shouldCloneXmlReporter() {
62 SurefireStatelessReporter extension = new SurefireStatelessReporter();
63 extension.setDisable(true);
64 extension.setVersion("V1");
65 ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
66
67 Object clone = extension.clone(classLoader);
68 assertThat(clone).isNotSameAs(extension);
69 assertThat(clone).isInstanceOf(SurefireStatelessReporter.class);
70 assertThat(clone.toString()).isEqualTo("SurefireStatelessReporter{version=V1, disable=true}");
71 assertThat(((SurefireStatelessReporter) clone).isDisable()).isTrue();
72 assertThat(((SurefireStatelessReporter) clone).getVersion()).isEqualTo("V1");
73 }
74
75 @Test
76 public void shouldAssertToStringXmlReporter() {
77 SurefireStatelessReporter extension = new SurefireStatelessReporter();
78 assertThat(extension.toString()).isEqualTo("SurefireStatelessReporter{version=3.0.2, disable=false}");
79 }
80
81 @Test
82 public void shouldCreateConsoleListener() {
83 File target = new File(System.getProperty("user.dir"), "target");
84 File reportsDirectory = new File(target, "surefire-reports");
85 String reportNameSuffix = "suffix";
86 String schema = "https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd";
87 Map<String, Deque<WrappedReportEntry>> testClassMethodRunHistory = new HashMap<>();
88 DefaultStatelessReportMojoConfiguration config = new DefaultStatelessReportMojoConfiguration(
89 reportsDirectory, reportNameSuffix, true, 5, schema, true, true, false, testClassMethodRunHistory);
90 SurefireStatelessReporter extension = new SurefireStatelessReporter();
91
92 assertThat(extension.getVersion()).isEqualTo("3.0.2");
93 extension.setVersion("V3");
94 assertThat(extension.getVersion()).isEqualTo("V3");
95
96 assertThat(extension.isDisable()).isFalse();
97 extension.setDisable(true);
98 assertThat(extension.isDisable()).isTrue();
99
100 StatelessReportEventListener<WrappedReportEntry, TestSetStats> listener = extension.createListener(config);
101 assertThat(listener).isInstanceOf(StatelessXmlReporter.class);
102 assertThat((File) getInternalState(listener, "reportsDirectory")).isSameAs(reportsDirectory);
103 assertThat((String) getInternalState(listener, "reportNameSuffix")).isSameAs(reportNameSuffix);
104 assertThat((boolean) getInternalState(listener, "trimStackTrace")).isEqualTo(true);
105 assertThat((Integer) getInternalState(listener, "rerunFailingTestsCount"))
106 .isEqualTo(5);
107 assertThat((String) getInternalState(listener, "xsdSchemaLocation")).isSameAs(schema);
108 assertThat((String) getInternalState(listener, "xsdVersion")).isEqualTo("V3");
109 assertThat((Map<?, ?>) getInternalState(listener, "testClassMethodRunHistoryMap"))
110 .isSameAs(testClassMethodRunHistory);
111 assertThat((boolean) getInternalState(listener, "phrasedFileName")).isEqualTo(false);
112 assertThat((boolean) getInternalState(listener, "phrasedSuiteName")).isEqualTo(false);
113 assertThat((boolean) getInternalState(listener, "phrasedClassName")).isEqualTo(false);
114 assertThat((boolean) getInternalState(listener, "phrasedMethodName")).isEqualTo(false);
115 }
116
117 @Test
118 public void shouldCloneJUnit5XmlReporter() {
119 JUnit5Xml30StatelessReporter extension = new JUnit5Xml30StatelessReporter();
120 extension.setDisable(true);
121 extension.setVersion("V1");
122 extension.setUsePhrasedFileName(true);
123 extension.setUsePhrasedTestSuiteClassName(true);
124 extension.setUsePhrasedTestCaseClassName(true);
125 extension.setUsePhrasedTestCaseMethodName(true);
126 ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
127
128 Object clone = extension.clone(classLoader);
129 assertThat(clone).isNotSameAs(extension);
130 assertThat(clone).isInstanceOf(JUnit5Xml30StatelessReporter.class);
131 assertThat(clone.toString())
132 .isEqualTo("JUnit5Xml30StatelessReporter{version=V1, disable=true, usePhrasedFileName=true, "
133 + "usePhrasedTestSuiteClassName=true, usePhrasedTestCaseClassName=true, "
134 + "usePhrasedTestCaseMethodName=true}");
135 assertThat(((JUnit5Xml30StatelessReporter) clone).isDisable()).isTrue();
136 assertThat(((JUnit5Xml30StatelessReporter) clone).getVersion()).isEqualTo("V1");
137 assertThat(((JUnit5Xml30StatelessReporter) clone).getUsePhrasedFileName())
138 .isTrue();
139 assertThat(((JUnit5Xml30StatelessReporter) clone).getUsePhrasedTestCaseClassName())
140 .isTrue();
141 assertThat(((JUnit5Xml30StatelessReporter) clone).getUsePhrasedTestCaseMethodName())
142 .isTrue();
143 assertThat(((JUnit5Xml30StatelessReporter) clone).getUsePhrasedTestSuiteClassName())
144 .isTrue();
145 }
146
147 @Test
148 public void shouldAssertToStringJUnit5ConsoleReporter() {
149 JUnit5Xml30StatelessReporter extension = new JUnit5Xml30StatelessReporter();
150 assertThat(extension.toString())
151 .isEqualTo("JUnit5Xml30StatelessReporter{version=3.0.2, disable=false, "
152 + "usePhrasedFileName=false, usePhrasedTestSuiteClassName=false, "
153 + "usePhrasedTestCaseClassName=false, usePhrasedTestCaseMethodName=false}");
154 }
155
156 @Test
157 public void shouldCreateJUnit5ConsoleListener() {
158 File target = new File(System.getProperty("user.dir"), "target");
159 File reportsDirectory = new File(target, "surefire-reports");
160 String reportNameSuffix = "suffix";
161 String schema = "https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd";
162 Map<String, Deque<WrappedReportEntry>> testClassMethodRunHistory = new HashMap<>();
163 DefaultStatelessReportMojoConfiguration config = new DefaultStatelessReportMojoConfiguration(
164 reportsDirectory, reportNameSuffix, true, 5, schema, true, true, false, testClassMethodRunHistory);
165 JUnit5Xml30StatelessReporter extension = new JUnit5Xml30StatelessReporter();
166
167 assertThat(extension.getVersion()).isEqualTo("3.0.2");
168 extension.setVersion("V3");
169 assertThat(extension.getVersion()).isEqualTo("V3");
170
171 assertThat(extension.isDisable()).isFalse();
172 extension.setDisable(true);
173 assertThat(extension.isDisable()).isTrue();
174
175 assertThat(extension.getUsePhrasedFileName()).isFalse();
176 extension.setUsePhrasedFileName(true);
177 assertThat(extension.getUsePhrasedFileName()).isTrue();
178
179 assertThat(extension.getUsePhrasedTestSuiteClassName()).isFalse();
180 extension.setUsePhrasedTestSuiteClassName(true);
181 assertThat(extension.getUsePhrasedTestSuiteClassName()).isTrue();
182
183 assertThat(extension.getUsePhrasedTestCaseClassName()).isFalse();
184 extension.setUsePhrasedTestCaseClassName(true);
185 assertThat(extension.getUsePhrasedTestSuiteClassName()).isTrue();
186
187 assertThat(extension.getUsePhrasedTestCaseMethodName()).isFalse();
188 extension.setUsePhrasedTestCaseMethodName(true);
189 assertThat(extension.getUsePhrasedTestCaseMethodName()).isTrue();
190
191 StatelessReportEventListener<WrappedReportEntry, TestSetStats> listener = extension.createListener(config);
192 assertThat(listener).isInstanceOf(StatelessXmlReporter.class);
193 assertThat((File) getInternalState(listener, "reportsDirectory")).isSameAs(reportsDirectory);
194 assertThat((String) getInternalState(listener, "reportNameSuffix")).isSameAs(reportNameSuffix);
195 assertThat((boolean) getInternalState(listener, "trimStackTrace")).isEqualTo(true);
196 assertThat((Integer) getInternalState(listener, "rerunFailingTestsCount"))
197 .isEqualTo(5);
198 assertThat((String) getInternalState(listener, "xsdSchemaLocation")).isSameAs(schema);
199 assertThat((String) getInternalState(listener, "xsdVersion")).isEqualTo("V3");
200 assertThat((Map<?, ?>) getInternalState(listener, "testClassMethodRunHistoryMap"))
201 .isSameAs(testClassMethodRunHistory);
202 assertThat((boolean) getInternalState(listener, "phrasedFileName")).isEqualTo(true);
203 assertThat((boolean) getInternalState(listener, "phrasedSuiteName")).isEqualTo(true);
204 assertThat((boolean) getInternalState(listener, "phrasedClassName")).isEqualTo(true);
205 assertThat((boolean) getInternalState(listener, "phrasedMethodName")).isEqualTo(true);
206 }
207 }