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;
20
21 import java.io.File;
22
23 import org.apache.maven.plugin.surefire.extensions.SurefireConsoleOutputReporter;
24 import org.apache.maven.plugin.surefire.extensions.SurefireStatelessReporter;
25 import org.apache.maven.plugin.surefire.extensions.SurefireStatelessTestsetInfoReporter;
26 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
27 import org.apache.maven.plugin.surefire.log.api.ConsoleLoggerDecorator;
28 import org.apache.maven.plugin.surefire.log.api.PrintStreamLogger;
29 import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
30 import org.apache.maven.surefire.api.report.ReporterFactoryOptions;
31 import org.hamcrest.MatcherAssert;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.mockito.ArgumentCaptor;
35
36 import static java.nio.charset.StandardCharsets.UTF_8;
37 import static org.apache.maven.surefire.api.util.ReflectionUtils.getMethod;
38 import static org.apache.maven.surefire.api.util.ReflectionUtils.invokeMethodWithArray;
39 import static org.assertj.core.api.Assertions.assertThat;
40 import static org.hamcrest.CoreMatchers.instanceOf;
41 import static org.hamcrest.CoreMatchers.is;
42 import static org.hamcrest.CoreMatchers.not;
43 import static org.hamcrest.CoreMatchers.notNullValue;
44 import static org.hamcrest.CoreMatchers.sameInstance;
45 import static org.mockito.Mockito.mock;
46 import static org.mockito.Mockito.spy;
47 import static org.mockito.Mockito.times;
48 import static org.mockito.Mockito.verify;
49 import static org.mockito.Mockito.when;
50 import static org.powermock.reflect.Whitebox.getInternalState;
51
52
53
54
55 public class CommonReflectorTest {
56 private StartupReportConfiguration startupReportConfiguration;
57 private ConsoleLogger consoleLogger;
58 private File reportsDirectory;
59 private File statistics;
60 private SurefireStatelessReporter xmlReporter;
61 private SurefireConsoleOutputReporter consoleOutputReporter = new SurefireConsoleOutputReporter();
62 private SurefireStatelessTestsetInfoReporter infoReporter = new SurefireStatelessTestsetInfoReporter();
63
64 @Before
65 public void setup() {
66 File target = new File(System.getProperty("user.dir"), "target");
67 reportsDirectory = new File(target, "tmp6");
68 statistics = new File(reportsDirectory, "TESTHASH");
69 xmlReporter = new SurefireStatelessReporter();
70 infoReporter = new SurefireStatelessTestsetInfoReporter();
71
72 startupReportConfiguration = new StartupReportConfiguration(
73 true,
74 true,
75 "PLAIN",
76 false,
77 reportsDirectory,
78 false,
79 null,
80 statistics,
81 false,
82 1,
83 null,
84 null,
85 false,
86 true,
87 true,
88 xmlReporter,
89 consoleOutputReporter,
90 infoReporter,
91 new ReporterFactoryOptions());
92
93 consoleLogger = mock(ConsoleLogger.class);
94 }
95
96 @Test
97 public void createReportingReporterFactory() {
98 CommonReflector reflector = new CommonReflector(Thread.currentThread().getContextClassLoader());
99 DefaultReporterFactory factory = (DefaultReporterFactory)
100 reflector.createReportingReporterFactory(startupReportConfiguration, consoleLogger);
101
102 assertThat(factory).isNotNull();
103
104 StartupReportConfiguration reportConfiguration = getInternalState(factory, "reportConfiguration");
105 assertThat(reportConfiguration).isNotSameAs(startupReportConfiguration);
106 assertThat(reportConfiguration.isUseFile()).isTrue();
107 assertThat(reportConfiguration.isPrintSummary()).isTrue();
108 assertThat(reportConfiguration.getReportFormat()).isEqualTo("PLAIN");
109 assertThat(reportConfiguration.isRedirectTestOutputToFile()).isFalse();
110 assertThat(reportConfiguration.getReportsDirectory()).isSameAs(reportsDirectory);
111 assertThat(reportConfiguration.isTrimStackTrace()).isFalse();
112 assertThat(reportConfiguration.getReportNameSuffix()).isNull();
113 assertThat(reportConfiguration.getStatisticsFile()).isSameAs(statistics);
114 assertThat(reportConfiguration.isRequiresRunHistory()).isFalse();
115 assertThat(reportConfiguration.getRerunFailingTestsCount()).isEqualTo(1);
116 assertThat(reportConfiguration.getXsdSchemaLocation()).isNull();
117 assertThat(reportConfiguration.getEncoding()).isEqualTo(UTF_8);
118 assertThat(reportConfiguration.isForking()).isFalse();
119 assertThat(reportConfiguration.getXmlReporter().toString()).isEqualTo(xmlReporter.toString());
120 assertThat(reportConfiguration.getTestsetReporter().toString()).isEqualTo(infoReporter.toString());
121 assertThat(reportConfiguration.getConsoleOutputReporter().toString())
122 .isEqualTo(consoleOutputReporter.toString());
123 }
124
125 @Test
126 public void shouldProxyConsoleLogger() {
127 ClassLoader cl = Thread.currentThread().getContextClassLoader();
128 ConsoleLogger logger = spy(new PrintStreamLogger(System.out));
129 Object mirror = CommonReflector.createConsoleLogger(logger, cl);
130 MatcherAssert.assertThat(mirror, is(notNullValue()));
131 MatcherAssert.assertThat(mirror.getClass().getInterfaces()[0].getName(), is(ConsoleLogger.class.getName()));
132 MatcherAssert.assertThat(mirror, is(not(sameInstance((Object) logger))));
133 MatcherAssert.assertThat(mirror, is(instanceOf(ConsoleLoggerDecorator.class)));
134 invokeMethodWithArray(mirror, getMethod(mirror, "info", String.class), "Hi There!");
135 verify(logger, times(1)).info("Hi There!");
136 }
137
138 @Test
139 public void testCreateConsoleLogger() {
140 ClassLoader cl = Thread.currentThread().getContextClassLoader();
141 ConsoleLogger consoleLogger = mock(ConsoleLogger.class);
142 ConsoleLogger decorator = (ConsoleLogger) CommonReflector.createConsoleLogger(consoleLogger, cl);
143 assertThat(decorator).isNotSameAs(consoleLogger);
144
145 assertThat(decorator.isDebugEnabled()).isFalse();
146 when(consoleLogger.isDebugEnabled()).thenReturn(true);
147 assertThat(decorator.isDebugEnabled()).isTrue();
148 verify(consoleLogger, times(2)).isDebugEnabled();
149
150 decorator.info("msg");
151 ArgumentCaptor<String> argumentMsg = ArgumentCaptor.forClass(String.class);
152 verify(consoleLogger, times(1)).info(argumentMsg.capture());
153 assertThat(argumentMsg.getAllValues()).hasSize(1);
154 assertThat(argumentMsg.getAllValues().get(0)).isEqualTo("msg");
155 }
156 }