• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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 android.view.autofill;
18 
19 import static android.view.autofill.AutofillId.NO_SESSION;
20 
21 import static com.google.common.truth.Truth.assertThat;
22 import static com.google.common.truth.Truth.assertWithMessage;
23 
24 import static org.testng.Assert.assertThrows;
25 
26 import android.os.Parcel;
27 import android.view.View;
28 
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.junit.runners.JUnit4;
32 
33 @RunWith(JUnit4.class)
34 public class AutofillIdTest {
35 
36     @Test
testNonVirtual()37     public void testNonVirtual() {
38         final AutofillId id = new AutofillId(42);
39         assertNonVirtual(id, 42, NO_SESSION);
40 
41         final AutofillId clone = cloneThroughParcel(id);
42         assertNonVirtual(clone, 42, NO_SESSION);
43     }
44 
45     @Test
testVirtual_int()46     public void testVirtual_int() {
47         final AutofillId id = new AutofillId(42, 108);
48         assertThat(id.getViewId()).isEqualTo(42);
49         assertThat(id.isVirtualInt()).isTrue();
50         assertThat(id.isVirtualLong()).isFalse();
51         assertThat(id.isNonVirtual()).isFalse();
52         assertThat(id.getVirtualChildIntId()).isEqualTo(108);
53         assertThat(id.getVirtualChildLongId()).isEqualTo(View.NO_ID);
54 
55         final AutofillId clone = cloneThroughParcel(id);
56         assertThat(clone.getViewId()).isEqualTo(42);
57         assertThat(clone.isVirtualLong()).isFalse();
58         assertThat(clone.isVirtualInt()).isTrue();
59         assertThat(clone.isNonVirtual()).isFalse();
60         assertThat(clone.getVirtualChildIntId()).isEqualTo(108);
61         assertThat(clone.getVirtualChildLongId()).isEqualTo(View.NO_ID);
62     }
63 
64     @Test
testVirtual_long()65     public void testVirtual_long() {
66         final AutofillId id = new AutofillId(new AutofillId(42), 4815162342L, 108);
67         assertThat(id.getViewId()).isEqualTo(42);
68         assertThat(id.isVirtualLong()).isTrue();
69         assertThat(id.isVirtualInt()).isFalse();
70         assertThat(id.isNonVirtual()).isFalse();
71         assertThat(id.getVirtualChildIntId()).isEqualTo(View.NO_ID);
72         assertThat(id.getVirtualChildLongId()).isEqualTo(4815162342L);
73 
74         final AutofillId clone = cloneThroughParcel(id);
75         assertThat(clone.getViewId()).isEqualTo(42);
76         assertThat(clone.isVirtualLong()).isTrue();
77         assertThat(clone.isVirtualInt()).isFalse();
78         assertThat(clone.isNonVirtual()).isFalse();
79         assertThat(clone.getVirtualChildIntId()).isEqualTo(View.NO_ID);
80         assertThat(clone.getVirtualChildLongId()).isEqualTo(4815162342L);
81     }
82 
83     @Test
testVirtual_parentObjectConstructor()84     public void testVirtual_parentObjectConstructor() {
85         assertThrows(NullPointerException.class, () -> new AutofillId(null, 108));
86 
87         final AutofillId id = new AutofillId(new AutofillId(42), 108);
88         assertThat(id.getViewId()).isEqualTo(42);
89         assertThat(id.isVirtualInt()).isTrue();
90         assertThat(id.getVirtualChildIntId()).isEqualTo(108);
91 
92         final AutofillId clone = cloneThroughParcel(id);
93         assertThat(clone.getViewId()).isEqualTo(42);
94         assertThat(clone.isVirtualInt()).isTrue();
95         assertThat(clone.getVirtualChildIntId()).isEqualTo(108);
96     }
97 
98     @Test
testVirtual_withSession()99     public void testVirtual_withSession() {
100         final AutofillId id = new AutofillId(new AutofillId(42), 108L, 666);
101         assertThat(id.getViewId()).isEqualTo(42);
102         assertThat(id.isVirtualLong()).isTrue();
103         assertThat(id.isVirtualInt()).isFalse();
104         assertThat(id.isNonVirtual()).isFalse();
105         assertThat(id.getVirtualChildLongId()).isEqualTo(108L);
106         assertThat(id.getVirtualChildIntId()).isEqualTo(View.NO_ID);
107         assertThat(id.getSessionId()).isEqualTo(666);
108 
109         final AutofillId clone = cloneThroughParcel(id);
110         assertThat(clone.getViewId()).isEqualTo(42);
111         assertThat(clone.isVirtualLong()).isTrue();
112         assertThat(clone.isVirtualInt()).isFalse();
113         assertThat(clone.isNonVirtual()).isFalse();
114         assertThat(clone.getVirtualChildLongId()).isEqualTo(108L);
115         assertThat(clone.getVirtualChildIntId()).isEqualTo(View.NO_ID);
116         assertThat(clone.getSessionId()).isEqualTo(666);
117     }
118 
119     @Test
testFactoryMethod_withoutSession()120     public void testFactoryMethod_withoutSession() {
121         final AutofillId id = new AutofillId(42);
122         id.setSessionId(108);
123         assertNonVirtual(id, 42, 108);
124         final AutofillId idWithoutSession = AutofillId.withoutSession(id);
125         assertNonVirtual(idWithoutSession, 42, NO_SESSION);
126     }
127 
128     @Test
testVirtual_Long_withoutSession()129     public void testVirtual_Long_withoutSession() {
130         final AutofillId id = new AutofillId(new AutofillId(42), 108L, 666);
131         final AutofillId idWithoutSession = AutofillId.withoutSession(id);
132         assertThat(idWithoutSession.getViewId()).isEqualTo(42);
133         assertThat(idWithoutSession.isVirtualLong()).isTrue();
134         assertThat(idWithoutSession.isVirtualInt()).isFalse();
135         assertThat(idWithoutSession.isNonVirtual()).isFalse();
136         assertThat(idWithoutSession.getVirtualChildLongId()).isEqualTo(108L);
137         assertThat(idWithoutSession.getVirtualChildIntId()).isEqualTo(View.NO_ID);
138         assertThat(idWithoutSession.getSessionId()).isEqualTo(NO_SESSION);
139     }
140 
141     @Test
testVirtual_Int_withoutSession()142     public void testVirtual_Int_withoutSession() {
143         final AutofillId id = new AutofillId(42, 108);
144         final AutofillId idWithoutSession = AutofillId.withoutSession(id);
145         assertThat(idWithoutSession.getViewId()).isEqualTo(42);
146         assertThat(idWithoutSession.isVirtualLong()).isFalse();
147         assertThat(idWithoutSession.isVirtualInt()).isTrue();
148         assertThat(idWithoutSession.isNonVirtual()).isFalse();
149         assertThat(idWithoutSession.getVirtualChildIntId()).isEqualTo(108);
150         assertThat(idWithoutSession.getVirtualChildLongId()).isEqualTo(View.NO_ID);
151         assertThat(idWithoutSession.getSessionId()).isEqualTo(NO_SESSION);
152     }
153 
154     @Test
testSetResetSession()155     public void testSetResetSession() {
156         final AutofillId id = new AutofillId(42);
157         assertNonVirtual(id, 42, NO_SESSION);
158         id.setSessionId(108);
159         assertNonVirtual(id, 42, 108);
160 
161         final AutofillId clone1 = cloneThroughParcel(id);
162         assertNonVirtual(clone1, 42, 108);
163 
164         id.resetSessionId();
165         assertThat(id.getSessionId()).isEqualTo(NO_SESSION);
166         final AutofillId clone2 = cloneThroughParcel(id);
167         assertNonVirtual(clone2, 42, NO_SESSION);
168     }
169 
170     @Test
testEqualsHashCode_nonVirtual_same()171     public void testEqualsHashCode_nonVirtual_same() {
172         final AutofillId id = new AutofillId(42);
173         final AutofillId sameId = new AutofillId(42);
174 
175         assertThat(id).isEqualTo(sameId);
176         assertThat(sameId).isEqualTo(id);
177         assertEqualsIgnoreSession(id, sameId);
178         assertEqualsIgnoreSession(sameId, id);
179         assertThat(id.hashCode()).isEqualTo(sameId.hashCode());
180     }
181 
182     @Test
testEqualsHashCode_nonVirtual_other()183     public void testEqualsHashCode_nonVirtual_other() {
184         final AutofillId id = new AutofillId(42);
185         final AutofillId otherId = new AutofillId(108);
186 
187         assertThat(id).isNotEqualTo(otherId);
188         assertThat(otherId).isNotEqualTo(id);
189         assertNotEqualsIgnoreSession(id, otherId);
190         assertNotEqualsIgnoreSession(otherId, id);
191         assertThat(id.hashCode()).isNotEqualTo(otherId.hashCode());
192     }
193 
194     @Test
testEqualsHashCode_virtual_same()195     public void testEqualsHashCode_virtual_same() {
196         final AutofillId id = new AutofillId(42);
197         final AutofillId virtual = new AutofillId(42, 1);
198         final AutofillId sameVirtual = new AutofillId(42, 1);
199 
200         assertThat(virtual).isEqualTo(sameVirtual);
201         assertThat(sameVirtual).isEqualTo(virtual);
202         assertEqualsIgnoreSession(virtual, sameVirtual);
203         assertEqualsIgnoreSession(sameVirtual, virtual);
204         assertThat(virtual.hashCode()).isEqualTo(sameVirtual.hashCode());
205         assertThat(virtual).isNotEqualTo(id);
206         assertThat(id).isNotEqualTo(virtual);
207         assertNotEqualsIgnoreSession(id, virtual);
208         assertNotEqualsIgnoreSession(virtual, id);
209     }
210 
211     @Test
testEqualsHashCode_virtual_otherChild()212     public void testEqualsHashCode_virtual_otherChild() {
213         final AutofillId id = new AutofillId(42);
214         final AutofillId virtual = new AutofillId(42, 1);
215         final AutofillId virtualOtherChild = new AutofillId(42, 2);
216 
217         assertThat(virtualOtherChild).isNotEqualTo(virtual);
218         assertThat(virtual).isNotEqualTo(virtualOtherChild);
219         assertNotEqualsIgnoreSession(virtualOtherChild, virtual);
220         assertNotEqualsIgnoreSession(virtual, virtualOtherChild);
221         assertThat(virtualOtherChild).isNotEqualTo(id);
222         assertThat(id).isNotEqualTo(virtualOtherChild);
223         assertNotEqualsIgnoreSession(virtualOtherChild, id);
224         assertNotEqualsIgnoreSession(id, virtualOtherChild);
225     }
226 
227     @Test
testEqualsHashCode_virtual_otherParent()228     public void testEqualsHashCode_virtual_otherParent() {
229         final AutofillId virtual = new AutofillId(42, 1);
230         final AutofillId virtualOtherParent = new AutofillId(108, 1);
231         final AutofillId virtualOtherChild = new AutofillId(42, 2);
232 
233         assertThat(virtualOtherParent).isNotEqualTo(virtual);
234         assertThat(virtual).isNotEqualTo(virtualOtherParent);
235         assertNotEqualsIgnoreSession(virtualOtherParent, virtual);
236         assertNotEqualsIgnoreSession(virtual, virtualOtherParent);
237         assertThat(virtualOtherParent).isNotEqualTo(virtualOtherChild);
238         assertThat(virtualOtherChild).isNotEqualTo(virtualOtherParent);
239         assertNotEqualsIgnoreSession(virtualOtherParent, virtualOtherChild);
240         assertNotEqualsIgnoreSession(virtualOtherChild, virtualOtherParent);
241     }
242 
243     @Test
testEqualsHashCode_virtual_otherSession()244     public void testEqualsHashCode_virtual_otherSession() {
245         final AutofillId virtual = new AutofillId(42, 1);
246         final AutofillId virtualOtherSession = new AutofillId(42, 1);
247         virtualOtherSession.setSessionId(666);
248 
249         assertThat(virtualOtherSession).isNotEqualTo(virtual);
250         assertThat(virtual).isNotEqualTo(virtualOtherSession);
251         assertEqualsIgnoreSession(virtualOtherSession, virtual);
252         assertEqualsIgnoreSession(virtual, virtualOtherSession);
253     }
254 
255     @Test
testEqualsHashCode_virtual_longId_same()256     public void testEqualsHashCode_virtual_longId_same() {
257         final AutofillId hostId = new AutofillId(42);
258         final AutofillId virtual = new AutofillId(hostId, 1L, 108);
259         final AutofillId sameVirtual = new AutofillId(hostId, 1L, 108);
260 
261         assertThat(sameVirtual).isEqualTo(virtual);
262         assertThat(virtual).isEqualTo(sameVirtual);
263         assertEqualsIgnoreSession(sameVirtual, virtual);
264         assertEqualsIgnoreSession(virtual, sameVirtual);
265         assertThat(sameVirtual).isNotEqualTo(hostId);
266         assertThat(hostId).isNotEqualTo(sameVirtual);
267         assertNotEqualsIgnoreSession(sameVirtual, hostId);
268         assertNotEqualsIgnoreSession(hostId, sameVirtual);
269     }
270 
271     @Test
testEqualsHashCode_virtual_longId_otherChild()272     public void testEqualsHashCode_virtual_longId_otherChild() {
273         final AutofillId hostId = new AutofillId(42);
274         final AutofillId virtual = new AutofillId(hostId, 1L, 108);
275         final AutofillId virtualOtherChild = new AutofillId(hostId, 2L, 108);
276 
277         assertThat(virtualOtherChild).isNotEqualTo(virtual);
278         assertThat(virtual).isNotEqualTo(virtualOtherChild);
279         assertNotEqualsIgnoreSession(virtualOtherChild, virtual);
280         assertNotEqualsIgnoreSession(virtual, virtualOtherChild);
281         assertThat(virtualOtherChild).isNotEqualTo(hostId);
282         assertThat(hostId).isNotEqualTo(virtualOtherChild);
283         assertNotEqualsIgnoreSession(virtualOtherChild, hostId);
284         assertNotEqualsIgnoreSession(hostId, virtualOtherChild);
285     }
286 
287     @Test
testEqualsHashCode_virtual_longId_otherParent()288     public void testEqualsHashCode_virtual_longId_otherParent() {
289         final AutofillId hostId = new AutofillId(42);
290         final AutofillId virtual = new AutofillId(hostId, 1L, 108);
291         final AutofillId virtualOtherParent = new AutofillId(new AutofillId(666), 1L, 108);
292         final AutofillId virtualOtherChild = new AutofillId(hostId, 2L, 108);
293 
294         assertThat(virtualOtherParent).isNotEqualTo(virtual);
295         assertThat(virtual).isNotEqualTo(virtualOtherParent);
296         assertNotEqualsIgnoreSession(virtualOtherParent, virtual);
297         assertNotEqualsIgnoreSession(virtual, virtualOtherParent);
298         assertThat(virtualOtherParent).isNotEqualTo(virtualOtherChild);
299         assertThat(virtualOtherChild).isNotEqualTo(virtualOtherParent);
300         assertNotEqualsIgnoreSession(virtualOtherParent, virtualOtherChild);
301         assertNotEqualsIgnoreSession(virtualOtherChild, virtualOtherParent);
302     }
303 
304     @Test
testEqualsHashCode_virtual_longId_otherSession()305     public void testEqualsHashCode_virtual_longId_otherSession() {
306         final AutofillId hostId = new AutofillId(42);
307         final AutofillId virtual = new AutofillId(hostId, 1L, 108);
308         final AutofillId virtualOtherSession = new AutofillId(hostId, 1L, 666);
309 
310         assertThat(virtualOtherSession).isNotEqualTo(virtual);
311         assertThat(virtual).isNotEqualTo(virtualOtherSession);
312         assertEqualsIgnoreSession(virtualOtherSession, virtual);
313         assertEqualsIgnoreSession(virtual, virtualOtherSession);
314     }
315 
cloneThroughParcel(AutofillId id)316     private AutofillId cloneThroughParcel(AutofillId id) {
317         Parcel parcel = Parcel.obtain();
318 
319         try {
320             // Write to parcel
321             parcel.setDataPosition(0); // Validity Check
322             id.writeToParcel(parcel, 0);
323 
324             // Read from parcel
325             parcel.setDataPosition(0);
326             AutofillId clone = AutofillId.CREATOR.createFromParcel(parcel);
327             assertThat(clone).isNotNull();
328             return clone;
329         } finally {
330             parcel.recycle();
331         }
332     }
333 
assertEqualsIgnoreSession(AutofillId id1, AutofillId id2)334     private void assertEqualsIgnoreSession(AutofillId id1, AutofillId id2) {
335         assertWithMessage("id1 is null").that(id1).isNotNull();
336         assertWithMessage("id2 is null").that(id2).isNotNull();
337         assertWithMessage("%s is not equal to %s", id1, id2).that(id1.equalsIgnoreSession(id2))
338                 .isTrue();
339     }
340 
assertNotEqualsIgnoreSession(AutofillId id1, AutofillId id2)341     private void assertNotEqualsIgnoreSession(AutofillId id1, AutofillId id2) {
342         assertWithMessage("id1 is null").that(id1).isNotNull();
343         assertWithMessage("id2 is null").that(id2).isNotNull();
344         assertWithMessage("%s is not equal to %s", id1, id2).that(id1.equalsIgnoreSession(id2))
345                 .isFalse();
346     }
347 
assertNonVirtual(AutofillId id, int expectedId, int expectSessionId)348     private void assertNonVirtual(AutofillId id, int expectedId, int expectSessionId) {
349         assertThat(id.getViewId()).isEqualTo(expectedId);
350         assertThat(id.isNonVirtual()).isTrue();
351         assertThat(id.isVirtualInt()).isFalse();
352         assertThat(id.isVirtualLong()).isFalse();
353         assertThat(id.getVirtualChildIntId()).isEqualTo(View.NO_ID);
354         assertThat(id.getVirtualChildLongId()).isEqualTo(View.NO_ID);
355         assertThat(id.getSessionId()).isEqualTo(expectSessionId);
356     }
357 }
358