1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package com.android.contacts.compat; 18 19 import android.test.AndroidTestCase; 20 21 import androidx.test.filters.SmallTest; 22 23 @SmallTest 24 public class CompatUtilsTest extends AndroidTestCase { 25 testIsClassAvailable_NullClassName()26 public void testIsClassAvailable_NullClassName() { 27 assertFalse(CompatUtils.isClassAvailable(null)); 28 } 29 testIsClassAvailable_EmptyClassName()30 public void testIsClassAvailable_EmptyClassName() { 31 assertFalse(CompatUtils.isClassAvailable("")); 32 } 33 testIsClassAvailable_NonexistentClass()34 public void testIsClassAvailable_NonexistentClass() { 35 assertFalse(CompatUtils.isClassAvailable("com.android.contacts.common.NonexistentClass")); 36 } 37 testIsClassAvailable()38 public void testIsClassAvailable() { 39 assertTrue(CompatUtils.isClassAvailable(BaseClass.class.getName())); 40 } 41 testIsMethodAvailable_NullClassName()42 public void testIsMethodAvailable_NullClassName() { 43 assertFalse(CompatUtils.isMethodAvailable(null, "methodName")); 44 } 45 testIsMethodAvailable_EmptyClassName()46 public void testIsMethodAvailable_EmptyClassName() { 47 assertFalse(CompatUtils.isMethodAvailable("", "methodName")); 48 } 49 testIsMethodAvailable_NullMethodName()50 public void testIsMethodAvailable_NullMethodName() { 51 assertFalse(CompatUtils.isMethodAvailable("className", null)); 52 } 53 testIsMethodAvailable_EmptyMethodName()54 public void testIsMethodAvailable_EmptyMethodName() { 55 assertFalse(CompatUtils.isMethodAvailable("className", "")); 56 } 57 testIsMethodAvailable_NonexistentClass()58 public void testIsMethodAvailable_NonexistentClass() { 59 assertFalse(CompatUtils.isMethodAvailable("com.android.contacts.common.NonexistentClass", 60 "")); 61 } 62 testIsMethodAvailable_NonexistentMethod()63 public void testIsMethodAvailable_NonexistentMethod() { 64 assertFalse(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "derivedMethod")); 65 } 66 testIsMethodAvailable()67 public void testIsMethodAvailable() { 68 assertTrue(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "baseMethod")); 69 } 70 testIsMethodAvailable_InheritedMethod()71 public void testIsMethodAvailable_InheritedMethod() { 72 assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "baseMethod")); 73 } 74 testIsMethodAvailable_OverloadedMethod()75 public void testIsMethodAvailable_OverloadedMethod() { 76 assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod")); 77 assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod", 78 Integer.TYPE)); 79 } 80 testIsMethodAvailable_NonexistentOverload()81 public void testIsMethodAvailable_NonexistentOverload() { 82 assertFalse(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod", 83 Boolean.TYPE)); 84 } 85 testInvokeMethod_NullMethodName()86 public void testInvokeMethod_NullMethodName() { 87 assertNull(CompatUtils.invokeMethod(new BaseClass(), null, null, null)); 88 } 89 testInvokeMethod_EmptyMethodName()90 public void testInvokeMethod_EmptyMethodName() { 91 assertNull(CompatUtils.invokeMethod(new BaseClass(), "", null, null)); 92 } 93 testInvokeMethod_NullClassInstance()94 public void testInvokeMethod_NullClassInstance() { 95 assertNull(CompatUtils.invokeMethod(null, "", null, null)); 96 } 97 testInvokeMethod_NonexistentMethod()98 public void testInvokeMethod_NonexistentMethod() { 99 assertNull(CompatUtils.invokeMethod(new BaseClass(), "derivedMethod", null, null)); 100 } 101 testInvokeMethod_MethodWithNoParameters()102 public void testInvokeMethod_MethodWithNoParameters() { 103 assertEquals(1, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod", null, null)); 104 } 105 testInvokeMethod_MethodWithNoParameters_WithParameters()106 public void testInvokeMethod_MethodWithNoParameters_WithParameters() { 107 assertNull(CompatUtils.invokeMethod(new DerivedClass(), "derivedMethod", 108 new Class<?>[] {Integer.TYPE}, new Object[] {1})); 109 } 110 testInvokeMethod_MethodWithParameters_WithEmptyParameterList()111 public void testInvokeMethod_MethodWithParameters_WithEmptyParameterList() { 112 assertNull(CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod", 113 new Class<?>[] {Integer.TYPE}, new Object[] {})); 114 } 115 testInvokeMethod_InvokeSimpleMethod()116 public void testInvokeMethod_InvokeSimpleMethod() { 117 assertEquals(2, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod", 118 new Class<?>[] {Integer.TYPE}, new Object[] {2})); 119 } 120 121 private class BaseClass { baseMethod()122 public void baseMethod() {} 123 } 124 125 private class DerivedClass extends BaseClass { derivedMethod()126 public int derivedMethod() { 127 // This method needs to return something to differentiate a successful invocation from 128 // an unsuccessful one. 129 return 0; 130 } 131 overloadedMethod()132 public int overloadedMethod() { 133 return 1; 134 } 135 overloadedMethod(int i)136 public int overloadedMethod(int i) { 137 return i; 138 } 139 } 140 } 141