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.ConsoleOutputReportEventListener;
23  import org.apache.maven.surefire.extensions.ConsoleOutputReporter;
24  import org.apache.maven.plugin.surefire.extensions.junit5.JUnit5ConsoleOutputReporter;
25  import org.apache.maven.plugin.surefire.report.ConsoleOutputFileReporter;
26  import org.apache.maven.plugin.surefire.report.DirectConsoleOutput;
27  import org.fest.assertions.Assertions;
28  import org.junit.Test;
29  
30  import java.io.File;
31  
32  import static org.fest.assertions.Assertions.assertThat;
33  import static org.powermock.reflect.Whitebox.getInternalState;
34  
35  /**
36   * tests for {@link SurefireConsoleOutputReporter} and {@link JUnit5ConsoleOutputReporter}.
37   */
38  public class ConsoleOutputReporterTest
39  {
40      @Test
41      public void shouldCloneConsoleReporter()
42      {
43          SurefireConsoleOutputReporter extension = new SurefireConsoleOutputReporter();
44          extension.setDisable( true );
45          extension.setEncoding( "ISO-8859-1" );
46          ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
47          Object clone = extension.clone( classLoader );
48          assertThat( clone )
49                  .isNotSameAs( extension );
50          assertThat( clone )
51                  .isInstanceOf( SurefireConsoleOutputReporter.class );
52          assertThat( clone.toString() )
53                  .isEqualTo( "SurefireConsoleOutputReporter{disable=true, encoding=ISO-8859-1}" );
54          Assertions.assertThat( ( (SurefireConsoleOutputReporter) clone ).isDisable() )
55                  .isTrue();
56          assertThat( ( (SurefireConsoleOutputReporter) clone ).getEncoding() )
57                  .isEqualTo( "ISO-8859-1" );
58      }
59  
60      @Test
61      public void shouldAssertToStringConsoleReporter()
62      {
63          SurefireConsoleOutputReporter extension = new SurefireConsoleOutputReporter();
64          assertThat( extension.toString() )
65                  .isEqualTo( "SurefireConsoleOutputReporter{disable=false, encoding=UTF-8}" );
66      }
67  
68      @Test
69      public void shouldCreateConsoleListener()
70      {
71          ConsoleOutputReporter extension = new SurefireConsoleOutputReporter();
72  
73          ConsoleOutputReportEventListener listener1 = extension.createListener( System.out, System.err );
74          assertThat( listener1 )
75                  .isInstanceOf( DirectConsoleOutput.class );
76          assertThat( getInternalState( listener1, "out" ) )
77                  .isSameAs( System.out );
78          assertThat( getInternalState( listener1, "err" ) )
79                  .isSameAs( System.err );
80  
81          File target = new File( System.getProperty( "user.dir" ), "target" );
82          File reportsDirectory = new File( target, "surefire-reports" );
83          String reportNameSuffix = "suffix";
84          boolean usePhrasedFileName = false;
85          Integer forkNumber = 1;
86          String encoding = "ISO-8859-2";
87          extension.setEncoding( encoding );
88          ConsoleOutputReportEventListener listener2 =
89                  extension.createListener( reportsDirectory, reportNameSuffix, forkNumber );
90          assertThat( listener2 )
91                  .isInstanceOf( ConsoleOutputFileReporter.class );
92          assertThat( getInternalState( listener2, "reportsDirectory" ) )
93                  .isSameAs( reportsDirectory );
94          assertThat( getInternalState( listener2, "reportNameSuffix" ) )
95                  .isSameAs( reportNameSuffix );
96          assertThat( getInternalState( listener2, "usePhrasedFileName" ) )
97                  .isEqualTo( usePhrasedFileName );
98          assertThat( getInternalState( listener2, "forkNumber" ) )
99                  .isSameAs( forkNumber );
100         assertThat( getInternalState( listener2, "encoding" ) )
101                 .isSameAs( encoding );
102         assertThat( getInternalState( listener2, "reportEntryName" ) )
103                 .isNull();
104     }
105 
106     @Test
107     public void shouldCloneJUnit5ConsoleReporter()
108     {
109         JUnit5ConsoleOutputReporter extension = new JUnit5ConsoleOutputReporter();
110         extension.setDisable( true );
111         extension.setEncoding( "ISO-8859-1" );
112         extension.setUsePhrasedFileName( true );
113         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
114         Object clone = extension.clone( classLoader );
115         assertThat( clone )
116                 .isNotSameAs( extension );
117         assertThat( clone )
118                 .isInstanceOf( JUnit5ConsoleOutputReporter.class );
119         assertThat( clone.toString() ).isEqualTo(
120                 "JUnit5ConsoleOutputReporter{disable=true, encoding=ISO-8859-1, usePhrasedFileName=true}" );
121         assertThat( ( (JUnit5ConsoleOutputReporter) clone ).isDisable() )
122                 .isTrue();
123         assertThat( ( (JUnit5ConsoleOutputReporter) clone ).getEncoding() )
124                 .isEqualTo( "ISO-8859-1" );
125         assertThat( ( (JUnit5ConsoleOutputReporter) clone ).isUsePhrasedFileName() )
126                 .isTrue();
127     }
128 
129     @Test
130     public void shouldAssertToStringJUnit5ConsoleReporter()
131     {
132         JUnit5ConsoleOutputReporter extension = new JUnit5ConsoleOutputReporter();
133         assertThat( extension.toString() )
134                 .isEqualTo( "JUnit5ConsoleOutputReporter{disable=false, encoding=UTF-8, usePhrasedFileName=false}" );
135     }
136 
137     @Test
138     public void shouldCreateJUnit5ConsoleListener()
139     {
140         JUnit5ConsoleOutputReporter extension = new JUnit5ConsoleOutputReporter();
141 
142         ConsoleOutputReportEventListener listener1 = extension.createListener( System.out, System.err );
143         assertThat( listener1 )
144                 .isInstanceOf( DirectConsoleOutput.class );
145         assertThat( getInternalState( listener1, "out" ) )
146                 .isSameAs( System.out );
147         assertThat( getInternalState( listener1, "err" ) )
148                 .isSameAs( System.err );
149 
150         File target = new File( System.getProperty( "user.dir" ), "target" );
151         File reportsDirectory = new File( target, "surefire-reports" );
152         String reportNameSuffix = "suffix";
153         boolean usePhrasedFileName = true;
154         Integer forkNumber = 1;
155         String encoding = "ISO-8859-1";
156         extension.setEncoding( encoding );
157         extension.setUsePhrasedFileName( usePhrasedFileName );
158         ConsoleOutputReportEventListener listener2 =
159                 extension.createListener( reportsDirectory, reportNameSuffix, forkNumber );
160         assertThat( listener2 )
161                 .isInstanceOf( ConsoleOutputFileReporter.class );
162         assertThat( getInternalState( listener2, "reportsDirectory" ) )
163                 .isSameAs( reportsDirectory );
164         assertThat( getInternalState( listener2, "reportNameSuffix" ) )
165                 .isSameAs( reportNameSuffix );
166         assertThat( getInternalState( listener2, "usePhrasedFileName" ) )
167                 .isEqualTo( usePhrasedFileName );
168         assertThat( getInternalState( listener2, "forkNumber" ) )
169                 .isSameAs( forkNumber );
170         assertThat( getInternalState( listener2, "encoding" ) )
171                 .isSameAs( encoding );
172         assertThat( getInternalState( listener2, "reportEntryName" ) )
173                 .isNull();
174     }
175 }