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 org.mockito.ReturnValues; 8import org.mockito.configuration.AnnotationEngine; 9import org.mockito.configuration.DefaultMockitoConfiguration; 10import org.mockito.configuration.IMockitoConfiguration; 11import org.mockito.stubbing.Answer; 12 13import java.io.Serializable; 14 15/** 16 * Thread-safe wrapper on user-defined org.mockito.configuration.MockitoConfiguration implementation 17 */ 18@SuppressWarnings("deprecation")//supressed until ReturnValues are removed 19public class GlobalConfiguration implements IMockitoConfiguration, Serializable { 20 static final long serialVersionUID = -2860353062105505938L; 21 22 private static ThreadLocal<IMockitoConfiguration> globalConfiguration = new ThreadLocal<IMockitoConfiguration>(); 23 24 //back door for testing 25 IMockitoConfiguration getIt() { 26 return globalConfiguration.get(); 27 } 28 29 public GlobalConfiguration() { 30 //Configuration should be loaded only once but I cannot really test it 31 if (globalConfiguration.get() == null) { 32 globalConfiguration.set(createConfig()); 33 } 34 } 35 36 private IMockitoConfiguration createConfig() { 37 IMockitoConfiguration defaultConfiguration = new DefaultMockitoConfiguration(); 38 IMockitoConfiguration config = new ClassPathLoader().loadConfiguration(); 39 if (config != null) { 40 return config; 41 } else { 42 return defaultConfiguration; 43 } 44 } 45 46 public static void validate() { 47 new GlobalConfiguration(); 48 } 49 50 public ReturnValues getReturnValues() { 51 return globalConfiguration.get().getReturnValues(); 52 } 53 54 public AnnotationEngine getAnnotationEngine() { 55 return globalConfiguration.get().getAnnotationEngine(); 56 } 57 58 public boolean cleansStackTrace() { 59 return globalConfiguration.get().cleansStackTrace(); 60 } 61 62 public boolean enableClassCache() { 63 return globalConfiguration.get().enableClassCache(); 64 } 65 66 public Answer<Object> getDefaultAnswer() { 67 return globalConfiguration.get().getDefaultAnswer(); 68 } 69}