GlobalConfiguration.java revision e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7
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}