• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2007 Mockito contributors
3  * This program is made available under the terms of the MIT License.
4  */
5 package org.mockito.internal.configuration;
6 
7 import net.bytebuddy.ByteBuddy;
8 import org.assertj.core.api.Assertions;
9 import org.junit.After;
10 import org.junit.Test;
11 import org.mockito.Mockito;
12 import org.mockito.configuration.AnnotationEngine;
13 import org.mockito.internal.configuration.plugins.Plugins;
14 import org.mockitoutil.ClassLoaders;
15 import org.objenesis.Objenesis;
16 
17 import static org.assertj.core.api.Assertions.assertThat;
18 
19 public class GlobalConfigurationTest {
20     @Test
returns_mockito_configuration_annotation_engine_if_non_default()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
returns_mockito_annotation_engine_of_Plugins_if_no_MockitoConfiguration()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
reset_annotation_engine()48     public void reset_annotation_engine() {
49         ConfigurationAccess.getConfig().overrideAnnotationEngine(null);
50     }
51 
52     private static class CustomAnnotationEngine implements AnnotationEngine {
process(Class<?> clazz, Object testInstance)53         @Override public void process(Class<?> clazz, Object testInstance) { }
54     }
55 }
56