xref: /aosp_15_r20/external/mobly-bundled-snippets/src/test/java/UtilsTest.java (revision f8709298c7f2c449bb8c80b03fabe16c67b8969c)
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