1 /*
2  * Copyright (C) 2016 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 com.android.contacts.group;
18 
19 import android.os.Bundle;
20 import android.provider.ContactsContract.Contacts;
21 import android.test.AndroidTestCase;
22 import android.test.MoreAsserts;
23 
24 import androidx.test.filters.SmallTest;
25 
26 import com.android.contacts.list.ContactsSectionIndexer;
27 
28 import java.util.Arrays;
29 import java.util.List;
30 
31 @SmallTest
32 public class GroupUtilTest extends AndroidTestCase {
33 
testNeedTrimming()34     public void testNeedTrimming() {
35         final int zeroCount = 0;
36         final int emptyPositions[] = new int[]{};
37         final int emptyCounts[] = new int[]{};
38         assertFalse(GroupUtil.needTrimming(zeroCount, emptyPositions, emptyCounts));
39 
40         final int count = 22;
41         int positions[] = new int[]{0, 1, 3, 5, 8, 9};
42         int counts[] = new int[]{1, 2, 2, 3, 1, 2};
43         assertFalse(GroupUtil.needTrimming(count, positions, counts));
44 
45         positions = new int[]{0, 1, 7, 9, 16, 17, 19, 20};
46         counts = new int[]{1, 6, 2, 7, 1, 2, 1, 2};
47         assertTrue(GroupUtil.needTrimming(count, positions, counts));
48     }
49 
testUpdateBundle_smallSet()50     public void testUpdateBundle_smallSet() {
51         final Bundle bundle = new Bundle();
52         final String[] sections = new String[]{"…", "A", "I", "T", "W", "Y", "Z", "#"};
53         final int[] counts = new int[]{1, 6, 2, 7, 1, 2, 1, 2};
54         final Integer[] subscripts = new Integer[]{1, 2, 5, 7, 8, 10, 11, 15, 16, 17, 18};
55         final List<Integer> subscriptsList = Arrays.asList(subscripts);
56         final ContactsSectionIndexer indexer = new ContactsSectionIndexer(sections, counts);
57 
58         GroupUtil.updateBundle(bundle, indexer, subscriptsList, sections, counts);
59 
60         final String[] newSections = new String[]{"…", "A", "T", "Z", "#"};
61         final int[] newCounts = new int[]{1, 3, 4, 1, 2};
62 
63         assertNotNull(bundle.getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES));
64         MoreAsserts.assertEquals("Wrong sections!", newSections, bundle.getStringArray(Contacts
65                 .EXTRA_ADDRESS_BOOK_INDEX_TITLES));
66 
67         assertNotNull(bundle.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS));
68         MoreAsserts.assertEquals("Wrong counts!", newCounts, bundle.getIntArray(Contacts
69                 .EXTRA_ADDRESS_BOOK_INDEX_COUNTS));
70     }
71 
testUpdateBundle_mediumSet()72     public void testUpdateBundle_mediumSet() {
73         final Bundle bundle = new Bundle();
74         final String[] sections = new String[]{"A", "B", "C", "D", "E", "F", "G", "H", "J",
75                 "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z"};
76         final int[] counts = new int[]{81, 36, 84, 55, 28, 15, 18, 38, 145, 60, 41, 73, 15, 2, 56,
77                 1, 74, 73, 45, 14, 28, 9, 18, 21};
78         final Integer[] subscripts = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
79                 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
80                 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
81                 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
82                 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
83                 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
84                 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
85                 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
86                 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
87                 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
88                 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
89                 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
90                 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
91                 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
92                 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
93                 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
94                 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
95                 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
96                 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
97                 337, 344, 347, 348, 349, 350, 351, 352, 353, 354, 495, 496, 497, 498, 499, 558, 559,
98                 597, 598, 599, 600, 601, 602, 668, 669, 670, 671, 672, 673, 746, 747, 820, 821, 885,
99                 886, 887, 888, 889, 890, 891, 892, 893, 894, 939, 979, 980, 981, 982, 983, 984, 985,
100                 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001,
101                 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015,
102                 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029};
103         final List<Integer> subscriptsList = Arrays.asList(subscripts);
104         final ContactsSectionIndexer indexer = new ContactsSectionIndexer(sections, counts);
105 
106         GroupUtil.updateBundle(bundle, indexer, subscriptsList, sections, counts);
107 
108         final String[] newSections = new String[]{"A", "H", "J", "K", "L", "M", "N", "O", "P",
109                 "R", "S", "T", "V", "W"};
110         final int[] newCounts = new int[]{1, 8, 140, 58, 37, 65, 15, 2, 55, 72, 63, 44, 14, 25};
111 
112         assertNotNull(bundle.getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES));
113         MoreAsserts.assertEquals("Wrong sections!", newSections, bundle.getStringArray(Contacts
114                 .EXTRA_ADDRESS_BOOK_INDEX_TITLES));
115 
116         assertNotNull(bundle.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS));
117         MoreAsserts.assertEquals("Wrong counts!", newCounts, bundle.getIntArray(Contacts
118                 .EXTRA_ADDRESS_BOOK_INDEX_COUNTS));
119     }
120 
121 }
122