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.IOException; 278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.lang.reflect.Method; 288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.math.BigInteger; 298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.util.ArrayList; 308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.util.Arrays; 318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalimport java.util.List; 328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal/** 358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Tests for the AndroidMockGenerator class. 368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * 378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * @author swoodward@google.com (Stephen Woodward) 388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal */ 398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigalpublic class AndroidMockGeneratorTest extends TestCase { 408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private AndroidMockGenerator getAndroidMockGenerator() { 418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return new AndroidMockGenerator(); 428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private NoFileAndroidMockGenerator getNoFileMockGenerator() { 458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return new NoFileAndroidMockGenerator(); 468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private void cleanupGeneratedClasses(CtClass... classes) { 498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (CtClass clazz : classes) { 508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal clazz.detach(); 518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private <T> void assertUnorderedContentsSame(Iterable<T> expected, Iterable<T> actual) { 558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<T> missingItems = new ArrayList<T>(); 568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<T> extraItems = new ArrayList<T>(); 578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (T item : expected) { 588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal missingItems.add(item); 598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (T item : actual) { 618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal missingItems.remove(item); 628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal extraItems.add(item); 638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (T item : expected) { 658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal extraItems.remove(item); 668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal if (missingItems.size() + extraItems.size() != 0) { 688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String errorMessage = 698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "Contents were different. Missing: " + Arrays.toString(missingItems.toArray()) 708da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + " Extra: " + Arrays.toString(extraItems.toArray()); 718da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal fail(errorMessage); 728da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 738da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 748da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 758da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getExpectedNamesForNumberClass() { 768da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return getExpectedNamesForNumberClass(false); 778da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 788da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 798da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getExpectedNamesForObjectClass() { 808da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = new ArrayList<String>(); 818da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedNames.addAll(Arrays.asList(new String[] {"clone", "finalize"})); 828da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return expectedNames; 838da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 848da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 858da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getExpectedNamesForNumberClass(boolean includeDelegateMethods) { 868da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNamesForObjectClass(); 878da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedNames.addAll(Arrays.asList(new String[] {"byteValue", "doubleValue", "floatValue", 888da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "intValue", "longValue", "shortValue"})); 898da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal if (includeDelegateMethods) { 908da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedNames.addAll(Arrays.asList(new String[] {"getDelegate___AndroidMock", 918da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "setDelegate___AndroidMock"})); 928da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 938da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return expectedNames; 948da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 958da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 968da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getExpectedNamesForBigIntegerClass() { 978da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNamesForNumberClass(); 988da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedNames.addAll(Arrays.asList(new String[] {"abs", "add", "and", "andNot", "bitCount", 998da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "bitLength", "clearBit", "compareTo", "divide", "divideAndRemainder", "flipBit", "gcd", 1008da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "getLowestSetBit", "isProbablePrime", "max", "min", "mod", "modInverse", "modPow", 1018da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "multiply", "negate", "nextProbablePrime", "not", "or", "pow", "remainder", "setBit", 1028da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "shiftLeft", "shiftRight", "signum", "subtract", "testBit", "toByteArray", "toString", 1038da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "xor"})); 1048da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return expectedNames; 1058da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1068da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1078da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getMethodNames(CtMethod[] methods) { 1088da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> methodNames = new ArrayList<String>(); 1098da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (CtMethod method : methods) { 1108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal methodNames.add(method.getName()); 1118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return methodNames; 1138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getClassNames(List<GeneratedClassFile> classes) { 1168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> classNames = new ArrayList<String>(); 1178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (GeneratedClassFile clazz : classes) { 1188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal classNames.add(clazz.getClassName()); 1198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return classNames; 1218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getExpectedSignaturesForBigIntegerClass() { 1248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = new ArrayList<String>(); 1258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedNames.addAll(Arrays.asList(new String[] { 1268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public int java.math.BigInteger.getLowestSetBit()", 1278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.abs()", 1288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "protected void java.lang.Object.finalize() throws java.lang.Throwable", 1298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.modPow(java.math.BigInteger," 1308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "java.math.BigInteger)", 1318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "protected native java.lang.Object java.lang.Object.clone() throws " 1328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "java.lang.CloneNotSupportedException", 1338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.setBit(int)", 1348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.shiftRight(int)", 1358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public int java.math.BigInteger.bitLength()", 1368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.not()", 1378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.subtract(java.math.BigInteger)", 1388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.flipBit(int)", 1398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public boolean java.math.BigInteger.isProbablePrime(int)", 1408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.add(java.math.BigInteger)", 1418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.modInverse(java.math.BigInteger)", 1428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.clearBit(int)", 1438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.multiply(java.math.BigInteger)", 1448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public byte java.lang.Number.byteValue()", 1458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.gcd(java.math.BigInteger)", 1468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public float java.math.BigInteger.floatValue()", 1478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.lang.String java.math.BigInteger.toString(int)", 1488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.min(java.math.BigInteger)", 1498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public int java.math.BigInteger.intValue()", 1508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.or(java.math.BigInteger)", 1518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.remainder(java.math.BigInteger)", 1528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.divide(java.math.BigInteger)", 1538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.xor(java.math.BigInteger)", 1548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.and(java.math.BigInteger)", 1558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public int java.math.BigInteger.signum()", 1568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger[] java.math.BigInteger.divideAndRemainder(" 1578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "java.math.BigInteger)", 1588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.max(java.math.BigInteger)", 1598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.shiftLeft(int)", 1608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public double java.math.BigInteger.doubleValue()", 1618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.pow(int)", 1628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public short java.lang.Number.shortValue()", 1638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.andNot(java.math.BigInteger)", 1648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public byte[] java.math.BigInteger.toByteArray()", 1658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.negate()", 1668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public int java.math.BigInteger.compareTo(java.math.BigInteger)", 1678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public boolean java.math.BigInteger.testBit(int)", 1688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public int java.math.BigInteger.bitCount()", 1698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public long java.math.BigInteger.longValue()", 1708da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.mod(java.math.BigInteger)", 1718da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.math.BigInteger java.math.BigInteger.nextProbablePrime()", 1728da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal })); 1738da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return expectedNames; 1748da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1758da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1768da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private List<String> getMethodSignatures(Method[] methods) { 1778da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> methodSignatures = new ArrayList<String>(); 1788da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (Method method : methods) { 1798da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal if (getAndroidMockGenerator().isMockable(method)) { 1808da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal methodSignatures.add(method.toGenericString()); 1818da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1828da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1838da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return methodSignatures; 1848da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1858da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1868da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testIsSupportedType() { 1878da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Class<?>[] unsupportedClasses = 1888da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal new Class[] {ClassIsAnnotation.class, ClassIsEnum.class, ClassIsFinal.class, 1898da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal ClassIsInterface.class}; 1908da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Class<?>[] supportedClasses = new Class[] {Object.class}; 1918da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 1928da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (Class<?> clazz : unsupportedClasses) { 1938da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertFalse(getAndroidMockGenerator().classIsSupportedType(clazz)); 1948da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1958da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (Class<?> clazz : supportedClasses) { 1968da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertTrue(getAndroidMockGenerator().classIsSupportedType(clazz)); 1978da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1988da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 1998da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2008da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateFieldName() { 2018da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("delegateMockObject", getAndroidMockGenerator().getDelegateFieldName()); 2028da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2038da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2048da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetInterfaceMethodSource() throws SecurityException, NoSuchMethodException { 2058da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Object.class.getMethod("equals", Object.class); 2068da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public boolean equals(java.lang.Object arg0);", getAndroidMockGenerator() 2078da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getInterfaceMethodSource(method)); 2088da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2098da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetInterfaceMethodSourceMultipleExceptions() throws SecurityException, 2118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 2128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Class.class.getDeclaredMethod("newInstance"); 2138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public java.lang.Object newInstance() throws java.lang.InstantiationException," 2148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "java.lang.IllegalAccessException;", getAndroidMockGenerator().getInterfaceMethodSource( 2158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal method)); 2168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetInterfaceMethodSourceProtectedMethod() throws SecurityException, 2198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 2208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Object.class.getDeclaredMethod("finalize"); 2218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public void finalize() throws java.lang.Throwable;", getAndroidMockGenerator() 2228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getInterfaceMethodSource(method)); 2238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetInterfaceMethodSourceNoParams() throws SecurityException, 2268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 2278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Object.class.getMethod("toString"); 2288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public java.lang.String toString();", getAndroidMockGenerator() 2298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getInterfaceMethodSource(method)); 2308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetInterfaceMethodSourceVoidReturn() throws SecurityException, 2338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 2348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Thread.class.getMethod("run"); 2358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public void run();", getAndroidMockGenerator().getInterfaceMethodSource(method)); 2368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetInterfaceMethodSourceFinal() throws SecurityException, NoSuchMethodException { 2398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Object.class.getMethod("notify"); 2408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal try { 2418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getAndroidMockGenerator().getInterfaceMethodSource(method); 2428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal fail("Exception not thrown on a final method"); 2438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } catch (UnsupportedOperationException e) { 2448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal // expected 2458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetInterfaceMethodSourceStatic() throws SecurityException, NoSuchMethodException { 2498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Thread.class.getMethod("currentThread"); 2508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal try { 2518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getAndroidMockGenerator().getInterfaceMethodSource(method); 2528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal fail("Exception not thrown on a static method"); 2538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } catch (UnsupportedOperationException e) { 2548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal // expected 2558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetInterfaceName() { 2598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator r = getAndroidMockGenerator(); 2608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("genmocks.java.lang.ObjectDelegateInterface", 2618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal FileUtils.getInterfaceNameFor(Object.class, SdkVersion.UNKNOWN)); 2628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetSubclassName() { 2658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator r = getAndroidMockGenerator(); 2668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("genmocks.java.lang.ObjectDelegateSubclass", 2678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal FileUtils.getSubclassNameFor(Object.class, SdkVersion.UNKNOWN)); 2688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2708da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSource() throws SecurityException, NoSuchMethodException { 2718da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Object.class.getMethod("equals", Object.class); 2728da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public boolean equals(java.lang.Object arg0){if(this.delegateMockObject==null){" 2738da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "return false;}return this.delegateMockObject.equals(arg0);}", getAndroidMockGenerator() 2748da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getDelegateMethodSource(method)); 2758da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2768da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 2778da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSourceAllTypes() throws SecurityException, 2788da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 2798da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String[] returnTypes = 2808da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal new String[] {"boolean", "byte", "short", "int", "long", "char", "float", "double"}; 2818da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String[] castTypes = 2828da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal new String[] {"false", "(byte)0", "(short)0", "(int)0", "(long)0", "(char)0", "(float)0", 2838da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "(double)0"}; 2848da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (int i = 0; i < returnTypes.length; ++i) { 2858da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = AllTypes.class.getMethod(returnTypes[i] + "Foo"); 2868da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public " + returnTypes[i] + " " + returnTypes[i] 2878da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "Foo(){if(this.delegateMockObject==null){return " + castTypes[i] 2888da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + ";}return this.delegateMockObject." + returnTypes[i] + "Foo();}", 2898da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getAndroidMockGenerator().getDelegateMethodSource(method)); 2908da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 2918da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = AllTypes.class.getMethod("objectFoo"); 2928da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public java.lang.Object objectFoo(){if(this.delegateMockObject==null){return " 2938da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "null;}return this.delegateMockObject.objectFoo();}", getAndroidMockGenerator() 2948da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getDelegateMethodSource(method)); 2958da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal method = AllTypes.class.getMethod("voidFoo"); 2968da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public void voidFoo(){if(this.delegateMockObject==null){return ;" 2978da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "}this.delegateMockObject.voidFoo();}", getAndroidMockGenerator() 2988da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getDelegateMethodSource(method)); 2998da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3008da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3018da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal private class AllTypes { 3028da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3038da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void voidFoo() { 3048da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3058da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3068da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3078da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public boolean booleanFoo() { 3088da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return false; 3098da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public byte byteFoo() { 3138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return 0; 3148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public short shortFoo() { 3188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return 0; 3198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public int intFoo() { 3238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return 0; 3248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public long longFoo() { 3288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return 0; 3298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public char charFoo() { 3338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return 0; 3348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public float floatFoo() { 3388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return 0; 3398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public double doubleFoo() { 3438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return 0; 3448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @SuppressWarnings("unused") 3478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public Object objectFoo() { 3488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal return null; 3498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSourceMultipleExceptions() throws SecurityException, 3538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 3548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Class.class.getDeclaredMethod("newInstance"); 3558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals( 3568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.lang.Object newInstance() throws java.lang.InstantiationException," 3578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "java.lang.IllegalAccessException{if(this.delegateMockObject==null){return null;}" 3588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "return this.delegateMockObject.newInstance();}", getAndroidMockGenerator() 3598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getDelegateMethodSource(method)); 3608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSourceProtectedMethod() throws SecurityException, 3638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 3648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Object.class.getDeclaredMethod("finalize"); 3658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public void finalize() throws java.lang.Throwable{if(this.delegateMockObject==" 3668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "null){return ;}this.delegateMockObject.finalize();}", getAndroidMockGenerator() 3678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getDelegateMethodSource(method)); 3688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3708da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSourceMultiParams() throws SecurityException, 3718da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 3728da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = 3738da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String.class.getMethod("getChars", Integer.TYPE, Integer.TYPE, char[].class, Integer.TYPE); 3748da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals( 3758da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public void getChars(int arg0,int arg1,char[] arg2,int arg3){if(this." 3768da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "delegateMockObject==null){return ;}this.delegateMockObject.getChars(arg0,arg1,arg2," 3778da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "arg3);}", getAndroidMockGenerator().getDelegateMethodSource(method)); 3788da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3798da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3808da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSourceNoParams() throws SecurityException, 3818da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 3828da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Object.class.getMethod("toString"); 3838da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals( 3848da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public java.lang.String toString(){if(this.delegateMockObject==null){return null;" 3858da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "}return this.delegateMockObject.toString();}", getAndroidMockGenerator() 3868da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal .getDelegateMethodSource(method)); 3878da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3888da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3898da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSourceVoidReturn() throws SecurityException, 3908da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoSuchMethodException { 3918da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Thread.class.getMethod("run"); 3928da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("public void run(){if(this.delegateMockObject==null){return ;}this." 3938da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + "delegateMockObject.run();}", getAndroidMockGenerator().getDelegateMethodSource(method)); 3948da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 3958da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 3968da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSourceFinal() throws SecurityException, NoSuchMethodException { 3978da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Object.class.getMethod("notify"); 3988da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal try { 3998da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getAndroidMockGenerator().getDelegateMethodSource(method); 4008da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal fail("Exception not thrown on a final method"); 4018da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } catch (UnsupportedOperationException e) { 4028da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal // expected 4038da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4048da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4058da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4068da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetDelegateMethodSourceStatic() throws SecurityException, NoSuchMethodException { 4078da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method method = Thread.class.getMethod("currentThread"); 4088da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal try { 4098da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal getAndroidMockGenerator().getDelegateMethodSource(method); 4108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal fail("Exception not thrown on a static method"); 4118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } catch (UnsupportedOperationException e) { 4128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal // expected 4138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGenerateEmptySubclass() throws ClassNotFoundException, NotFoundException { 4178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 4188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = mockGenerator.generateInterface(String.class, SdkVersion.UNKNOWN); 4198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedClass = getAndroidMockGenerator().generateSkeletalClass( 4208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String.class, generatedInterface, SdkVersion.UNKNOWN); 4218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("genmocks.java.lang", generatedClass.getPackageName()); 4238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("StringDelegateSubclass", generatedClass.getSimpleName()); 4248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals("java.lang.String", generatedClass.getSuperclass().getName()); 4258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses(generatedInterface, generatedClass); 4268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testAddMethods() throws ClassNotFoundException { 4298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 4308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = mockGenerator.generateInterface(Number.class, SdkVersion.UNKNOWN); 4318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedClass = 4328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.generateSkeletalClass(Number.class, generatedInterface, SdkVersion.UNKNOWN); 4338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.addMethods(Number.class, generatedClass); 4358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNamesForNumberClass(); 4378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> actualNames = getMethodNames(generatedClass.getDeclaredMethods()); 4388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedNames, actualNames); 4398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses(generatedInterface, generatedClass); 4408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testAddMethodsObjectClass() throws ClassNotFoundException { 4438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 4448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = mockGenerator.generateInterface(Object.class, SdkVersion.UNKNOWN); 4458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedClass = 4468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.generateSkeletalClass(Object.class, generatedInterface, SdkVersion.UNKNOWN); 4478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.addMethods(Object.class, generatedClass); 4498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNamesForObjectClass(); 4518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> actualNames = getMethodNames(generatedClass.getDeclaredMethods()); 4528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedNames, actualNames); 4538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses(generatedInterface, generatedClass); 4548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testAddMethodsUsesSuperclass() throws ClassNotFoundException { 4578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 4588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = mockGenerator.generateInterface( 4598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal BigInteger.class, SdkVersion.UNKNOWN); 4608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedClass = mockGenerator.generateSkeletalClass( 4618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal BigInteger.class, generatedInterface, SdkVersion.UNKNOWN); 4628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.addMethods(BigInteger.class, generatedClass); 4648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNamesForBigIntegerClass(); 4668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> actualNames = getMethodNames(generatedClass.getDeclaredMethods()); 4678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedNames, actualNames); 4688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses(generatedInterface, generatedClass); 4698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4708da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4718da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetAllMethods() throws ClassNotFoundException { 4728da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 4738da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = mockGenerator.generateInterface( 4748da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal BigInteger.class, SdkVersion.UNKNOWN); 4758da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedClass = mockGenerator.generateSkeletalClass( 4768da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal BigInteger.class, generatedInterface, SdkVersion.UNKNOWN); 4778da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4788da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method[] methods = mockGenerator.getAllMethods(BigInteger.class); 4798da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4808da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedSignaturesForBigIntegerClass(); 4818da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> actualNames = getMethodSignatures(methods); 4828da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedNames, actualNames); 4838da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses(generatedInterface, generatedClass); 4848da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4858da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4868da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGenerateInterface() { 4878da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 4888da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = mockGenerator.generateInterface(Number.class, SdkVersion.UNKNOWN); 4898da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4908da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNamesForNumberClass(); 4918da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> actualNames = getMethodNames(generatedInterface.getDeclaredMethods()); 4928da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedNames, actualNames); 4938da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses(generatedInterface); 4948da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 4958da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 4968da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testAddInterfaceMethods() { 4978da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 4988da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = AndroidMockGenerator.getClassPool().makeInterface("testInterface"); 4998da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5008da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.addInterfaceMethods(Number.class, generatedInterface); 5018da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5028da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNamesForNumberClass(); 5038da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> actualNames = getMethodNames(generatedInterface.getDeclaredMethods()); 5048da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedNames, actualNames); 5058da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses(generatedInterface); 5068da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5078da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5088da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGenerateSubclass() throws ClassNotFoundException { 5098da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 5108da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = mockGenerator.generateInterface(Number.class, SdkVersion.UNKNOWN); 5118da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5128da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedClass = 5138da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal mockGenerator.generateSubClass(Number.class, generatedInterface, SdkVersion.UNKNOWN); 5148da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5158da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = getExpectedNamesForNumberClass(true); 5168da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> actualNames = getMethodNames(generatedClass.getDeclaredMethods()); 5178da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedNames, actualNames); 5188da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses(generatedInterface, generatedClass); 5198da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5208da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5218da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testCreateMockForClass() throws ClassNotFoundException, IOException, 5228da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CannotCompileException, NotFoundException { 5238da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal NoFileAndroidMockGenerator mockGenerator = getNoFileMockGenerator(); 5248da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<GeneratedClassFile> classes = mockGenerator.createMocksForClass(Object.class); 5258da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5268da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> expectedNames = new ArrayList<String>(); 5278da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String subclassName = "genmocks.java.lang.ObjectDelegateSubclass"; 5288da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String interfaceName = "genmocks.java.lang.ObjectDelegateInterface"; 5298da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal expectedNames.addAll(Arrays.asList(new String[] {subclassName, 5308da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal interfaceName})); 5318da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<String> actualNames = getClassNames(classes); 5328da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertUnorderedContentsSame(expectedNames, actualNames); 5338da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal cleanupGeneratedClasses( 5348da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal ClassPool.getDefault().get(subclassName), 5358da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal ClassPool.getDefault().get(interfaceName)); 5368da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5378da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5388da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testGetSetDelegateMethodSource() { 5398da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal AndroidMockGenerator mockGenerator = getAndroidMockGenerator(); 5408da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal CtClass generatedInterface = mockGenerator.generateInterface(Object.class, SdkVersion.UNKNOWN); 5418da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal String expectedSource = 5428da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal "public void setDelegate___AndroidMock(genmocks.java.lang.ObjectDelegateInterface obj) {" 5438da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal + " this.delegateMockObject = obj;}"; 5448da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5458da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertEquals(expectedSource, mockGenerator.getSetDelegateMethodSource(generatedInterface)); 5468da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5478da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5488da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal public void testIsForbiddenMethod() throws SecurityException, NoSuchMethodException { 5498da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method[] forbiddenMethods = 5508da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal new Method[] {Object.class.getMethod("equals", Object.class), 5518da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Object.class.getMethod("toString"), Object.class.getMethod("hashCode")}; 5528da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal Method[] allowedMethods = new Method[] {BigInteger.class.getMethod("toString", Integer.TYPE)}; 5538da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (Method method : forbiddenMethods) { 5548da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertTrue(getAndroidMockGenerator().isForbiddenMethod(method)); 5558da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5568da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal for (Method method : allowedMethods) { 5578da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal assertFalse(getAndroidMockGenerator().isForbiddenMethod(method)); 5588da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5598da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5608da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5618da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal /** 5628da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * Support test class for capturing the names of files that would have been 5638da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * saved to a jar file. 5648da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * 5658da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal * @author swoodward@google.com (Stephen Woodward) 5668da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal */ 5678da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal class NoFileAndroidMockGenerator extends AndroidMockGenerator { 5688da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal List<CtClass> savedClasses = new ArrayList<CtClass>(); 5698da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal 5708da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal @Override 5718da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal void saveCtClass(CtClass clazz) { 5728da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal savedClasses.add(clazz); 5738da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5748da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal } 5758da3e6ec64b991f5aa1e6561941d130683eba753Luis Sigal} 576