1/*
2 * Copyright 2003-2009 OFFIS, Henri Tremblay
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.easymock;
17
18import java.util.ArrayList;
19import java.util.List;
20
21/**
22 * Helper class to be used to keep tracks of mocks easily. See EasyMock
23 * documentation and SupportTest sample
24 */
25public class EasyMockSupport {
26
27    /** List of all controls created */
28    protected final List<IMocksControl> controls = new ArrayList<IMocksControl>(
29            5);
30
31    /**
32     * Creates a mock object that implements the given interface, order checking
33     * is enabled by default.
34     *
35     * @param <T>
36     *            the interface that the mock object should implement.
37     * @param toMock
38     *            the class of the interface that the mock object should
39     *            implement.
40     * @return the mock object.
41     */
42    public <T> T createStrictMock(Class<T> toMock) {
43        return createStrictControl().createMock(toMock);
44    }
45
46    /**
47     * Creates a mock object that implements the given interface, order checking
48     * is enabled by default.
49     *
50     * @param name
51     *            the name of the mock object.
52     * @param toMock
53     *            the class of the interface that the mock object should
54     *            implement.
55     * @param <T>
56     *            the interface that the mock object should implement.
57     * @return the mock object.
58     * @throws IllegalArgumentException
59     *             if the name is not a valid Java identifier.
60     */
61    public <T> T createStrictMock(String name, Class<T> toMock) {
62        return createStrictControl().createMock(name, toMock);
63    }
64
65    /**
66     * Creates a mock object that implements the given interface, order checking
67     * is disabled by default.
68     *
69     * @param <T>
70     *            the interface that the mock object should implement.
71     * @param toMock
72     *            the class of the interface that the mock object should
73     *            implement.
74     * @return the mock object.
75     */
76    public <T> T createMock(Class<T> toMock) {
77        return createControl().createMock(toMock);
78    }
79
80    /**
81     * Creates a mock object that implements the given interface, order checking
82     * is disabled by default.
83     *
84     * @param name
85     *            the name of the mock object.
86     * @param toMock
87     *            the class of the interface that the mock object should
88     *            implement.
89     *
90     * @param <T>
91     *            the interface that the mock object should implement.
92     * @return the mock object.
93     * @throws IllegalArgumentException
94     *             if the name is not a valid Java identifier.
95     */
96    public <T> T createMock(String name, Class<T> toMock) {
97        return createControl().createMock(name, toMock);
98    }
99
100    /**
101     * Creates a mock object that implements the given interface, order checking
102     * is disabled by default, and the mock object will return <code>0</code>,
103     * <code>null</code> or <code>false</code> for unexpected invocations.
104     *
105     * @param <T>
106     *            the interface that the mock object should implement.
107     * @param toMock
108     *            the class of the interface that the mock object should
109     *            implement.
110     * @return the mock object.
111     */
112    public <T> T createNiceMock(Class<T> toMock) {
113        return createNiceControl().createMock(toMock);
114    }
115
116    /**
117     * Creates a mock object that implements the given interface, order checking
118     * is disabled by default, and the mock object will return <code>0</code>,
119     * <code>null</code> or <code>false</code> for unexpected invocations.
120     *
121     * @param name
122     *            the name of the mock object.
123     * @param toMock
124     *            the class of the interface that the mock object should
125     *            implement.
126     *
127     * @param <T>
128     *            the interface that the mock object should implement.
129     * @return the mock object.
130     * @throws IllegalArgumentException
131     *             if the name is not a valid Java identifier.
132     */
133    public <T> T createNiceMock(String name, Class<T> toMock) {
134        return createNiceControl().createMock(name, toMock);
135    }
136
137    /**
138     * Creates a control, order checking is enabled by default.
139     *
140     * @return the control.
141     */
142    public IMocksControl createStrictControl() {
143        IMocksControl ctrl = EasyMock.createStrictControl();
144        controls.add(ctrl);
145        return ctrl;
146    }
147
148    /**
149     * Creates a control, order checking is disabled by default.
150     *
151     * @return the control.
152     */
153    public IMocksControl createControl() {
154        IMocksControl ctrl = EasyMock.createControl();
155        controls.add(ctrl);
156        return ctrl;
157    }
158
159    /**
160     * Creates a control, order checking is disabled by default, and the mock
161     * objects created by this control will return <code>0</code>,
162     * <code>null</code> or <code>false</code> for unexpected invocations.
163     *
164     * @return the control.
165     */
166    public IMocksControl createNiceControl() {
167        IMocksControl ctrl = EasyMock.createNiceControl();
168        controls.add(ctrl);
169        return ctrl;
170    }
171
172    /**
173     * Switches all registered mock objects (more exactly: the controls of the
174     * mock objects) to replay mode. For details, see the EasyMock
175     * documentation.
176     */
177    public void replayAll() {
178        for (IMocksControl c : controls) {
179            c.replay();
180        }
181    }
182
183    /**
184     * Resets all registered mock objects (more exactly: the controls of the
185     * mock objects). For details, see the EasyMock documentation.
186     */
187    public void resetAll() {
188        for (IMocksControl c : controls) {
189            c.reset();
190        }
191    }
192
193    /**
194     * Verifies all registered mock objects (more exactly: the controls of the
195     * mock objects).
196     */
197    public void verifyAll() {
198        for (IMocksControl c : controls) {
199            c.verify();
200        }
201    }
202
203    /**
204     * Resets all registered mock objects (more exactly: the controls of the
205     * mock objects) and turn them to a mock with nice behavior. For details,
206     * see the EasyMock documentation.
207     */
208    public void resetAllToNice() {
209        for (IMocksControl c : controls) {
210            c.resetToNice();
211        }
212    }
213
214    /**
215     * Resets all registered mock objects (more exactly: the controls of the
216     * mock objects) and turn them to a mock with default behavior. For details,
217     * see the EasyMock documentation.
218     */
219    public void resetAllToDefault() {
220        for (IMocksControl c : controls) {
221            c.resetToDefault();
222        }
223    }
224
225    /**
226     * Resets all registered mock objects (more exactly: the controls of the
227     * mock objects) and turn them to a mock with strict behavior. For details,
228     * see the EasyMock documentation.
229     */
230    public void resetAllToStrict() {
231        for (IMocksControl c : controls) {
232            c.resetToStrict();
233        }
234    }
235
236}
237