18da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal/* 28da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Copyright 2010 Google Inc. 38da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * 48da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Licensed under the Apache License, Version 2.0 (the "License"); you may not 58da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * use this file except in compliance with the License. You may obtain a copy of 68da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * the License at 78da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * 88da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * http://www.apache.org/licenses/LICENSE-2.0 98da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * 108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Unless required by applicable law or agreed to in writing, software 118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * License for the specific language governing permissions and limitations under 148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * the License. 158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal */ 168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalpackage com.google.android.testing.mocking; 178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport javassist.CannotCompileException; 198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport javassist.ClassPool; 208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport javassist.CtClass; 218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport javassist.CtMethod; 228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport javassist.NotFoundException; 238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport junit.framework.TestCase; 258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.io.ByteArrayInputStream; 278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.io.IOException; 288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.lang.reflect.Method; 298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.util.ArrayList; 308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.util.Arrays; 318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.util.HashMap; 328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.util.List; 338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.util.Map; 348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal/** 378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Various tests that verify that different types of Classes are handled 388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * correctly. 398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * 408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * @author swoodward@google.com (Stephen Woodward) 418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal */ 428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalpublic class ClassTypeTests extends TestCase { 438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private AndroidMockGenerator androidMockGenerator = new AndroidMockGenerator(); 448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private AndroidMockGenerator getAndroidMockGenerator() { 468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return androidMockGenerator; 478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private void assertAllMethodNames(List<String> expectedNames, 508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Map<String, List<String>> expectedMethods, List<GeneratedClassFile> classes) 518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal throws IOException { 528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (GeneratedClassFile clazz : classes) { 538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertTrue(expectedNames.contains(clazz.getClassName())); 548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedMethods.get(clazz.getClassName()), getMethodNames(clazz)); 558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private <T> void assertUnorderedContentsSame(Iterable<T> expected, Iterable<T> actual) { 598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<T> missingItems = new ArrayList<T>(); 608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<T> extraItems = new ArrayList<T>(); 618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (T item : expected) { 628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal missingItems.add(item); 638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (T item : actual) { 658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal missingItems.remove(item); 668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal extraItems.add(item); 678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (T item : expected) { 698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal extraItems.remove(item); 708da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 718da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal if (missingItems.size() + extraItems.size() != 0) { 728da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String errorMessage = 738da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "Contents were different. Missing: " + Arrays.toString(missingItems.toArray()) 748da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + " Extra: " + Arrays.toString(extraItems.toArray()); 758da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal fail(errorMessage); 768da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 778da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 788da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 798da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getExpectedNames(Class<?> clazz) { 808da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return new ArrayList<String>(Arrays.asList(new String[] { 818da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "genmocks." + clazz.getCanonicalName() + "DelegateInterface", 828da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "genmocks." + clazz.getCanonicalName() + "DelegateSubclass"})); 838da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 848da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 858da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private Iterable<String> getMethodNames(GeneratedClassFile clazz) throws IOException { 868da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal ByteArrayInputStream classInputStream = new ByteArrayInputStream(clazz.getContents()); 878da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass ctClass; 888da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal try { 898da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal ctClass = ClassPool.getDefault().getCtClass(clazz.getClassName()); 908da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal if (ctClass.isFrozen()) { 918da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal ctClass.defrost(); 928da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 938da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } catch (NotFoundException e) { 948da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal // That's ok, we're just defrosting any classes that affect us that were created 958da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal // by other tests. NotFoundException implies the class is not frozen. 968da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 978da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal ctClass = ClassPool.getDefault().makeClass(classInputStream); 988da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return getMethodNames(ctClass.getDeclaredMethods()); 998da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1008da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1018da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getMethodNames(CtMethod[] methods) { 1028da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> methodNames = new ArrayList<String>(); 1038da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (CtMethod method : methods) { 1048da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal methodNames.add(method.getName()); 1058da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1068da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return methodNames; 1078da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1088da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1098da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getMethodNames(Method[] methods, String[] exclusions) { 1108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> methodNames = new ArrayList<String>(); 1118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (Method method : methods) { 1128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal if (!Arrays.asList(exclusions).contains(method.getName())) { 1138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal methodNames.add(method.getName()); 1148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return methodNames; 1178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private Map<String, List<String>> getExpectedMethodsMap(List<String> expectedNames, 1208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Class<?> clazz) { 1218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return getExpectedMethodsMap(expectedNames, clazz, new String[0]); 1228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private Map<String, List<String>> getExpectedMethodsMap(List<String> expectedNames, 1258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Class<?> clazz, String[] exclusions) { 1268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Map<String, List<String>> expectedMethods = new HashMap<String, List<String>>(); 1278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedMethods.put(expectedNames.get(0), new ArrayList<String>(Arrays.asList(new String[] { 1288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "finalize", "clone"}))); 1298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedMethods.put(expectedNames.get(1), new ArrayList<String>(Arrays.asList(new String[] { 1308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "finalize", "clone", "setDelegate___AndroidMock", "getDelegate___AndroidMock"}))); 1318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedMethods.get(expectedNames.get(0)).addAll( 1328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getMethodNames(clazz.getDeclaredMethods(), exclusions)); 1338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedMethods.get(expectedNames.get(1)).addAll( 1348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getMethodNames(clazz.getDeclaredMethods(), exclusions)); 1358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return expectedMethods; 1368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassIsDuplicate() throws ClassNotFoundException, IOException, 1398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 1408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classList = 1418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getAndroidMockGenerator().createMocksForClass(Object.class); 1428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> secondClassList = 1438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getAndroidMockGenerator().createMocksForClass(Object.class); 1448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(classList, secondClassList); 1458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassHasDelegateMethods() throws ClassNotFoundException, IOException, 1488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 1498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNames(ClassHasDelegateMethods.class); 1508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Map<String, List<String>> expectedMethods = 1518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getExpectedMethodsMap(expectedNames, ClassHasDelegateMethods.class, 1528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal new String[] {"getDelegate___AndroidMock"}); 1538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal // This use case doesn't fit our util in any nice way, so just tweak it. 1548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedMethods.get( 1558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "genmocks.com.google.android.testing.mocking.ClassHasDelegateMethodsDelegateInterface") 1568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .add("getDelegate___AndroidMock"); 1578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 1598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = 1608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.createMocksForClass(ClassHasDelegateMethods.class); 1618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(2, classes.size()); 1628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertAllMethodNames(expectedNames, expectedMethods, classes); 1638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassHasFinalMethods() throws ClassNotFoundException, IOException, 1668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 1678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNames(ClassHasFinalMethods.class); 1688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Map<String, List<String>> expectedMethods = 1698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getExpectedMethodsMap(expectedNames, ClassHasFinalMethods.class, new String[] {"foo", 1708da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "foobar"}); 1718da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1728da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 1738da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = 1748da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.createMocksForClass(ClassHasFinalMethods.class); 1758da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(2, classes.size()); 1768da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertAllMethodNames(expectedNames, expectedMethods, classes); 1778da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1788da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1798da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassHasNoDefaultConstructor() throws ClassNotFoundException, IOException, 1808da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 1818da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 1828da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = 1838da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.createMocksForClass(ClassHasNoDefaultConstructor.class); 1848da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(2, classes.size()); 1858da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1868da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1878da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassHasNoPublicConstructors() throws ClassNotFoundException, IOException, 1888da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 1898da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 1908da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = 1918da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.createMocksForClass(ClassHasNoPublicConstructors.class); 1928da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(0, classes.size()); 1938da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1948da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1958da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassHasOverloadedMethods() throws ClassNotFoundException, IOException, 1968da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 1978da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNames(ClassHasOverloadedMethods.class); 1988da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Map<String, List<String>> expectedMethods = 1998da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getExpectedMethodsMap(expectedNames, ClassHasOverloadedMethods.class); 2008da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2018da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2028da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = 2038da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.createMocksForClass(ClassHasOverloadedMethods.class); 2048da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(2, classes.size()); 2058da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertAllMethodNames(expectedNames, expectedMethods, classes); 2068da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2078da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2088da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassHasStaticMethods() throws ClassNotFoundException, IOException, 2098da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 2108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNames(ClassHasStaticMethods.class); 2118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Map<String, List<String>> expectedMethods = 2128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getExpectedMethodsMap(expectedNames, ClassHasStaticMethods.class, 2138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal new String[] {"staticFoo"}); 2148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = 2178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.createMocksForClass(ClassHasStaticMethods.class); 2188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(2, classes.size()); 2198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertAllMethodNames(expectedNames, expectedMethods, classes); 2208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassIsAnnotation() throws ClassNotFoundException, IOException, 2238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 2248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = mockGenerator.createMocksForClass(ClassIsAnnotation.class); 2268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(0, classes.size()); 2278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassIsEnum() throws ClassNotFoundException, IOException, CannotCompileException { 2308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = mockGenerator.createMocksForClass(ClassIsEnum.class); 2328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(0, classes.size()); 2338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassIsFinal() throws ClassNotFoundException, IOException, 2368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 2378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = mockGenerator.createMocksForClass(ClassIsFinal.class); 2398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(0, classes.size()); 2408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassIsInterface() throws ClassNotFoundException, IOException, 2438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 2448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = mockGenerator.createMocksForClass(ClassIsInterface.class); 2468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(0, classes.size()); 2478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassIsArray() throws ClassNotFoundException, IOException, 2508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 2518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = mockGenerator.createMocksForClass(Object[].class); 2538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(0, classes.size()); 2548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassIsNormal() throws ClassNotFoundException, IOException, 2578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 2588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = mockGenerator.createMocksForClass(Object.class); 2608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(2, classes.size()); 2618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testClassIsPrimitive() throws ClassNotFoundException, IOException, 2648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException { 2658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 2668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = mockGenerator.createMocksForClass(Integer.TYPE); 2678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(0, classes.size()); 2688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal} 270