1 /*
2  * Copyright (C) 2021 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 package com.android.launcher3.util;
17 
18 import static com.android.launcher3.widget.WidgetSections.NO_CATEGORY;
19 
20 import static com.google.common.truth.Truth.assertThat;
21 
22 import android.os.UserHandle;
23 
24 import androidx.test.ext.junit.runners.AndroidJUnit4;
25 import androidx.test.filters.SmallTest;
26 
27 import com.android.launcher3.model.data.PackageItemInfo;
28 
29 import org.junit.Rule;
30 import org.junit.Test;
31 import org.junit.rules.ExpectedException;
32 import org.junit.runner.RunWith;
33 
34 @SmallTest
35 @RunWith(AndroidJUnit4.class)
36 public final class PackageUserKeyTest {
37     @Rule
38     public ExpectedException exception = ExpectedException.none();
39 
40     private static final String TEST_PACKAGE = "com.android.test.package";
41     private static final int CONVERSATIONS = 0;
42     private static final int WEATHER = 1;
43 
44     @Test
fromPackageItemInfo_shouldCreateExpectedObject()45     public void fromPackageItemInfo_shouldCreateExpectedObject() {
46         PackageUserKey packageUserKey = PackageUserKey.fromPackageItemInfo(
47                 new PackageItemInfo(TEST_PACKAGE, UserHandle.CURRENT));
48 
49         assertThat(packageUserKey.mPackageName).isEqualTo(TEST_PACKAGE);
50         assertThat(packageUserKey.mWidgetCategory).isEqualTo(NO_CATEGORY);
51         assertThat(packageUserKey.mUser).isEqualTo(UserHandle.CURRENT);
52     }
53 
54     @Test
constructor_packageNameAndUserHandle_shouldCreateExpectedObject()55     public void constructor_packageNameAndUserHandle_shouldCreateExpectedObject() {
56         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
57 
58         assertThat(packageUserKey.mPackageName).isEqualTo(TEST_PACKAGE);
59         assertThat(packageUserKey.mWidgetCategory).isEqualTo(NO_CATEGORY);
60         assertThat(packageUserKey.mUser).isEqualTo(UserHandle.CURRENT);
61     }
62 
63     @Test
constructor_widgetCategoryAndUserHandle_shouldCreateExpectedObject()64     public void constructor_widgetCategoryAndUserHandle_shouldCreateExpectedObject() {
65         PackageUserKey packageUserKey = new PackageUserKey(CONVERSATIONS, UserHandle.CURRENT);
66 
67         assertThat(packageUserKey.mPackageName).isEqualTo("");
68         assertThat(packageUserKey.mWidgetCategory).isEqualTo(CONVERSATIONS);
69         assertThat(packageUserKey.mUser).isEqualTo(UserHandle.CURRENT);
70     }
71 
72     @Test
equals_sameObject_shouldReturnTrue()73     public void equals_sameObject_shouldReturnTrue() {
74         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
75         PackageUserKey otherPackageUserKey = packageUserKey;
76 
77         assertThat(packageUserKey).isEqualTo(otherPackageUserKey);
78     }
79 
80     @Test
equals_differentObjectSameContent_shouldReturnTrue()81     public void equals_differentObjectSameContent_shouldReturnTrue() {
82         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
83         PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
84 
85         assertThat(packageUserKey).isEqualTo(otherPackageUserKey);
86     }
87 
88     @Test
equals_compareAgainstNull_shouldReturnFalse()89     public void equals_compareAgainstNull_shouldReturnFalse() {
90         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
91 
92         assertThat(packageUserKey).isNotEqualTo(null);
93     }
94 
95     @Test
equals_differentPackage_shouldReturnFalse()96     public void equals_differentPackage_shouldReturnFalse() {
97         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
98         PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE + "1",
99                 UserHandle.CURRENT);
100 
101         assertThat(packageUserKey).isNotEqualTo(otherPackageUserKey);
102     }
103 
104 
105     @Test
equals_differentCategory_shouldReturnFalse()106     public void equals_differentCategory_shouldReturnFalse() {
107         PackageUserKey packageUserKey = new PackageUserKey(WEATHER, UserHandle.CURRENT);
108         PackageUserKey otherPackageUserKey = new PackageUserKey(CONVERSATIONS, UserHandle.CURRENT);
109 
110         assertThat(packageUserKey).isNotEqualTo(otherPackageUserKey);
111     }
112 
113     @Test
equals_differentUser_shouldReturnFalse()114     public void equals_differentUser_shouldReturnFalse() {
115         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.of(1));
116         PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.of(2));
117 
118         assertThat(packageUserKey).isNotEqualTo(otherPackageUserKey);
119     }
120 
121     @Test
hashCode_sameObject_shouldBeTheSame()122     public void hashCode_sameObject_shouldBeTheSame() {
123         PackageUserKey packageUserKey = new PackageUserKey(WEATHER, UserHandle.CURRENT);
124         PackageUserKey otherPackageUserKey = packageUserKey;
125 
126         assertThat(packageUserKey.hashCode()).isEqualTo(otherPackageUserKey.hashCode());
127     }
128 
129     @Test
hashCode_differentObjectSameContent_shouldBeTheSame()130     public void hashCode_differentObjectSameContent_shouldBeTheSame() {
131         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
132         PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
133 
134         assertThat(packageUserKey.hashCode()).isEqualTo(otherPackageUserKey.hashCode());
135     }
136 
137     @Test
hashCode_differentPackage_shouldBeDifferent()138     public void hashCode_differentPackage_shouldBeDifferent() {
139         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.CURRENT);
140         PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE + "1",
141                 UserHandle.CURRENT);
142 
143         assertThat(packageUserKey.hashCode()).isNotEqualTo(otherPackageUserKey.hashCode());
144     }
145 
146 
147     @Test
hashCode_differentCategory_shouldBeDifferent()148     public void hashCode_differentCategory_shouldBeDifferent() {
149         PackageUserKey packageUserKey = new PackageUserKey(WEATHER, UserHandle.CURRENT);
150         PackageUserKey otherPackageUserKey = new PackageUserKey(CONVERSATIONS, UserHandle.CURRENT);
151 
152         assertThat(packageUserKey.hashCode()).isNotEqualTo(otherPackageUserKey.hashCode());
153     }
154 
155     @Test
hashCode_differentUser_shouldBeDifferent()156     public void hashCode_differentUser_shouldBeDifferent() {
157         PackageUserKey packageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.of(1));
158         PackageUserKey otherPackageUserKey = new PackageUserKey(TEST_PACKAGE, UserHandle.of(2));
159 
160         assertThat(packageUserKey.hashCode()).isNotEqualTo(otherPackageUserKey.hashCode());
161     }
162 }
163