1*f8709298SAndroid Build Coastguard Worker /* 2*f8709298SAndroid Build Coastguard Worker * Copyright (C) 2017 Google Inc. 3*f8709298SAndroid Build Coastguard Worker * 4*f8709298SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5*f8709298SAndroid Build Coastguard Worker * use this file except in compliance with the License. You may obtain a copy of 6*f8709298SAndroid Build Coastguard Worker * the License at 7*f8709298SAndroid Build Coastguard Worker * 8*f8709298SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*f8709298SAndroid Build Coastguard Worker * 10*f8709298SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*f8709298SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12*f8709298SAndroid Build Coastguard Worker * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13*f8709298SAndroid Build Coastguard Worker * License for the specific language governing permissions and limitations under 14*f8709298SAndroid Build Coastguard Worker * the License. 15*f8709298SAndroid Build Coastguard Worker */ 16*f8709298SAndroid Build Coastguard Worker 17*f8709298SAndroid Build Coastguard Worker import static com.google.android.mobly.snippet.bundled.utils.Utils.invokeByReflection; 18*f8709298SAndroid Build Coastguard Worker 19*f8709298SAndroid Build Coastguard Worker import com.google.android.mobly.snippet.bundled.utils.Utils; 20*f8709298SAndroid Build Coastguard Worker import com.google.common.truth.Truth; 21*f8709298SAndroid Build Coastguard Worker import java.io.IOException; 22*f8709298SAndroid Build Coastguard Worker import java.util.Collections; 23*f8709298SAndroid Build Coastguard Worker import java.util.List; 24*f8709298SAndroid Build Coastguard Worker import org.junit.Assert; 25*f8709298SAndroid Build Coastguard Worker import org.junit.Test; 26*f8709298SAndroid Build Coastguard Worker 27*f8709298SAndroid Build Coastguard Worker /** Tests for {@link com.google.android.mobly.snippet.bundled.utils.Utils} */ 28*f8709298SAndroid Build Coastguard Worker public class UtilsTest { 29*f8709298SAndroid Build Coastguard Worker public static final class ReflectionTest_HostClass { returnSame(List<String> arg)30*f8709298SAndroid Build Coastguard Worker public Object returnSame(List<String> arg) { 31*f8709298SAndroid Build Coastguard Worker return arg; 32*f8709298SAndroid Build Coastguard Worker } 33*f8709298SAndroid Build Coastguard Worker returnSame(int arg)34*f8709298SAndroid Build Coastguard Worker public Object returnSame(int arg) { 35*f8709298SAndroid Build Coastguard Worker return arg; 36*f8709298SAndroid Build Coastguard Worker } 37*f8709298SAndroid Build Coastguard Worker multiArgCall(Object arg1, Object arg2, boolean returnArg1)38*f8709298SAndroid Build Coastguard Worker public Object multiArgCall(Object arg1, Object arg2, boolean returnArg1) { 39*f8709298SAndroid Build Coastguard Worker if (returnArg1) { 40*f8709298SAndroid Build Coastguard Worker return arg1; 41*f8709298SAndroid Build Coastguard Worker } 42*f8709298SAndroid Build Coastguard Worker return arg2; 43*f8709298SAndroid Build Coastguard Worker } 44*f8709298SAndroid Build Coastguard Worker returnTrue()45*f8709298SAndroid Build Coastguard Worker public boolean returnTrue() { 46*f8709298SAndroid Build Coastguard Worker return true; 47*f8709298SAndroid Build Coastguard Worker } 48*f8709298SAndroid Build Coastguard Worker throwsException()49*f8709298SAndroid Build Coastguard Worker public void throwsException() throws IOException { 50*f8709298SAndroid Build Coastguard Worker throw new IOException("Example exception"); 51*f8709298SAndroid Build Coastguard Worker } 52*f8709298SAndroid Build Coastguard Worker } 53*f8709298SAndroid Build Coastguard Worker 54*f8709298SAndroid Build Coastguard Worker @Test testInvokeByReflection_Obj()55*f8709298SAndroid Build Coastguard Worker public void testInvokeByReflection_Obj() throws Throwable { 56*f8709298SAndroid Build Coastguard Worker List<?> sampleList = Collections.singletonList("sampleList"); 57*f8709298SAndroid Build Coastguard Worker ReflectionTest_HostClass hostClass = new ReflectionTest_HostClass(); 58*f8709298SAndroid Build Coastguard Worker Object ret = invokeByReflection(hostClass, "returnSame", sampleList); 59*f8709298SAndroid Build Coastguard Worker Truth.assertThat(ret).isSameAs(sampleList); 60*f8709298SAndroid Build Coastguard Worker } 61*f8709298SAndroid Build Coastguard Worker 62*f8709298SAndroid Build Coastguard Worker @Test testInvokeByReflection_Null()63*f8709298SAndroid Build Coastguard Worker public void testInvokeByReflection_Null() throws Throwable { 64*f8709298SAndroid Build Coastguard Worker ReflectionTest_HostClass hostClass = new ReflectionTest_HostClass(); 65*f8709298SAndroid Build Coastguard Worker Object ret = invokeByReflection(hostClass, "returnSame", (Object) null); 66*f8709298SAndroid Build Coastguard Worker Truth.assertThat(ret).isNull(); 67*f8709298SAndroid Build Coastguard Worker } 68*f8709298SAndroid Build Coastguard Worker 69*f8709298SAndroid Build Coastguard Worker @Test testInvokeByReflection_NoArg()70*f8709298SAndroid Build Coastguard Worker public void testInvokeByReflection_NoArg() throws Throwable { 71*f8709298SAndroid Build Coastguard Worker ReflectionTest_HostClass hostClass = new ReflectionTest_HostClass(); 72*f8709298SAndroid Build Coastguard Worker boolean ret = (boolean) invokeByReflection(hostClass, "returnTrue"); 73*f8709298SAndroid Build Coastguard Worker Truth.assertThat(ret).isTrue(); 74*f8709298SAndroid Build Coastguard Worker } 75*f8709298SAndroid Build Coastguard Worker 76*f8709298SAndroid Build Coastguard Worker @Test testInvokeByReflection_Primitive()77*f8709298SAndroid Build Coastguard Worker public void testInvokeByReflection_Primitive() throws Throwable { 78*f8709298SAndroid Build Coastguard Worker ReflectionTest_HostClass hostClass = new ReflectionTest_HostClass(); 79*f8709298SAndroid Build Coastguard Worker Object ret = invokeByReflection(hostClass, "returnSame", 5); 80*f8709298SAndroid Build Coastguard Worker Truth.assertThat(ret).isEqualTo(5); 81*f8709298SAndroid Build Coastguard Worker } 82*f8709298SAndroid Build Coastguard Worker 83*f8709298SAndroid Build Coastguard Worker @Test testInvokeByReflection_MultiArg()84*f8709298SAndroid Build Coastguard Worker public void testInvokeByReflection_MultiArg() throws Throwable { 85*f8709298SAndroid Build Coastguard Worker ReflectionTest_HostClass hostClass = new ReflectionTest_HostClass(); 86*f8709298SAndroid Build Coastguard Worker Object arg1 = new Object(); 87*f8709298SAndroid Build Coastguard Worker Object arg2 = new Object(); 88*f8709298SAndroid Build Coastguard Worker Object ret = 89*f8709298SAndroid Build Coastguard Worker invokeByReflection(hostClass, "multiArgCall", arg1, arg2, true /* returnArg1 */); 90*f8709298SAndroid Build Coastguard Worker Truth.assertThat(ret).isSameAs(arg1); 91*f8709298SAndroid Build Coastguard Worker ret = 92*f8709298SAndroid Build Coastguard Worker Utils.invokeByReflection( 93*f8709298SAndroid Build Coastguard Worker hostClass, "multiArgCall", arg1, arg2, false /* returnArg1 */); 94*f8709298SAndroid Build Coastguard Worker Truth.assertThat(ret).isSameAs(arg2); 95*f8709298SAndroid Build Coastguard Worker } 96*f8709298SAndroid Build Coastguard Worker 97*f8709298SAndroid Build Coastguard Worker @Test testInvokeByReflection_NoMatch()98*f8709298SAndroid Build Coastguard Worker public void testInvokeByReflection_NoMatch() throws Throwable { 99*f8709298SAndroid Build Coastguard Worker ReflectionTest_HostClass hostClass = new ReflectionTest_HostClass(); 100*f8709298SAndroid Build Coastguard Worker Truth.assertThat(List.class.isAssignableFrom(Object.class)).isFalse(); 101*f8709298SAndroid Build Coastguard Worker try { 102*f8709298SAndroid Build Coastguard Worker invokeByReflection(hostClass, "returnSame", new Object()); 103*f8709298SAndroid Build Coastguard Worker Assert.fail(); 104*f8709298SAndroid Build Coastguard Worker } catch (NoSuchMethodException e) { 105*f8709298SAndroid Build Coastguard Worker Truth.assertThat(e.getMessage()) 106*f8709298SAndroid Build Coastguard Worker .contains("UtilsTest$ReflectionTest_HostClass#returnSame(Object)"); 107*f8709298SAndroid Build Coastguard Worker } 108*f8709298SAndroid Build Coastguard Worker } 109*f8709298SAndroid Build Coastguard Worker 110*f8709298SAndroid Build Coastguard Worker @Test testInvokeByReflection_UnwrapException()111*f8709298SAndroid Build Coastguard Worker public void testInvokeByReflection_UnwrapException() throws Throwable { 112*f8709298SAndroid Build Coastguard Worker ReflectionTest_HostClass hostClass = new ReflectionTest_HostClass(); 113*f8709298SAndroid Build Coastguard Worker try { 114*f8709298SAndroid Build Coastguard Worker invokeByReflection(hostClass, "throwsException"); 115*f8709298SAndroid Build Coastguard Worker Assert.fail(); 116*f8709298SAndroid Build Coastguard Worker } catch (IOException e) { 117*f8709298SAndroid Build Coastguard Worker Truth.assertThat(e.getMessage()).isEqualTo("Example exception"); 118*f8709298SAndroid Build Coastguard Worker } 119*f8709298SAndroid Build Coastguard Worker } 120*f8709298SAndroid Build Coastguard Worker } 121