blob: 0247355901e75cc94f70ea6ce6d1f30281e401dd [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
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
17package com.android.unit_tests;
18
19import android.database.AbstractCursor;
20import android.test.suitebuilder.annotation.SmallTest;
Tom Taylord4a47292009-12-21 13:59:18 -080021import com.android.common.ArrayListCursor;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080022import android.database.CursorWindow;
23import android.test.PerformanceTestCase;
24
25import com.google.android.collect.Lists;
26
27import java.util.ArrayList;
28import java.util.Arrays;
29import java.util.Random;
30
31import junit.framework.TestCase;
32
33public class CursorWindowTest extends TestCase implements PerformanceTestCase {
34 public boolean isPerformanceOnly() {
35 return false;
36 }
37
38 // These test can only be run once.
39 public int startPerformance(Intermediates intermediates) {
40 return 1;
41 }
42
43 @SmallTest
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
86 public void testValuesLocalWindow() {
87 doTestValues(new CursorWindow(true));
88 }
89
90 @SmallTest
91 public void testValuesRemoteWindow() {
92 doTestValues(new CursorWindow(false));
93 }
94
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
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
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
151 private CursorWindow getOneByOneWindow() {
152 CursorWindow window = new CursorWindow(false);
153 assertTrue(window.setNumColumns(1));
154 assertTrue(window.allocRow());
155 return window;
156 }
157
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}