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