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