1/* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5package org.mockito.internal.configuration; 6 7import net.bytebuddy.ByteBuddy; 8import org.assertj.core.api.Assertions; 9import org.junit.After; 10import org.junit.Test; 11import org.mockito.Mockito; 12import org.mockito.configuration.AnnotationEngine; 13import org.mockito.internal.configuration.plugins.Plugins; 14import org.mockitoutil.ClassLoaders; 15import org.objenesis.Objenesis; 16 17import static org.assertj.core.api.Assertions.assertThat; 18 19public class GlobalConfigurationTest { 20 @Test 21 public void returns_mockito_configuration_annotation_engine_if_non_default() throws Exception { 22 ConfigurationAccess.getConfig().overrideAnnotationEngine(new CustomAnnotationEngine()); 23 assertThat(new GlobalConfiguration().getAnnotationEngine()).isInstanceOf(CustomAnnotationEngine.class); 24 assertThat(new GlobalConfiguration().tryGetPluginAnnotationEngine()).isInstanceOf(CustomAnnotationEngine.class); 25 } 26 27 @Test 28 public void returns_mockito_annotation_engine_of_Plugins_if_no_MockitoConfiguration() throws Throwable { 29 ClassLoader anotherWorld = ClassLoaders.isolatedClassLoader() 30 .withCurrentCodeSourceUrls() 31 .withCodeSourceUrlOf(Mockito.class, ByteBuddy.class, Objenesis.class) 32 .withPrivateCopyOf("org.mockito", "net.bytebuddy", "org.objenesis") 33 .withCodeSourceUrlOf(Assertions.class) 34 .withPrivateCopyOf("org.assertj") 35 .without("org.mockito.configuration.MockitoConfiguration") 36 .build(); 37 38 ClassLoaders.using(anotherWorld).execute(new Runnable() { 39 @Override 40 public void run() { 41 assertThat(new GlobalConfiguration().getAnnotationEngine()).isInstanceOf(Plugins.getAnnotationEngine().getClass()); 42 assertThat(new GlobalConfiguration().tryGetPluginAnnotationEngine()).isInstanceOf(Plugins.getAnnotationEngine().getClass()); 43 } 44 }); 45 } 46 47 @After 48 public void reset_annotation_engine() { 49 ConfigurationAccess.getConfig().overrideAnnotationEngine(null); 50 } 51 52 private static class CustomAnnotationEngine implements AnnotationEngine { 53 @Override public void process(Class<?> clazz, Object testInstance) { } 54 } 55} 56