• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  * Copyright (C) 2011 Eric Bowman
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 package com.xtremelabs.robolectric.shadows;
18 
19 import android.util.SparseArray;
20 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
21 import com.xtremelabs.robolectric.bytecode.ShadowWrangler;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertNull;
28 import static org.junit.Assert.assertTrue;
29 
30 /**
31  * Tests for shadow implementation of SparseArray. Basically copied & pasted the
32  * real SparseArray tests from the 2.2 SDK.
33  *
34  * @author Eric Bowman (ebowman@boboco.ie)
35  * @since 2011-02-25 11:01
36  */
37 @RunWith(WithTestDefaultsRunner.class)
38 public class SparseArrayTest {
39     private static final int[] KEYS = {12, 23, 4, 6, 8, 1, 3, -12, 0, -3, 11, 14, -23};
40     private static final Integer[] VALUES = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
41     private static final int LENGTH = VALUES.length;
42     private static final int NON_EXISTED_KEY = 123;
43     private static final Integer VALUE_FOR_NON_EXISTED_KEY = -1;
44 
45     @Test
testSparseArrayWithDefaultCapacity()46     public void testSparseArrayWithDefaultCapacity() {
47         ShadowWrangler.getInstance().logMissingInvokedShadowMethods();
48         SparseArray<Integer> sparseArray = new SparseArray<Integer>();
49         assertEquals(0, sparseArray.size());
50 
51         int length = VALUES.length;
52 
53         for (int i = 0; i < length; i++) {
54             sparseArray.put(KEYS[i], VALUES[i]);
55             assertEquals(i + 1, sparseArray.size());
56         }
57 
58         for (int i = 0; i < length; i++) {
59             assertEquals(new Integer(i), sparseArray.get(KEYS[i]));
60         }
61 
62         for (int i = 0; i < length; i++) {
63             assertEquals(sparseArray.indexOfValue(VALUES[i]), sparseArray.indexOfKey(KEYS[i]));
64         }
65 
66         // for key already exist, old value will be replaced
67         int existKey = KEYS[0];
68         Integer oldValue = VALUES[0]; // 0
69         Integer newValue = 100;
70         assertEquals(oldValue, sparseArray.get(existKey));
71         assertEquals(LENGTH, sparseArray.size());
72         sparseArray.put(existKey, newValue);
73         assertEquals(newValue, sparseArray.get(existKey));
74         assertEquals(LENGTH, sparseArray.size());
75 
76         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
77                 sparseArray.get(NON_EXISTED_KEY, VALUE_FOR_NON_EXISTED_KEY));
78         assertNull(sparseArray.get(NON_EXISTED_KEY)); // the default value is null
79 
80         int size = sparseArray.size();
81         sparseArray.append(NON_EXISTED_KEY, VALUE_FOR_NON_EXISTED_KEY);
82         assertEquals(size + 1, sparseArray.size());
83         assertEquals(size, sparseArray.indexOfKey(NON_EXISTED_KEY));
84         assertEquals(size, sparseArray.indexOfValue(VALUE_FOR_NON_EXISTED_KEY));
85         assertEquals(NON_EXISTED_KEY, sparseArray.keyAt(size));
86         assertEquals(VALUE_FOR_NON_EXISTED_KEY, sparseArray.valueAt(size));
87 
88         sparseArray.setValueAt(size, VALUES[1]);
89         assertTrue(VALUE_FOR_NON_EXISTED_KEY != sparseArray.valueAt(size));
90         assertEquals(VALUES[1], sparseArray.valueAt(size));
91 
92         size = sparseArray.size();
93         assertEquals(VALUES[1], sparseArray.get(KEYS[1]));
94         assertFalse(VALUE_FOR_NON_EXISTED_KEY == VALUES[1]);
95         sparseArray.delete(KEYS[1]);
96         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
97                 sparseArray.get(KEYS[1], VALUE_FOR_NON_EXISTED_KEY));
98         assertEquals(size - 1, sparseArray.size());
99 
100         size = sparseArray.size();
101         assertEquals(VALUES[2], sparseArray.get(KEYS[2]));
102         assertFalse(VALUE_FOR_NON_EXISTED_KEY == VALUES[2]);
103         sparseArray.remove(KEYS[2]);
104         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
105                 sparseArray.get(KEYS[2], VALUE_FOR_NON_EXISTED_KEY));
106         assertEquals(size - 1, sparseArray.size());
107 
108         sparseArray.clear();
109         assertEquals(0, sparseArray.size());
110     }
111 
112     @Test
testSparseArrayWithSpecifiedCapacity()113     public void testSparseArrayWithSpecifiedCapacity() {
114         SparseArray<Integer> sparseArray = new SparseArray<Integer>(5);
115         assertEquals(0, sparseArray.size());
116 
117         int length = VALUES.length;
118 
119         for (int i = 0; i < length; i++) {
120             sparseArray.put(KEYS[i], VALUES[i]);
121             assertEquals(i + 1, sparseArray.size());
122         }
123 
124         for (int i = 0; i < length; i++) {
125             assertEquals(VALUES[i], sparseArray.get(KEYS[i]));
126         }
127 
128         for (int i = 0; i < length; i++) {
129             assertEquals(sparseArray.indexOfValue(VALUES[i]), sparseArray.indexOfKey(KEYS[i]));
130         }
131 
132         // for key already exist, old value will be replaced
133         int existKey = KEYS[0];
134         Integer oldValue = VALUES[0]; // 0
135         Integer newValue = 100;
136         assertEquals(oldValue, sparseArray.get(existKey));
137         assertEquals(LENGTH, sparseArray.size());
138         sparseArray.put(existKey, newValue);
139         assertEquals(newValue, sparseArray.get(existKey));
140         assertEquals(LENGTH, sparseArray.size());
141 
142         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
143                      sparseArray.get(NON_EXISTED_KEY, VALUE_FOR_NON_EXISTED_KEY));
144         assertNull(sparseArray.get(NON_EXISTED_KEY)); // the default value is null
145 
146         int size = sparseArray.size();
147         sparseArray.append(NON_EXISTED_KEY, VALUE_FOR_NON_EXISTED_KEY);
148         assertEquals(size + 1, sparseArray.size());
149         assertEquals(size, sparseArray.indexOfKey(NON_EXISTED_KEY));
150         assertEquals(size, sparseArray.indexOfValue(VALUE_FOR_NON_EXISTED_KEY));
151         assertEquals(NON_EXISTED_KEY, sparseArray.keyAt(size));
152         assertEquals(VALUE_FOR_NON_EXISTED_KEY, sparseArray.valueAt(size));
153 
154         sparseArray.setValueAt(size, VALUES[1]);
155         assertTrue(VALUE_FOR_NON_EXISTED_KEY != sparseArray.valueAt(size));
156         assertEquals(VALUES[1], sparseArray.valueAt(size));
157 
158         size = sparseArray.size();
159         assertEquals(VALUES[1], sparseArray.get(KEYS[1]));
160         assertFalse(VALUE_FOR_NON_EXISTED_KEY == VALUES[1]);
161         sparseArray.delete(KEYS[1]);
162         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
163                 sparseArray.get(KEYS[1], VALUE_FOR_NON_EXISTED_KEY));
164         assertEquals(size - 1, sparseArray.size());
165 
166         size = sparseArray.size();
167         assertEquals(VALUES[2], sparseArray.get(KEYS[2]));
168         assertFalse(VALUE_FOR_NON_EXISTED_KEY == VALUES[2]);
169         sparseArray.remove(KEYS[2]);
170         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
171                 sparseArray.get(KEYS[2], VALUE_FOR_NON_EXISTED_KEY));
172         assertEquals(size - 1, sparseArray.size());
173 
174         sparseArray.clear();
175         assertEquals(0, sparseArray.size());
176     }
177 }
178