package org.apache.maven.plugin.surefire; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import org.apache.maven.plugin.surefire.log.api.ConsoleLogger; import org.apache.maven.plugin.surefire.log.api.ConsoleLoggerDecorator; import org.apache.maven.plugin.surefire.log.api.PrintStreamLogger; import org.apache.maven.surefire.booter.IsolatedClassLoader; import org.apache.maven.surefire.booter.SurefireReflector; import org.junit.Before; import org.junit.Test; import static org.apache.maven.surefire.util.ReflectionUtils.getMethod; import static org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.sameInstance; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; /** * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a> * @see ConsoleLogger * @see SurefireReflector * @since 2.20 */ public class SurefireReflectorTest { private ConsoleLogger logger; private SurefireReflector reflector; @Before public void prepareData() { logger = spy( new PrintStreamLogger( System.out ) ); ClassLoader cl = new IsolatedClassLoader( Thread.currentThread().getContextClassLoader(), false, "role" ); reflector = new SurefireReflector( cl ); } @Test public void shouldProxyConsoleLogger() { Object mirror = reflector.createConsoleLogger( logger ); assertThat( mirror, is( notNullValue() ) ); assertThat( mirror.getClass().getInterfaces()[0].getName(), is( ConsoleLogger.class.getName() ) ); assertThat( mirror, is( not( sameInstance( (Object) logger ) ) ) ); assertThat( mirror, is( instanceOf( ConsoleLoggerDecorator.class ) ) ); invokeMethodWithArray( mirror, getMethod( mirror, "info", String.class ), "Hi There!" ); verify( logger, times( 1 ) ).info( "Hi There!" ); } }