• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 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.unit_tests;
18 
19 import android.database.AbstractCursor;
20 import android.test.suitebuilder.annotation.SmallTest;
21 import com.android.internal.database.ArrayListCursor;
22 import android.database.CursorWindow;
23 import android.test.PerformanceTestCase;
24 
25 import com.google.android.collect.Lists;
26 
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.Random;
30 
31 import junit.framework.TestCase;
32 
33 public class CursorWindowTest extends TestCase implements PerformanceTestCase {
isPerformanceOnly()34     public boolean isPerformanceOnly() {
35         return false;
36     }
37 
38     // These test can only be run once.
startPerformance(Intermediates intermediates)39     public int startPerformance(Intermediates intermediates) {
40         return 1;
41     }
42 
43     @SmallTest
testWriteCursorToWindow()44     public void testWriteCursorToWindow() throws Exception {
45         // create cursor
46         String[] colNames = new String[]{"name", "number", "profit"};
47         int colsize = colNames.length;
48         ArrayList<ArrayList> list = createTestList(10, colsize);
49         AbstractCursor cursor = new ArrayListCursor(colNames, (ArrayList<ArrayList>) list);
50 
51         // fill window
52         CursorWindow window = new CursorWindow(false);
53         cursor.fillWindow(0, window);
54 
55         // read from cursor window
56         for (int i = 0; i < list.size(); i++) {
57             ArrayList<Integer> col = list.get(i);
58             for (int j = 0; j < colsize; j++) {
59                 String s = window.getString(i, j);
60                 int r2 = col.get(j);
61                 int r1 = Integer.parseInt(s);
62                 assertEquals(r2, r1);
63             }
64         }
65 
66         // test cursor window handle startpos != 0
67         window.clear();
68         cursor.fillWindow(1, window);
69         // read from cursor from window
70         for (int i = 1; i < list.size(); i++) {
71             ArrayList<Integer> col = list.get(i);
72             for (int j = 0; j < colsize; j++) {
73                 String s = window.getString(i, j);
74                 int r2 = col.get(j);
75                 int r1 = Integer.parseInt(s);
76                 assertEquals(r2, r1);
77             }
78         }
79 
80         // Clear the window and make sure it's empty
81         window.clear();
82         assertEquals(0, window.getNumRows());
83     }
84 
85     @SmallTest
testValuesLocalWindow()86     public void testValuesLocalWindow() {
87         doTestValues(new CursorWindow(true));
88     }
89 
90     @SmallTest
testValuesRemoteWindow()91     public void testValuesRemoteWindow() {
92         doTestValues(new CursorWindow(false));
93     }
94 
doTestValues(CursorWindow window)95     private void doTestValues(CursorWindow window) {
96         assertTrue(window.setNumColumns(7));
97         assertTrue(window.allocRow());
98         double db1 = 1.26;
99         assertTrue(window.putDouble(db1, 0, 0));
100         double db2 = window.getDouble(0, 0);
101         assertEquals(db1, db2);
102 
103         long int1 = Long.MAX_VALUE;
104         assertTrue(window.putLong(int1, 0, 1));
105         long int2 = window.getLong(0, 1);
106         assertEquals(int1, int2);
107 
108         assertTrue(window.putString("1198032740000", 0, 3));
109         assertEquals("1198032740000", window.getString(0, 3));
110         assertEquals(1198032740000L, window.getLong(0, 3));
111 
112         assertTrue(window.putString(Long.toString(1198032740000L), 0, 3));
113         assertEquals(Long.toString(1198032740000L), window.getString(0, 3));
114         assertEquals(1198032740000L, window.getLong(0, 3));
115 
116         assertTrue(window.putString(Double.toString(42.0), 0, 4));
117         assertEquals(Double.toString(42.0), window.getString(0, 4));
118         assertEquals(42.0, window.getDouble(0, 4));
119 
120         // put blob
121         byte[] blob = new byte[1000];
122         byte value = 99;
123         Arrays.fill(blob, value);
124         assertTrue(window.putBlob(blob, 0, 6));
125         assertTrue(Arrays.equals(blob, window.getBlob(0, 6)));
126     }
127 
128     @SmallTest
testNull()129     public void testNull() {
130         CursorWindow window = getOneByOneWindow();
131 
132         // Put in a null value and read it back as various types
133         assertTrue(window.putNull(0, 0));
134         assertNull(window.getString(0, 0));
135         assertEquals(0, window.getLong(0, 0));
136         assertEquals(0.0, window.getDouble(0, 0));
137         assertNull(window.getBlob(0, 0));
138     }
139 
140     @SmallTest
testEmptyString()141     public void testEmptyString() {
142         CursorWindow window = getOneByOneWindow();
143 
144         // put size 0 string and read it back as various types
145         assertTrue(window.putString("", 0, 0));
146         assertEquals("", window.getString(0, 0));
147         assertEquals(0, window.getLong(0, 0));
148         assertEquals(0.0, window.getDouble(0, 0));
149     }
150 
getOneByOneWindow()151     private CursorWindow getOneByOneWindow() {
152         CursorWindow window = new CursorWindow(false);
153         assertTrue(window.setNumColumns(1));
154         assertTrue(window.allocRow());
155         return window;
156     }
157 
createTestList(int rows, int cols)158     private static ArrayList<ArrayList> createTestList(int rows, int cols) {
159         ArrayList<ArrayList> list = Lists.newArrayList();
160         Random generator = new Random();
161 
162         for (int i = 0; i < rows; i++) {
163             ArrayList<Integer> col = Lists.newArrayList();
164             list.add(col);
165             for (int j = 0; j < cols; j++) {
166                 // generate random number
167                 Integer r = generator.nextInt();
168                 col.add(r);
169             }
170         }
171         return list;
172     }
173 }
174