blob: c1d6df97f77caf6a0377c7c29eb5440016161360 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.contacts.common.compat;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
@SmallTest
public class CompatUtilsTest extends AndroidTestCase {
public void testIsClassAvailable_NullClassName() {
assertFalse(CompatUtils.isClassAvailable(null));
}
public void testIsClassAvailable_EmptyClassName() {
assertFalse(CompatUtils.isClassAvailable(""));
}
public void testIsClassAvailable_NonexistentClass() {
assertFalse(CompatUtils.isClassAvailable("com.android.contacts.common.NonexistentClass"));
}
public void testIsClassAvailable() {
assertTrue(CompatUtils.isClassAvailable(BaseClass.class.getName()));
}
public void testIsMethodAvailable_NullClassName() {
assertFalse(CompatUtils.isMethodAvailable(null, "methodName"));
}
public void testIsMethodAvailable_EmptyClassName() {
assertFalse(CompatUtils.isMethodAvailable("", "methodName"));
}
public void testIsMethodAvailable_NullMethodName() {
assertFalse(CompatUtils.isMethodAvailable("className", null));
}
public void testIsMethodAvailable_EmptyMethodName() {
assertFalse(CompatUtils.isMethodAvailable("className", ""));
}
public void testIsMethodAvailable_NonexistentClass() {
assertFalse(CompatUtils.isMethodAvailable("com.android.contacts.common.NonexistentClass",
""));
}
public void testIsMethodAvailable_NonexistentMethod() {
assertFalse(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "derivedMethod"));
}
public void testIsMethodAvailable() {
assertTrue(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "baseMethod"));
}
public void testIsMethodAvailable_InheritedMethod() {
assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "baseMethod"));
}
public void testIsMethodAvailable_OverloadedMethod() {
assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod"));
assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod",
Integer.TYPE));
}
public void testIsMethodAvailable_NonexistentOverload() {
assertFalse(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod",
Boolean.TYPE));
}
public void testInvokeMethod_NullMethodName() {
assertNull(CompatUtils.invokeMethod(new BaseClass(), null, null, null));
}
public void testInvokeMethod_EmptyMethodName() {
assertNull(CompatUtils.invokeMethod(new BaseClass(), "", null, null));
}
public void testInvokeMethod_NullClassInstance() {
assertNull(CompatUtils.invokeMethod(null, "", null, null));
}
public void testInvokeMethod_NonexistentMethod() {
assertNull(CompatUtils.invokeMethod(new BaseClass(), "derivedMethod", null, null));
}
public void testInvokeMethod_MethodWithNoParameters() {
assertEquals(1, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod", null, null));
}
public void testInvokeMethod_MethodWithNoParameters_WithParameters() {
assertNull(CompatUtils.invokeMethod(new DerivedClass(), "derivedMethod",
new Class<?>[] {Integer.TYPE}, new Object[] {1}));
}
public void testInvokeMethod_MethodWithParameters_WithEmptyParameterList() {
assertNull(CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod",
new Class<?>[] {Integer.TYPE}, new Object[] {}));
}
public void testInvokeMethod_InvokeSimpleMethod() {
assertEquals(2, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod",
new Class<?>[] {Integer.TYPE}, new Object[] {2}));
}
private class BaseClass {
public void baseMethod() {}
}
private class DerivedClass extends BaseClass {
public int derivedMethod() {
// This method needs to return something to differentiate a successful invocation from
// an unsuccessful one.
return 0;
}
public int overloadedMethod() {
return 1;
}
public int overloadedMethod(int i) {
return i;
}
}
}