View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.plugin.surefire.extensions;
20  
21  import java.io.File;
22  import java.util.Deque;
23  import java.util.HashMap;
24  import java.util.Map;
25  
26  import org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter;
27  import org.apache.maven.plugin.surefire.report.StatelessXmlReporter;
28  import org.apache.maven.plugin.surefire.report.TestSetStats;
29  import org.apache.maven.plugin.surefire.report.WrappedReportEntry;
30  import org.apache.maven.surefire.extensions.StatelessReportEventListener;
31  import org.junit.Test;
32  
33  import static org.assertj.core.api.Assertions.assertThat;
34  import static org.powermock.reflect.Whitebox.getInternalState;
35  
36  /**
37   * tests for {@link SurefireStatelessReporter} and {@link JUnit5Xml30StatelessReporter}.
38   */
39  public class StatelessReporterTest {
40      @Test
41      public void shouldCloneXmlReporter() {
42          SurefireStatelessReporter extension = new SurefireStatelessReporter();
43          extension.setDisable(true);
44          extension.setVersion("V1");
45          ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
46  
47          Object clone = extension.clone(classLoader);
48          assertThat(clone).isNotSameAs(extension);
49          assertThat(clone).isInstanceOf(SurefireStatelessReporter.class);
50          assertThat(clone.toString()).isEqualTo("SurefireStatelessReporter{version=V1, disable=true}");
51          assertThat(((SurefireStatelessReporter) clone).isDisable()).isTrue();
52          assertThat(((SurefireStatelessReporter) clone).getVersion()).isEqualTo("V1");
53      }
54  
55      @Test
56      public void shouldAssertToStringXmlReporter() {
57          SurefireStatelessReporter extension = new SurefireStatelessReporter();
58          assertThat(extension.toString()).isEqualTo("SurefireStatelessReporter{version=3.0, disable=false}");
59      }
60  
61      @Test
62      public void shouldCreateConsoleListener() {
63          File target = new File(System.getProperty("user.dir"), "target");
64          File reportsDirectory = new File(target, "surefire-reports");
65          String reportNameSuffix = "suffix";
66          String schema = "https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report-3.0.xsd";
67          Map<String, Deque<WrappedReportEntry>> testClassMethodRunHistory = new HashMap<>();
68          DefaultStatelessReportMojoConfiguration config = new DefaultStatelessReportMojoConfiguration(
69                  reportsDirectory, reportNameSuffix, true, 5, schema, testClassMethodRunHistory);
70          SurefireStatelessReporter extension = new SurefireStatelessReporter();
71  
72          assertThat(extension.getVersion()).isEqualTo("3.0");
73          extension.setVersion("V3");
74          assertThat(extension.getVersion()).isEqualTo("V3");
75  
76          assertThat(extension.isDisable()).isFalse();
77          extension.setDisable(true);
78          assertThat(extension.isDisable()).isTrue();
79  
80          StatelessReportEventListener<WrappedReportEntry, TestSetStats> listener = extension.createListener(config);
81          assertThat(listener).isInstanceOf(StatelessXmlReporter.class);
82          assertThat((File) getInternalState(listener, "reportsDirectory")).isSameAs(reportsDirectory);
83          assertThat((String) getInternalState(listener, "reportNameSuffix")).isSameAs(reportNameSuffix);
84          assertThat((boolean) getInternalState(listener, "trimStackTrace")).isEqualTo(true);
85          assertThat((Integer) getInternalState(listener, "rerunFailingTestsCount"))
86                  .isEqualTo(5);
87          assertThat((String) getInternalState(listener, "xsdSchemaLocation")).isSameAs(schema);
88          assertThat((String) getInternalState(listener, "xsdVersion")).isEqualTo("V3");
89          assertThat((Map<?, ?>) getInternalState(listener, "testClassMethodRunHistoryMap"))
90                  .isSameAs(testClassMethodRunHistory);
91          assertThat((boolean) getInternalState(listener, "phrasedFileName")).isEqualTo(false);
92          assertThat((boolean) getInternalState(listener, "phrasedSuiteName")).isEqualTo(false);
93          assertThat((boolean) getInternalState(listener, "phrasedClassName")).isEqualTo(false);
94          assertThat((boolean) getInternalState(listener, "phrasedMethodName")).isEqualTo(false);
95      }
96  
97      @Test
98      public void shouldCloneJUnit5XmlReporter() {
99          JUnit5Xml30StatelessReporter extension = new JUnit5Xml30StatelessReporter();
100         extension.setDisable(true);
101         extension.setVersion("V1");
102         extension.setUsePhrasedFileName(true);
103         extension.setUsePhrasedTestSuiteClassName(true);
104         extension.setUsePhrasedTestCaseClassName(true);
105         extension.setUsePhrasedTestCaseMethodName(true);
106         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
107 
108         Object clone = extension.clone(classLoader);
109         assertThat(clone).isNotSameAs(extension);
110         assertThat(clone).isInstanceOf(JUnit5Xml30StatelessReporter.class);
111         assertThat(clone.toString())
112                 .isEqualTo("JUnit5Xml30StatelessReporter{version=V1, disable=true, usePhrasedFileName=true, "
113                         + "usePhrasedTestSuiteClassName=true, usePhrasedTestCaseClassName=true, "
114                         + "usePhrasedTestCaseMethodName=true}");
115         assertThat(((JUnit5Xml30StatelessReporter) clone).isDisable()).isTrue();
116         assertThat(((JUnit5Xml30StatelessReporter) clone).getVersion()).isEqualTo("V1");
117         assertThat(((JUnit5Xml30StatelessReporter) clone).getUsePhrasedFileName())
118                 .isTrue();
119         assertThat(((JUnit5Xml30StatelessReporter) clone).getUsePhrasedTestCaseClassName())
120                 .isTrue();
121         assertThat(((JUnit5Xml30StatelessReporter) clone).getUsePhrasedTestCaseMethodName())
122                 .isTrue();
123         assertThat(((JUnit5Xml30StatelessReporter) clone).getUsePhrasedTestSuiteClassName())
124                 .isTrue();
125     }
126 
127     @Test
128     public void shouldAssertToStringJUnit5ConsoleReporter() {
129         JUnit5Xml30StatelessReporter extension = new JUnit5Xml30StatelessReporter();
130         assertThat(extension.toString())
131                 .isEqualTo("JUnit5Xml30StatelessReporter{version=3.0, disable=false, "
132                         + "usePhrasedFileName=false, usePhrasedTestSuiteClassName=false, "
133                         + "usePhrasedTestCaseClassName=false, usePhrasedTestCaseMethodName=false}");
134     }
135 
136     @Test
137     public void shouldCreateJUnit5ConsoleListener() {
138         File target = new File(System.getProperty("user.dir"), "target");
139         File reportsDirectory = new File(target, "surefire-reports");
140         String reportNameSuffix = "suffix";
141         String schema = "https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report-3.0.xsd";
142         Map<String, Deque<WrappedReportEntry>> testClassMethodRunHistory = new HashMap<>();
143         DefaultStatelessReportMojoConfiguration config = new DefaultStatelessReportMojoConfiguration(
144                 reportsDirectory, reportNameSuffix, true, 5, schema, testClassMethodRunHistory);
145         JUnit5Xml30StatelessReporter extension = new JUnit5Xml30StatelessReporter();
146 
147         assertThat(extension.getVersion()).isEqualTo("3.0");
148         extension.setVersion("V3");
149         assertThat(extension.getVersion()).isEqualTo("V3");
150 
151         assertThat(extension.isDisable()).isFalse();
152         extension.setDisable(true);
153         assertThat(extension.isDisable()).isTrue();
154 
155         assertThat(extension.getUsePhrasedFileName()).isFalse();
156         extension.setUsePhrasedFileName(true);
157         assertThat(extension.getUsePhrasedFileName()).isTrue();
158 
159         assertThat(extension.getUsePhrasedTestSuiteClassName()).isFalse();
160         extension.setUsePhrasedTestSuiteClassName(true);
161         assertThat(extension.getUsePhrasedTestSuiteClassName()).isTrue();
162 
163         assertThat(extension.getUsePhrasedTestCaseClassName()).isFalse();
164         extension.setUsePhrasedTestCaseClassName(true);
165         assertThat(extension.getUsePhrasedTestSuiteClassName()).isTrue();
166 
167         assertThat(extension.getUsePhrasedTestCaseMethodName()).isFalse();
168         extension.setUsePhrasedTestCaseMethodName(true);
169         assertThat(extension.getUsePhrasedTestCaseMethodName()).isTrue();
170 
171         StatelessReportEventListener<WrappedReportEntry, TestSetStats> listener = extension.createListener(config);
172         assertThat(listener).isInstanceOf(StatelessXmlReporter.class);
173         assertThat((File) getInternalState(listener, "reportsDirectory")).isSameAs(reportsDirectory);
174         assertThat((String) getInternalState(listener, "reportNameSuffix")).isSameAs(reportNameSuffix);
175         assertThat((boolean) getInternalState(listener, "trimStackTrace")).isEqualTo(true);
176         assertThat((Integer) getInternalState(listener, "rerunFailingTestsCount"))
177                 .isEqualTo(5);
178         assertThat((String) getInternalState(listener, "xsdSchemaLocation")).isSameAs(schema);
179         assertThat((String) getInternalState(listener, "xsdVersion")).isEqualTo("V3");
180         assertThat((Map<?, ?>) getInternalState(listener, "testClassMethodRunHistoryMap"))
181                 .isSameAs(testClassMethodRunHistory);
182         assertThat((boolean) getInternalState(listener, "phrasedFileName")).isEqualTo(true);
183         assertThat((boolean) getInternalState(listener, "phrasedSuiteName")).isEqualTo(true);
184         assertThat((boolean) getInternalState(listener, "phrasedClassName")).isEqualTo(true);
185         assertThat((boolean) getInternalState(listener, "phrasedMethodName")).isEqualTo(true);
186     }
187 }