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