• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2010 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * 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, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 package com.google.android.testing.mocking;
17 
18 import javassist.CannotCompileException;
19 import javassist.ClassPool;
20 import javassist.CtClass;
21 import javassist.CtMethod;
22 import javassist.Modifier;
23 import javassist.NotFoundException;
24 import javassist.expr.ExprEditor;
25 import javassist.expr.MethodCall;
26 
27 import junit.framework.TestCase;
28 
29 import org.easymock.Capture;
30 import org.easymock.IAnswer;
31 import org.easymock.LogicalOperator;
32 import org.easymock.internal.matchers.Equals;
33 
34 import java.io.IOException;
35 import java.io.InputStream;
36 import java.io.ObjectInput;
37 import java.util.ArrayList;
38 import java.util.Arrays;
39 import java.util.Calendar;
40 import java.util.List;
41 import java.util.Locale;
42 import java.util.Map;
43 import java.util.SimpleTimeZone;
44 import java.util.Vector;
45 
46 
47 /**
48  * Tests for the AndroidMock class.
49  *
50  * @author swoodward@google.com (Stephen Woodward)
51  */
52 public class AndroidMockTest extends TestCase {
53   private List<String> notForwardedMethods =
54       new ArrayList<String>(Arrays.asList(new String[] {
55           "com.google.android.testing.mocking.AndroidMock.getInterfaceFor(java.lang.Class)",
56           "com.google.android.testing.mocking.AndroidMock.getSubclassNameFor(java.lang.Class)",
57           "com.google.android.testing.mocking.AndroidMock.getSubclassFor(java.lang.Class,"
58               + "java.lang.Class,java.lang.Object)",
59           "com.google.android.testing.mocking.AndroidMock.getInterfaceNameFor(java.lang.Class)",
60           "com.google.android.testing.mocking.AndroidMock.createStrictMock("
61               + "java.lang.Class,java.lang.Object[])",
62           "com.google.android.testing.mocking.AndroidMock.createStrictMock("
63               + "java.lang.String,java.lang.Class,java.lang.Object[])",
64           "com.google.android.testing.mocking.AndroidMock.createMock("
65               + "java.lang.Class,java.lang.Object[])",
66           "com.google.android.testing.mocking.AndroidMock.createMock("
67               + "java.lang.String,java.lang.Class,java.lang.Object[])",
68           "com.google.android.testing.mocking.AndroidMock.createNiceMock("
69               + "java.lang.Class,java.lang.Object[])",
70           "com.google.android.testing.mocking.AndroidMock.createNiceMock("
71               + "java.lang.String,java.lang.Class,java.lang.Object[])"}));
72 
getForwardedMethods()73   private CtMethod[] getForwardedMethods() throws NotFoundException {
74     List<CtMethod> methods =
75         new ArrayList<CtMethod>(Arrays.asList(getAndroidMockCtClass().getDeclaredMethods()));
76     // Get a copy for safe removal of elements during iteration.
77     for (CtMethod method : Arrays.asList(methods.toArray(new CtMethod[0]))) {
78       if (notForwardedMethods.contains(method.getLongName())
79           || !Modifier.isPublic(method.getModifiers())) {
80         methods.remove(method);
81       }
82     }
83     return methods.toArray(new CtMethod[0]);
84   }
85 
getAndroidMockCtClass()86   private CtClass getAndroidMockCtClass() throws NotFoundException {
87     return ClassPool.getDefault().get("com.google.android.testing.mocking.AndroidMock");
88   }
89 
compileClasses(List<GeneratedClassFile> mockClasses)90   private void compileClasses(List<GeneratedClassFile> mockClasses) throws NotFoundException {
91     for (GeneratedClassFile clazz : mockClasses) {
92       CtClass ctClass;
93       ctClass = ClassPool.getDefault().get(clazz.getClassName());
94       try {
95         ctClass.toClass();
96       } catch (CannotCompileException e) {
97         // Just ignore -- this will happen for every class used in more than one test.
98       }
99     }
100   }
101 
testIsUnboxableToPrimitiveAllPrimitives()102   public void testIsUnboxableToPrimitiveAllPrimitives() {
103     assertTrue(AndroidMock.isUnboxableToPrimitive(Integer.TYPE, new Integer(42), true));
104     assertTrue(AndroidMock.isUnboxableToPrimitive(Long.TYPE, new Long(42L), true));
105     assertTrue(AndroidMock.isUnboxableToPrimitive(Short.TYPE, new Short((short) 42), true));
106     assertTrue(AndroidMock.isUnboxableToPrimitive(Byte.TYPE, new Byte((byte) 42), true));
107     assertTrue(AndroidMock.isUnboxableToPrimitive(Boolean.TYPE, Boolean.TRUE, true));
108     assertTrue(AndroidMock.isUnboxableToPrimitive(Float.TYPE, new Float(42.0f), true));
109     assertTrue(AndroidMock.isUnboxableToPrimitive(Double.TYPE, new Double(42.0), true));
110     assertTrue(AndroidMock.isUnboxableToPrimitive(Character.TYPE, new Character('a'), true));
111 
112     assertTrue(AndroidMock.isUnboxableToPrimitive(Integer.TYPE, 42, true));
113     assertTrue(AndroidMock.isUnboxableToPrimitive(Long.TYPE, 42L, true));
114     assertTrue(AndroidMock.isUnboxableToPrimitive(Short.TYPE, (short) 42, true));
115     assertTrue(AndroidMock.isUnboxableToPrimitive(Byte.TYPE, (byte) 42, true));
116     assertTrue(AndroidMock.isUnboxableToPrimitive(Boolean.TYPE, true, true));
117     assertTrue(AndroidMock.isUnboxableToPrimitive(Float.TYPE, 42.0f, true));
118     assertTrue(AndroidMock.isUnboxableToPrimitive(Double.TYPE, 42.0, true));
119     assertTrue(AndroidMock.isUnboxableToPrimitive(Character.TYPE, 'a', true));
120   }
121 
testIsUnboxableToPrimitiveIsObject()122   public void testIsUnboxableToPrimitiveIsObject() {
123     assertFalse(AndroidMock.isUnboxableToPrimitive(Integer.TYPE, new Object(), false));
124   }
125 
testIsUnboxableToPrimitiveAllWideningPrimitives()126   public void testIsUnboxableToPrimitiveAllWideningPrimitives() {
127     Object[] testValues =
128         new Object[] {new Byte((byte) 42), new Short((short) 42), new Integer(42), new Long(42L),
129             new Float(42.0f), new Double(42.0), new Character('a'), Boolean.TRUE};
130     boolean[] byteExpected = new boolean[] {true, false, false, false, false, false, false, false};
131     boolean[] shortExpected = new boolean[] {true, true, false, false, false, false, true, false};
132     boolean[] intExpected = new boolean[] {true, true, true, false, false, false, true, false};
133     boolean[] longExpected = new boolean[] {true, true, true, true, false, false, true, false};
134     boolean[] floatExpected = new boolean[] {true, true, true, false, true, false, true, false};
135     boolean[] doubleExpected = new boolean[] {true, true, true, true, true, true, true, false};
136     boolean[] charExpected = new boolean[] {true, true, true, false, false, false, true, false};
137     boolean[] booleanExpected =
138         new boolean[] {false, false, false, false, false, false, false, true};
139 
140     for (int i = 0; i < testValues.length; ++i) {
141       assertEquals("Convert byte from " + testValues[i].getClass(), byteExpected[i], AndroidMock
142           .isUnboxableToPrimitive(Byte.TYPE, testValues[i], false));
143       assertEquals("Convert short from " + testValues[i].getClass(), shortExpected[i], AndroidMock
144           .isUnboxableToPrimitive(Short.TYPE, testValues[i], false));
145       assertEquals("Convert int from " + testValues[i].getClass(), intExpected[i], AndroidMock
146           .isUnboxableToPrimitive(Integer.TYPE, testValues[i], false));
147       assertEquals("Convert long from " + testValues[i].getClass(), longExpected[i], AndroidMock
148           .isUnboxableToPrimitive(Long.TYPE, testValues[i], false));
149       assertEquals("Convert float from " + testValues[i].getClass(), floatExpected[i], AndroidMock
150           .isUnboxableToPrimitive(Float.TYPE, testValues[i], false));
151       assertEquals("Convert double from " + testValues[i].getClass(), doubleExpected[i],
152           AndroidMock.isUnboxableToPrimitive(Double.TYPE, testValues[i], false));
153       assertEquals("Convert char from " + testValues[i].getClass(), charExpected[i], AndroidMock
154           .isUnboxableToPrimitive(Character.TYPE, testValues[i], false));
155       assertEquals("Convert boolean from " + testValues[i].getClass(), booleanExpected[i],
156           AndroidMock.isUnboxableToPrimitive(Boolean.TYPE, testValues[i], false));
157     }
158   }
159 
160 
testIsUnboxableToPrimitiveNotPrimitive()161   public void testIsUnboxableToPrimitiveNotPrimitive() {
162     try {
163       AndroidMock.isUnboxableToPrimitive(Object.class, Object.class, false);
164       fail("Exception should have been thrown");
165     } catch (IllegalArgumentException e) {
166       // expected
167     }
168   }
169 
testCreateMock()170   public void testCreateMock() throws ClassNotFoundException, IOException, CannotCompileException,
171       NotFoundException {
172     List<GeneratedClassFile> mockClasses =
173         new AndroidMockGenerator().createMocksForClass(Vector.class);
174     compileClasses(mockClasses);
175     Vector<String> mockVector = AndroidMock.createMock(Vector.class);
176     AndroidMock.expect(mockVector.get(0)).andReturn("Hello World");
177     AndroidMock.replay(mockVector);
178     assertEquals("Hello World", mockVector.get(0).toString());
179     AndroidMock.verify(mockVector);
180   }
181 
testCreateMockUsingParameters()182   public void testCreateMockUsingParameters() throws ClassNotFoundException, IOException,
183       CannotCompileException, NotFoundException {
184     List<GeneratedClassFile> mockClasses =
185         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
186     compileClasses(mockClasses);
187     SimpleTimeZone mockTimeZone = AndroidMock.createMock(SimpleTimeZone.class, 0, "GMT");
188     AndroidMock.expect(mockTimeZone.getRawOffset()).andReturn(42);
189     AndroidMock.replay(mockTimeZone);
190     assertEquals(42, mockTimeZone.getRawOffset());
191     AndroidMock.verify(mockTimeZone);
192   }
193 
testCreateMockUsingProtectedConstructors()194   public void testCreateMockUsingProtectedConstructors() throws ClassNotFoundException,
195       IOException, CannotCompileException, NotFoundException {
196     List<GeneratedClassFile> mockClasses =
197         new AndroidMockGenerator().createMocksForClass(Calendar.class);
198     compileClasses(mockClasses);
199     Calendar mockCalendar = AndroidMock.createMock(Calendar.class);
200     AndroidMock.expect(mockCalendar.getGreatestMinimum(1)).andReturn(42);
201     AndroidMock.replay(mockCalendar);
202     assertEquals(42, mockCalendar.getGreatestMinimum(1));
203     AndroidMock.verify(mockCalendar);
204 
205     // Just don't explode
206     Calendar newMockCalendar =
207         AndroidMock.createMock(Calendar.class, new SimpleTimeZone(1, "GMT"), Locale.UK);
208   }
209 
testCreateMockUsingCastableParameters()210   public void testCreateMockUsingCastableParameters() throws ClassNotFoundException, IOException,
211       CannotCompileException, NotFoundException {
212     List<GeneratedClassFile> mockClasses =
213         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
214     compileClasses(mockClasses);
215     SimpleTimeZone mockTimeZone = AndroidMock.createMock(SimpleTimeZone.class, 'a', "GMT");
216     AndroidMock.expect(mockTimeZone.getRawOffset()).andReturn(42);
217     AndroidMock.replay(mockTimeZone);
218     assertEquals(42, mockTimeZone.getRawOffset());
219     AndroidMock.verify(mockTimeZone);
220   }
221 
testCreateMockUsingUnusableParameters()222   public void testCreateMockUsingUnusableParameters() throws ClassNotFoundException, IOException,
223       CannotCompileException, NotFoundException {
224     List<GeneratedClassFile> mockClasses =
225         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
226     compileClasses(mockClasses);
227     try {
228       SimpleTimeZone mockTimeZone = AndroidMock.createMock(SimpleTimeZone.class, "GMT");
229       fail("Excepted an IllegalArgumentException for incorrect number of constructor parameters");
230     } catch (IllegalArgumentException e) {
231       // Expected
232     }
233     try {
234       SimpleTimeZone mockTimeZone = AndroidMock.createMock(SimpleTimeZone.class, 0, null);
235       fail("Excepted an IllegalArgumentException for indeterminate null constructor parameters");
236     } catch (IllegalArgumentException e) {
237       // Expected
238     }
239     try {
240       SimpleTimeZone mockTimeZone = AndroidMock.createMock(SimpleTimeZone.class, 0, new Object());
241       fail("Excepted an IllegalArgumentException for incorrect constructor parameters");
242     } catch (IllegalArgumentException e) {
243       // Expected
244     }
245   }
246 
testCreateMockUsingInterface()247   public void testCreateMockUsingInterface() throws ClassNotFoundException, IOException,
248       CannotCompileException, NotFoundException {
249     List<GeneratedClassFile> mockClasses =
250         new AndroidMockGenerator().createMocksForClass(Map.class);
251     compileClasses(mockClasses);
252     Map<String, String> mockMap = AndroidMock.createMock(Map.class);
253     AndroidMock.expect(mockMap.get("key")).andReturn("Hello World");
254     AndroidMock.replay(mockMap);
255     assertEquals("Hello World", mockMap.get("key"));
256     AndroidMock.verify(mockMap);
257   }
258 
testCreateMockUsingClass()259   public void testCreateMockUsingClass() throws ClassNotFoundException, IOException,
260       CannotCompileException, NotFoundException {
261     List<GeneratedClassFile> mockClasses =
262         new AndroidMockGenerator().createMocksForClass(Vector.class);
263     compileClasses(mockClasses);
264     Vector<String> mockVector = AndroidMock.createMock(Vector.class);
265     AndroidMock.expect(mockVector.get(0)).andReturn("Hello World");
266     AndroidMock.replay(mockVector);
267     assertEquals("Hello World", mockVector.get(0).toString());
268     AndroidMock.verify(mockVector);
269   }
270 
testCreateNiceMock()271   public void testCreateNiceMock() throws ClassNotFoundException, IOException,
272       CannotCompileException, NotFoundException {
273     List<GeneratedClassFile> mockClasses =
274         new AndroidMockGenerator().createMocksForClass(Vector.class);
275     compileClasses(mockClasses);
276     Vector<String> mockVector = AndroidMock.createNiceMock(Vector.class);
277     AndroidMock.expect(mockVector.get(0)).andReturn("Hello World");
278     AndroidMock.replay(mockVector);
279     assertEquals("Hello World", mockVector.get(0).toString());
280     AndroidMock.verify(mockVector);
281   }
282 
testCreateNiceMockUsingUnusableParameters()283   public void testCreateNiceMockUsingUnusableParameters() throws ClassNotFoundException,
284       IOException, CannotCompileException, NotFoundException {
285     List<GeneratedClassFile> mockClasses =
286         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
287     compileClasses(mockClasses);
288     try {
289       SimpleTimeZone mockTimeZone = AndroidMock.createNiceMock(SimpleTimeZone.class, "GMT");
290       fail("Excepted an IllegalArgumentException for incorrect number of constructor parameters");
291     } catch (IllegalArgumentException e) {
292       // Expected
293     }
294     try {
295       SimpleTimeZone mockTimeZone = AndroidMock.createNiceMock(SimpleTimeZone.class, 0, null);
296       fail("Excepted an IllegalArgumentException for indeterminate null constructor parameters");
297     } catch (IllegalArgumentException e) {
298       // Expected
299     }
300     try {
301       SimpleTimeZone mockTimeZone =
302           AndroidMock.createNiceMock(SimpleTimeZone.class, 0, new Object());
303       fail("Excepted an IllegalArgumentException for incorrect constructor parameters");
304     } catch (IllegalArgumentException e) {
305       // Expected
306     }
307   }
308 
testCreateNiceMockUsingParameters()309   public void testCreateNiceMockUsingParameters() throws ClassNotFoundException, IOException,
310       CannotCompileException, NotFoundException {
311     List<GeneratedClassFile> mockClasses =
312         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
313 
314     compileClasses(mockClasses);
315     SimpleTimeZone mockTimeZone = AndroidMock.createNiceMock(SimpleTimeZone.class, 0, "GMT");
316     AndroidMock.expect(mockTimeZone.getRawOffset()).andReturn(42);
317     AndroidMock.replay(mockTimeZone);
318     assertEquals(42, mockTimeZone.getRawOffset());
319     AndroidMock.verify(mockTimeZone);
320   }
321 
testCreateNiceMockUsingCastableParameters()322   public void testCreateNiceMockUsingCastableParameters() throws ClassNotFoundException,
323       IOException, CannotCompileException, NotFoundException {
324     List<GeneratedClassFile> mockClasses =
325         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
326 
327     compileClasses(mockClasses);
328     SimpleTimeZone mockTimeZone = AndroidMock.createNiceMock(SimpleTimeZone.class, 'a', "GMT");
329     AndroidMock.expect(mockTimeZone.getRawOffset()).andReturn(42);
330     AndroidMock.replay(mockTimeZone);
331     assertEquals(42, mockTimeZone.getRawOffset());
332     AndroidMock.verify(mockTimeZone);
333   }
334 
testCreateNiceMockUsingInterface()335   public void testCreateNiceMockUsingInterface() throws ClassNotFoundException, IOException,
336       CannotCompileException, NotFoundException {
337     List<GeneratedClassFile> mockClasses =
338         new AndroidMockGenerator().createMocksForClass(Map.class);
339 
340     compileClasses(mockClasses);
341     Map<String, String> mockMap = AndroidMock.createNiceMock(Map.class);
342     AndroidMock.expect(mockMap.get("key")).andReturn("Hello World");
343     AndroidMock.replay(mockMap);
344     assertEquals("Hello World", mockMap.get("key"));
345     AndroidMock.verify(mockMap);
346   }
347 
testCreateNiceMockUsingClass()348   public void testCreateNiceMockUsingClass() throws ClassNotFoundException, IOException,
349       CannotCompileException, NotFoundException {
350     List<GeneratedClassFile> mockClasses =
351         new AndroidMockGenerator().createMocksForClass(Vector.class);
352 
353     compileClasses(mockClasses);
354     Vector<String> mockVector = AndroidMock.createNiceMock(Vector.class);
355     AndroidMock.expect(mockVector.get(0)).andReturn("Hello World");
356     AndroidMock.replay(mockVector);
357     assertEquals("Hello World", mockVector.get(0).toString());
358     AndroidMock.verify(mockVector);
359   }
360 
testCreateStrictMock()361   public void testCreateStrictMock() throws ClassNotFoundException, IOException,
362       CannotCompileException, NotFoundException {
363     List<GeneratedClassFile> mockClasses =
364         new AndroidMockGenerator().createMocksForClass(Vector.class);
365 
366     compileClasses(mockClasses);
367     Vector<String> mockVector = AndroidMock.createStrictMock(Vector.class);
368     AndroidMock.expect(mockVector.get(0)).andReturn("Hello World");
369     AndroidMock.replay(mockVector);
370     assertEquals("Hello World", mockVector.get(0).toString());
371     AndroidMock.verify(mockVector);
372   }
373 
testCreateStrictMockUsingUnusableParameters()374   public void testCreateStrictMockUsingUnusableParameters() throws ClassNotFoundException,
375       IOException, CannotCompileException, NotFoundException {
376     List<GeneratedClassFile> mockClasses =
377         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
378 
379     compileClasses(mockClasses);
380     try {
381       SimpleTimeZone mockTimeZone = AndroidMock.createStrictMock(SimpleTimeZone.class, "GMT");
382       fail("Excepted an IllegalArgumentException for incorrect number of constructor parameters");
383     } catch (IllegalArgumentException e) {
384       // Expected
385     }
386     try {
387       SimpleTimeZone mockTimeZone = AndroidMock.createStrictMock(SimpleTimeZone.class, 0, null);
388       fail("Excepted an IllegalArgumentException for indeterminate null constructor parameters");
389     } catch (IllegalArgumentException e) {
390       // Expected
391     }
392     try {
393       SimpleTimeZone mockTimeZone =
394           AndroidMock.createStrictMock(SimpleTimeZone.class, 0, new Object());
395       fail("Excepted an IllegalArgumentException for incorrect constructor parameters");
396     } catch (IllegalArgumentException e) {
397       // Expected
398     }
399   }
400 
testCreateStrictMockUsingParameters()401   public void testCreateStrictMockUsingParameters() throws ClassNotFoundException, IOException,
402       CannotCompileException, NotFoundException {
403     List<GeneratedClassFile> mockClasses =
404         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
405 
406     compileClasses(mockClasses);
407     SimpleTimeZone mockTimeZone = AndroidMock.createStrictMock(SimpleTimeZone.class, 0, "GMT");
408     AndroidMock.expect(mockTimeZone.getRawOffset()).andReturn(42);
409     AndroidMock.replay(mockTimeZone);
410     assertEquals(42, mockTimeZone.getRawOffset());
411     AndroidMock.verify(mockTimeZone);
412   }
413 
testCreateStrictMockUsingCastableParameters()414   public void testCreateStrictMockUsingCastableParameters() throws ClassNotFoundException,
415       IOException, CannotCompileException, NotFoundException {
416     List<GeneratedClassFile> mockClasses =
417         new AndroidMockGenerator().createMocksForClass(SimpleTimeZone.class);
418 
419     compileClasses(mockClasses);
420     SimpleTimeZone mockTimeZone = AndroidMock.createStrictMock(SimpleTimeZone.class, 'a', "GMT");
421     AndroidMock.expect(mockTimeZone.getRawOffset()).andReturn(42);
422     AndroidMock.replay(mockTimeZone);
423     assertEquals(42, mockTimeZone.getRawOffset());
424     AndroidMock.verify(mockTimeZone);
425   }
426 
testCreateStrictMockUsingInterface()427   public void testCreateStrictMockUsingInterface() throws ClassNotFoundException, IOException,
428       CannotCompileException, NotFoundException {
429     List<GeneratedClassFile> mockClasses =
430         new AndroidMockGenerator().createMocksForClass(Map.class);
431 
432     compileClasses(mockClasses);
433     Map<String, String> mockMap = AndroidMock.createStrictMock(Map.class);
434     AndroidMock.expect(mockMap.get("key")).andReturn("Hello World");
435     AndroidMock.replay(mockMap);
436     assertEquals("Hello World", mockMap.get("key"));
437     AndroidMock.verify(mockMap);
438   }
439 
testCreateStrictMockUsingClass()440   public void testCreateStrictMockUsingClass() throws ClassNotFoundException, IOException,
441       CannotCompileException, NotFoundException {
442     List<GeneratedClassFile> mockClasses =
443         new AndroidMockGenerator().createMocksForClass(Vector.class);
444     compileClasses(mockClasses);
445     Vector<String> mockVector = AndroidMock.createStrictMock(Vector.class);
446     AndroidMock.expect(mockVector.get(0)).andReturn("Hello World");
447     AndroidMock.replay(mockVector);
448     assertEquals("Hello World", mockVector.get(0).toString());
449     AndroidMock.verify(mockVector);
450   }
451 
testCreateMockConstructorDoesWorkOnAllReturnTypes()452   public void testCreateMockConstructorDoesWorkOnAllReturnTypes() throws ClassNotFoundException,
453       IOException, CannotCompileException, NotFoundException {
454     List<GeneratedClassFile> mockClasses =
455         new AndroidMockGenerator().createMocksForClass(ClassDoesWorkInConstructor.class);
456     compileClasses(mockClasses);
457     ClassDoesWorkInConstructor mock = AndroidMock.createMock(ClassDoesWorkInConstructor.class);
458   }
459 
testAllForwardedMethods()460   public void testAllForwardedMethods() throws CannotCompileException, NotFoundException {
461     for (CtMethod method : getForwardedMethods()) {
462       MethodVerifier verifier = new MethodVerifier(method);
463       // CtMethod.instrument Causes every instruction in the method to be
464       // inspected, and passed to
465       // the MethodVerifier callback (extends javassist.expr.ExprEditor). We
466       // want to verify that
467       // the expected EasyMock method is called at least once in each
468       // AndroidMock method.
469       method.instrument(verifier);
470       assertTrue(method.getLongName() + " not called.", verifier.expectedMethodCalled());
471     }
472   }
473 
testCheckOrder()474   public void testCheckOrder() throws ClassNotFoundException, IOException, CannotCompileException,
475       NotFoundException {
476     List<GeneratedClassFile> mockClasses =
477         new AndroidMockGenerator().createMocksForClass(Vector.class);
478     compileClasses(mockClasses);
479     Vector<?> mockVector = AndroidMock.createMock(Vector.class);
480     AndroidMock.checkOrder(mockVector, false);
481     AndroidMock.checkOrder(AndroidMock.createMock(Map.class), false);
482   }
483 
testVerify()484   public void testVerify() throws ClassNotFoundException, IOException, CannotCompileException,
485       NotFoundException {
486     List<GeneratedClassFile> mockClasses =
487         new AndroidMockGenerator().createMocksForClass(Vector.class);
488     compileClasses(mockClasses);
489     Vector<?> mockVector = AndroidMock.createMock(Vector.class);
490     AndroidMock.replay(mockVector);
491     AndroidMock.verify(mockVector);
492     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
493     AndroidMock.replay(mockMap);
494     AndroidMock.verify(mockMap);
495   }
496 
testResetToStrict()497   public void testResetToStrict() throws ClassNotFoundException, IOException,
498       CannotCompileException, NotFoundException {
499     List<GeneratedClassFile> mockClasses =
500         new AndroidMockGenerator().createMocksForClass(Vector.class);
501     compileClasses(mockClasses);
502     Vector<?> mockVector = AndroidMock.createMock(Vector.class);
503     AndroidMock.resetToStrict(mockVector);
504     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
505     AndroidMock.resetToStrict(mockMap);
506   }
507 
testResetToDefault()508   public void testResetToDefault() throws ClassNotFoundException, IOException,
509       CannotCompileException, NotFoundException {
510     List<GeneratedClassFile> mockClasses =
511         new AndroidMockGenerator().createMocksForClass(Vector.class);
512     compileClasses(mockClasses);
513     Vector<?> mockVector = AndroidMock.createMock(Vector.class);
514     AndroidMock.resetToDefault(mockVector);
515     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
516     AndroidMock.resetToDefault(mockMap);
517   }
518 
testResetToNice()519   public void testResetToNice() throws ClassNotFoundException, IOException,
520       CannotCompileException, NotFoundException {
521     List<GeneratedClassFile> mockClasses =
522         new AndroidMockGenerator().createMocksForClass(Vector.class);
523     compileClasses(mockClasses);
524     Vector<?> mockVector = AndroidMock.createMock(Vector.class);
525     AndroidMock.resetToNice(mockVector);
526     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
527     AndroidMock.resetToNice(mockMap);
528   }
529 
testReset()530   public void testReset() throws ClassNotFoundException, IOException, CannotCompileException,
531       NotFoundException {
532     List<GeneratedClassFile> mockClasses =
533         new AndroidMockGenerator().createMocksForClass(Vector.class);
534     compileClasses(mockClasses);
535     Vector<?> mockVector = AndroidMock.createMock(Vector.class);
536     AndroidMock.reset(mockVector);
537     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
538     AndroidMock.reset(mockMap);
539 
540   }
541 
testReplay()542   public void testReplay() throws ClassNotFoundException, IOException, CannotCompileException,
543       NotFoundException {
544     List<GeneratedClassFile> mockClasses =
545         new AndroidMockGenerator().createMocksForClass(Vector.class);
546     compileClasses(mockClasses);
547     Vector<?> mockVector = AndroidMock.createMock(Vector.class);
548     AndroidMock.replay(mockVector);
549     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
550     AndroidMock.replay(mockMap);
551   }
552 
testExpect()553   public void testExpect() {
554     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
555     mockMap.clear();
556     AndroidMock.expect(null);
557     AndroidMock.replay(mockMap);
558   }
559 
testExpectLastCall()560   public void testExpectLastCall() {
561     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
562     mockMap.clear();
563     AndroidMock.expectLastCall();
564     AndroidMock.replay(mockMap);
565   }
566 
testAnyBoolean()567   public void testAnyBoolean() {
568     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
569     AndroidMock.expect(mockMap.get(AndroidMock.anyBoolean())).andReturn(null);
570     AndroidMock.replay(mockMap);
571   }
572 
testAnyByte()573   public void testAnyByte() {
574     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
575     AndroidMock.expect(mockMap.get(AndroidMock.anyByte())).andReturn(null);
576     AndroidMock.replay(mockMap);
577   }
578 
testAnyChar()579   public void testAnyChar() {
580     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
581     AndroidMock.expect(mockMap.get(AndroidMock.anyChar())).andReturn(null);
582     AndroidMock.replay(mockMap);
583   }
584 
testAnyInt()585   public void testAnyInt() {
586     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
587     AndroidMock.expect(mockMap.get(AndroidMock.anyInt())).andReturn(null);
588     AndroidMock.replay(mockMap);
589   }
590 
testAnyLong()591   public void testAnyLong() {
592     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
593     AndroidMock.expect(mockMap.get(AndroidMock.anyLong())).andReturn(null);
594     AndroidMock.replay(mockMap);
595   }
596 
testAnyFloat()597   public void testAnyFloat() {
598     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
599     AndroidMock.expect(mockMap.get(AndroidMock.anyFloat())).andReturn(null);
600     AndroidMock.replay(mockMap);
601   }
602 
testAnyDouble()603   public void testAnyDouble() {
604     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
605     AndroidMock.expect(mockMap.get(AndroidMock.anyDouble())).andReturn(null);
606     AndroidMock.replay(mockMap);
607   }
608 
testAnyShort()609   public void testAnyShort() {
610     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
611     AndroidMock.expect(mockMap.get(AndroidMock.anyShort())).andReturn(null);
612     AndroidMock.replay(mockMap);
613   }
614 
testAnyObject()615   public void testAnyObject() {
616     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
617     AndroidMock.expect(mockMap.get(AndroidMock.anyObject())).andReturn(null);
618     AndroidMock.replay(mockMap);
619   }
620 
testGeq()621   public void testGeq() {
622     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
623     AndroidMock.expect(mockMap.get(AndroidMock.geq((byte) 0))).andReturn(null);
624     AndroidMock.expect(mockMap.get(AndroidMock.geq((short) 0))).andReturn(null);
625     AndroidMock.expect(mockMap.get(AndroidMock.geq(0))).andReturn(null);
626     AndroidMock.expect(mockMap.get(AndroidMock.geq(0L))).andReturn(null);
627     AndroidMock.expect(mockMap.get(AndroidMock.geq(0.0))).andReturn(null);
628     AndroidMock.expect(mockMap.get(AndroidMock.geq(0.0f))).andReturn(null);
629     AndroidMock.expect(mockMap.get(AndroidMock.geq("Hi"))).andReturn(null);
630     AndroidMock.replay(mockMap);
631   }
632 
testLeq()633   public void testLeq() {
634     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
635     AndroidMock.expect(mockMap.get(AndroidMock.leq((byte) 0))).andReturn(null);
636     AndroidMock.expect(mockMap.get(AndroidMock.leq((short) 0))).andReturn(null);
637     AndroidMock.expect(mockMap.get(AndroidMock.leq(0))).andReturn(null);
638     AndroidMock.expect(mockMap.get(AndroidMock.leq(0L))).andReturn(null);
639     AndroidMock.expect(mockMap.get(AndroidMock.leq(0.0))).andReturn(null);
640     AndroidMock.expect(mockMap.get(AndroidMock.leq(0.0f))).andReturn(null);
641     AndroidMock.expect(mockMap.get(AndroidMock.leq("Hi"))).andReturn(null);
642     AndroidMock.replay(mockMap);
643   }
644 
testGt()645   public void testGt() {
646     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
647     AndroidMock.expect(mockMap.get(AndroidMock.gt((byte) 0))).andReturn(null);
648     AndroidMock.expect(mockMap.get(AndroidMock.gt((short) 0))).andReturn(null);
649     AndroidMock.expect(mockMap.get(AndroidMock.gt(0))).andReturn(null);
650     AndroidMock.expect(mockMap.get(AndroidMock.gt(0L))).andReturn(null);
651     AndroidMock.expect(mockMap.get(AndroidMock.gt(0.0))).andReturn(null);
652     AndroidMock.expect(mockMap.get(AndroidMock.gt(0.0f))).andReturn(null);
653     AndroidMock.expect(mockMap.get(AndroidMock.gt("Hi"))).andReturn(null);
654     AndroidMock.replay(mockMap);
655   }
656 
testLt()657   public void testLt() {
658     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
659     AndroidMock.expect(mockMap.get(AndroidMock.lt((byte) 0))).andReturn(null);
660     AndroidMock.expect(mockMap.get(AndroidMock.lt((short) 0))).andReturn(null);
661     AndroidMock.expect(mockMap.get(AndroidMock.lt(0))).andReturn(null);
662     AndroidMock.expect(mockMap.get(AndroidMock.lt(0L))).andReturn(null);
663     AndroidMock.expect(mockMap.get(AndroidMock.lt(0.0))).andReturn(null);
664     AndroidMock.expect(mockMap.get(AndroidMock.lt(0.0f))).andReturn(null);
665     AndroidMock.expect(mockMap.get(AndroidMock.lt("Hi"))).andReturn(null);
666     AndroidMock.replay(mockMap);
667   }
668 
testIsA()669   public void testIsA() {
670     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
671     AndroidMock.expect(mockMap.get(AndroidMock.isA(String.class))).andReturn(null);
672     AndroidMock.replay(mockMap);
673   }
674 
testContains()675   public void testContains() {
676     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
677     AndroidMock.expect(mockMap.get(AndroidMock.contains("hi"))).andReturn(null);
678     AndroidMock.replay(mockMap);
679   }
680 
testAnd()681   public void testAnd() {
682     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
683     AndroidMock.expect(mockMap.get(AndroidMock.and(AndroidMock.eq(true), AndroidMock.eq(true))))
684         .andReturn(null);
685     AndroidMock.expect(
686         mockMap.get(AndroidMock.and(AndroidMock.eq((byte) 0), AndroidMock.eq((byte) 0))))
687         .andReturn(null);
688     AndroidMock.expect(
689         mockMap.get(AndroidMock.and(AndroidMock.eq((short) 0), AndroidMock.eq((short) 0))))
690         .andReturn(null);
691     AndroidMock.expect(mockMap.get(AndroidMock.and(AndroidMock.eq(0), AndroidMock.eq(0))))
692         .andReturn(null);
693     AndroidMock.expect(mockMap.get(AndroidMock.and(AndroidMock.eq(0L), AndroidMock.eq(0L))))
694         .andReturn(null);
695     AndroidMock.expect(mockMap.get(AndroidMock.and(AndroidMock.eq(0.0), AndroidMock.eq(0.0))))
696         .andReturn(null);
697     AndroidMock.expect(mockMap.get(AndroidMock.and(AndroidMock.eq(0.0f), AndroidMock.eq(0.0f))))
698         .andReturn(null);
699     AndroidMock.expect(mockMap.get(AndroidMock.and(AndroidMock.eq("hi"), AndroidMock.eq("hi"))))
700         .andReturn(null);
701     AndroidMock.expect(mockMap.get(AndroidMock.and(AndroidMock.eq('a'), AndroidMock.eq('a'))))
702         .andReturn(null);
703     AndroidMock.replay(mockMap);
704   }
705 
testOr()706   public void testOr() {
707     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
708     AndroidMock.expect(mockMap.get(AndroidMock.or(AndroidMock.eq(true), AndroidMock.eq(true))))
709         .andReturn(null);
710     AndroidMock.expect(
711         mockMap.get(AndroidMock.or(AndroidMock.eq((byte) 0), AndroidMock.eq((byte) 0))))
712         .andReturn(null);
713     AndroidMock.expect(
714         mockMap.get(AndroidMock.or(AndroidMock.eq((short) 0), AndroidMock.eq((short) 0))))
715         .andReturn(null);
716     AndroidMock.expect(mockMap.get(AndroidMock.or(AndroidMock.eq(0), AndroidMock.eq(0))))
717         .andReturn(null);
718     AndroidMock.expect(mockMap.get(AndroidMock.or(AndroidMock.eq(0L), AndroidMock.eq(0L))))
719         .andReturn(null);
720     AndroidMock.expect(mockMap.get(AndroidMock.or(AndroidMock.eq(0.0), AndroidMock.eq(0.0))))
721         .andReturn(null);
722     AndroidMock.expect(mockMap.get(AndroidMock.or(AndroidMock.eq(0.0f), AndroidMock.eq(0.0f))))
723         .andReturn(null);
724     AndroidMock.expect(mockMap.get(AndroidMock.or(AndroidMock.eq("hi"), AndroidMock.eq("hi"))))
725         .andReturn(null);
726     AndroidMock.expect(mockMap.get(AndroidMock.or(AndroidMock.eq('a'), AndroidMock.eq('a'))))
727         .andReturn(null);
728     AndroidMock.replay(mockMap);
729   }
730 
testNot()731   public void testNot() {
732     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
733     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq(true)))).andReturn(null);
734     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq((byte) 0)))).andReturn(null);
735     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq((short) 0)))).andReturn(null);
736     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq(0)))).andReturn(null);
737     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq(0L)))).andReturn(null);
738     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq(0.0)))).andReturn(null);
739     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq(0.0f)))).andReturn(null);
740     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq("hi")))).andReturn(null);
741     AndroidMock.expect(mockMap.get(AndroidMock.not(AndroidMock.eq('a')))).andReturn(null);
742     AndroidMock.replay(mockMap);
743   }
744 
testEq()745   public void testEq() {
746     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
747     AndroidMock.expect(mockMap.get(AndroidMock.eq(true))).andReturn(null);
748     AndroidMock.expect(mockMap.get(AndroidMock.eq((byte) 0))).andReturn(null);
749     AndroidMock.expect(mockMap.get(AndroidMock.eq((short) 0))).andReturn(null);
750     AndroidMock.expect(mockMap.get(AndroidMock.eq(0))).andReturn(null);
751     AndroidMock.expect(mockMap.get(AndroidMock.eq(0L))).andReturn(null);
752     AndroidMock.expect(mockMap.get(AndroidMock.eq(0.0))).andReturn(null);
753     AndroidMock.expect(mockMap.get(AndroidMock.eq(0.0f))).andReturn(null);
754     AndroidMock.expect(mockMap.get(AndroidMock.eq(0.0, 0.1))).andReturn(null);
755     AndroidMock.expect(mockMap.get(AndroidMock.eq(0.0f, 0.1f))).andReturn(null);
756     AndroidMock.expect(mockMap.get(AndroidMock.eq("hi"))).andReturn(null);
757     AndroidMock.expect(mockMap.get(AndroidMock.eq('a'))).andReturn(null);
758     AndroidMock.replay(mockMap);
759   }
760 
testAryEq()761   public void testAryEq() {
762     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
763     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new boolean[] {true}))).andReturn(null);
764     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new byte[] {(byte) 0}))).andReturn(null);
765     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new short[] {(short) 0}))).andReturn(null);
766     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new int[] {0}))).andReturn(null);
767     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new long[] {0L}))).andReturn(null);
768     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new double[] {0.0}))).andReturn(null);
769     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new float[] {0.0f}))).andReturn(null);
770     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new String[] {"hi"}))).andReturn(null);
771     AndroidMock.expect(mockMap.get(AndroidMock.aryEq(new char[] {'a'}))).andReturn(null);
772     AndroidMock.replay(mockMap);
773   }
774 
testIsNull()775   public void testIsNull() {
776     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
777     AndroidMock.expect(mockMap.get(AndroidMock.isNull())).andReturn(null);
778     AndroidMock.replay(mockMap);
779   }
780 
testNotNull()781   public void testNotNull() {
782     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
783     AndroidMock.expect(mockMap.get(AndroidMock.notNull())).andReturn(null);
784     AndroidMock.replay(mockMap);
785   }
786 
testFind()787   public void testFind() {
788     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
789     AndroidMock.expect(mockMap.get(AndroidMock.find("hi"))).andReturn(null);
790     AndroidMock.replay(mockMap);
791   }
792 
testMatches()793   public void testMatches() {
794     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
795     AndroidMock.expect(mockMap.get(AndroidMock.matches("hi"))).andReturn(null);
796     AndroidMock.replay(mockMap);
797   }
798 
testStartsWith()799   public void testStartsWith() {
800     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
801     AndroidMock.expect(mockMap.get(AndroidMock.startsWith("hi"))).andReturn(null);
802     AndroidMock.replay(mockMap);
803   }
804 
testEndsWith()805   public void testEndsWith() {
806     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
807     AndroidMock.expect(mockMap.get(AndroidMock.endsWith("hi"))).andReturn(null);
808     AndroidMock.replay(mockMap);
809   }
810 
testSame()811   public void testSame() {
812     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
813     AndroidMock.expect(mockMap.get(AndroidMock.same("hi"))).andReturn(null);
814     AndroidMock.replay(mockMap);
815   }
816 
testCmpEq()817   public void testCmpEq() {
818     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
819     AndroidMock.expect(mockMap.get(AndroidMock.cmpEq("hi"))).andReturn(null);
820     AndroidMock.replay(mockMap);
821   }
822 
testCmp()823   public void testCmp() {
824     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
825     AndroidMock.expect(
826         mockMap.get(AndroidMock.cmp("hi", String.CASE_INSENSITIVE_ORDER, LogicalOperator.EQUAL)))
827         .andReturn(null);
828     AndroidMock.replay(mockMap);
829   }
830 
testCapture()831   public void testCapture() {
832     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
833     AndroidMock.expect(mockMap.get(AndroidMock.capture(new Capture<Byte>()))).andReturn(null);
834     AndroidMock.expect(mockMap.get(AndroidMock.capture(new Capture<Character>()))).andReturn(null);
835     AndroidMock.expect(mockMap.get(AndroidMock.capture(new Capture<Double>()))).andReturn(null);
836     AndroidMock.expect(mockMap.get(AndroidMock.capture(new Capture<Float>()))).andReturn(null);
837     AndroidMock.expect(mockMap.get(AndroidMock.capture(new Capture<Integer>()))).andReturn(null);
838     AndroidMock.expect(mockMap.get(AndroidMock.capture(new Capture<Long>()))).andReturn(null);
839     AndroidMock.expect(mockMap.get(AndroidMock.capture(new Capture<String>()))).andReturn(null);
840     AndroidMock.replay(mockMap);
841   }
842 
testReportMatcher()843   public void testReportMatcher() {
844     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
845     AndroidMock.reportMatcher(new Equals(null));
846     AndroidMock.expect(mockMap.get(null)).andReturn(null);
847     AndroidMock.replay(mockMap);
848   }
849 
testGetCurrentArguments()850   public void testGetCurrentArguments() {
851     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
852     AndroidMock.expect(mockMap.get(null)).andAnswer(new IAnswer() {
853       @Override
854       public Object answer() {
855         AndroidMock.getCurrentArguments();
856         return null;
857       }
858     });
859     AndroidMock.replay(mockMap);
860     mockMap.get(null);
861   }
862 
testMakeThreadSafe()863   public void testMakeThreadSafe() {
864     Map<?, ?> mockMap = AndroidMock.createMock(Map.class);
865     AndroidMock.makeThreadSafe(mockMap, false);
866     AndroidMock.replay(mockMap);
867   }
868 
testAndThrowsOnMockedInterface()869   public void testAndThrowsOnMockedInterface() throws IOException {
870     ObjectInput mockInStream = AndroidMock.createMock(ObjectInput.class);
871     AndroidMock.expect(mockInStream.read()).andThrow(new IOException("foo"));
872     AndroidMock.replay(mockInStream);
873     try {
874       mockInStream.read();
875       fail("IOException not thrown");
876     } catch (IOException e) {
877       assertEquals("foo", e.getMessage());
878     }
879     AndroidMock.verify(mockInStream);
880   }
881 
testAndThrowsOnMockedClass()882   public void testAndThrowsOnMockedClass() throws IOException, ClassNotFoundException,
883       CannotCompileException, NotFoundException {
884     List<GeneratedClassFile> mockClasses =
885         new AndroidMockGenerator().createMocksForClass(InputStream.class);
886     compileClasses(mockClasses);
887     InputStream mockInStream = AndroidMock.createMock(InputStream.class);
888     AndroidMock.expect(mockInStream.read()).andThrow(new IOException("foo"));
889     AndroidMock.replay(mockInStream);
890     try {
891       mockInStream.read();
892       fail("IOException not thrown");
893     } catch (IOException e) {
894       assertEquals("foo", e.getMessage());
895     }
896     AndroidMock.verify(mockInStream);
897   }
898 
899   /**
900    * Used for testing that a given method on Android Mock calls the equivalent
901    * method on EasyMock, to ensure that the method-wiring of Android Mock is
902    * correct.
903    *
904    * @author swoodward@google.com (Stephen Woodward)
905    */
906   class MethodVerifier extends ExprEditor {
907     private CtMethod expectedMethod;
908     private boolean methodCalled;
909 
MethodVerifier(CtMethod expectedMethod)910     MethodVerifier(CtMethod expectedMethod) {
911       this.expectedMethod = expectedMethod;
912     }
913 
914     @Override
edit(MethodCall calledMethod)915     public void edit(MethodCall calledMethod) {
916       try {
917         methodCalled = methodCalled || expectedMethod.equals(calledMethod.getMethod());
918       } catch (NotFoundException e) {
919         throw new RuntimeException(e);
920       }
921     }
922 
expectedMethodCalled()923     public boolean expectedMethodCalled() {
924       return methodCalled;
925     }
926   }
927 }
928