• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 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.quicksearchbox;
17 
18 import android.app.SearchManager;
19 import android.database.Cursor;
20 import android.test.AndroidTestCase;
21 
22 import java.util.Arrays;
23 import java.util.HashSet;
24 
25 /**
26  * Tests to verify that custom columns from a suggestion cursor get propagated through QSB properly.
27  */
28 public class SuggestionCursorWithExtrasTest extends AndroidTestCase {
29 
testSuggestionCursorExtraRowString()30     public void testSuggestionCursorExtraRowString() {
31         checkSuggestionCursorExtraColumnValue("extra_text", "Extra text");
32     }
33 
testSuggestionCursorExtraRowInteger()34     public void testSuggestionCursorExtraRowInteger() {
35         checkSuggestionCursorExtraColumnValue("extra_int", 42);
36     }
37 
testSuggestionCursorExtraRowFloat()38     public void testSuggestionCursorExtraRowFloat() {
39         checkSuggestionCursorExtraColumnValue("extra_float", new Float(Math.E));
40     }
41 
testSuggestionCursorExtraRowNull()42     public void testSuggestionCursorExtraRowNull() {
43         checkSuggestionCursorExtraColumnValue("extra_null", null);
44     }
45 
testCursorExtraRowString()46     public void testCursorExtraRowString() {
47         checkExtraRowString("stringy-string");
48         checkExtraRowString("");
49         checkExtraRowString(null);
50     }
51 
checkExtraRowString(String value)52     private void checkExtraRowString(String value) {
53         String column = "extra_string";
54         Cursor c = createCursorWithExtras(column, value);
55         assertEquals("Extra column value", value, c.getString(c.getColumnIndex(column)));
56     }
57 
testCursorExtraRowInt()58     public void testCursorExtraRowInt() {
59         checkCursorExtraInt(42);
60         checkCursorExtraInt(0);
61         checkCursorExtraInt(-42);
62         checkCursorExtraInt(Integer.MAX_VALUE);
63         checkCursorExtraInt(Integer.MIN_VALUE);
64     }
65 
checkCursorExtraInt(int value)66     public void checkCursorExtraInt(int value) {
67         String column = "extra_int";
68         Cursor c = createCursorWithExtras(column, value);
69         assertEquals("Extra column value", value, c.getInt(c.getColumnIndex(column)));
70     }
71 
testCursorExtraRowDouble()72     public void testCursorExtraRowDouble() {
73         checkCursorExtraRowDouble(Math.PI);
74         checkCursorExtraRowDouble(-Math.PI);
75         checkCursorExtraRowDouble(0);
76         checkCursorExtraRowDouble(Double.MAX_VALUE);
77         checkCursorExtraRowDouble(Double.MIN_VALUE);
78     }
79 
checkCursorExtraRowDouble(double value)80     public void checkCursorExtraRowDouble(double value) {
81         String column = "extra_double";
82         Cursor c = createCursorWithExtras(column, value);
83         assertEquals("Extra column value", value, c.getDouble(c.getColumnIndex(column)));
84     }
85 
testCursorExtraRowFloat()86     public void testCursorExtraRowFloat() {
87         checkCursorExtraRowFloat((float) Math.E);
88         checkCursorExtraRowFloat((float) -Math.E);
89         checkCursorExtraRowFloat(0f);
90         checkCursorExtraRowFloat(Float.MAX_VALUE);
91         checkCursorExtraRowFloat(Float.MIN_VALUE);
92     }
93 
checkCursorExtraRowFloat(float value)94     public void checkCursorExtraRowFloat(float value) {
95         String column = "extra_float";
96         Cursor c = createCursorWithExtras(column, value);
97         assertEquals("Extra column value", value, c.getFloat(c.getColumnIndex(column)));
98     }
99 
testCursorExtraRowLong()100     public void testCursorExtraRowLong() {
101         checkExtraRowLong(0xfeed0beefl);
102         checkExtraRowLong(-0xfeed0beefl);
103         checkExtraRowLong(0);
104         checkExtraRowLong(Long.MIN_VALUE);
105         checkExtraRowLong(Long.MAX_VALUE);
106     }
107 
checkExtraRowLong(long value)108     private void checkExtraRowLong(long value) {
109         String column = "extra_long";
110         Cursor c = createCursorWithExtras(column, value);
111         assertEquals("Extra column value", value, c.getLong(c.getColumnIndex(column)));
112     }
113 
testCursorExtraRowShort()114     public void testCursorExtraRowShort() {
115         checkCursorExtraRowShort((short) 0xabc);
116         checkCursorExtraRowShort((short) -0xabc);
117         checkCursorExtraRowShort((short) 0);
118         checkCursorExtraRowShort(Short.MAX_VALUE);
119         checkCursorExtraRowShort(Short.MIN_VALUE);
120     }
121 
checkCursorExtraRowShort(short value)122     private void checkCursorExtraRowShort(short value) {
123         String column = "extra_short";
124         Cursor c = createCursorWithExtras(column, value);
125         assertEquals("Extra column value", value, c.getShort(c.getColumnIndex(column)));
126     }
127 
createCursorWithExtras(String columnName, Object columnValue)128     private Cursor createCursorWithExtras(String columnName, Object columnValue) {
129         MockSuggestionProviderCursor expectedCursor = new MockSuggestionProviderCursor(
130                 new String[]{"_id",   SearchManager.SUGGEST_COLUMN_TEXT_1, columnName });
131         expectedCursor.addRow(       0,       "Text 1",                            columnValue);
132 
133         // this roughly approcimates what happens to suggestions
134         CursorBackedSourceResult suggestions = new CursorBackedSourceResult(
135                 MockSource.SOURCE_1, "", expectedCursor);
136         assertEquals("Number of suggestions", 1, suggestions.getCount());
137         suggestions.moveTo(0);
138         SuggestionCursorBackedCursor observedCursor = new SuggestionCursorBackedCursor(suggestions);
139 
140         assertEquals("Cursor rows", 1, observedCursor.getCount());
141         HashSet<String> rows = new HashSet<String>();
142         rows.addAll(Arrays.asList(observedCursor.getColumnNames()));
143         assertTrue("Extra column present in cursor", rows.contains(columnName));
144         observedCursor.moveToFirst();
145         return observedCursor;
146     }
147 
checkSuggestionCursorExtraColumnValue(String columnName, Object columnValue)148     private void checkSuggestionCursorExtraColumnValue(String columnName, Object columnValue) {
149         MockSuggestionProviderCursor cursor = new MockSuggestionProviderCursor(
150                 new String[]{"_id",   SearchManager.SUGGEST_COLUMN_TEXT_1, columnName });
151         cursor.addRow(       0,       "Text 1",                            columnValue);
152 
153         CursorBackedSourceResult suggestions = new CursorBackedSourceResult(
154                 MockSource.SOURCE_1, "", cursor);
155 
156         assertEquals("Suggestions count matches cursor count",
157                 cursor.getCount(), suggestions.getCount());
158 
159         cursor.moveToFirst();
160         suggestions.moveTo(0);
161 
162         SuggestionExtras extras = suggestions.getExtras();
163         assertNotNull("Suggestions extras", extras);
164         assertTrue("Extra column missing", extras.getExtraColumnNames().contains(columnName));
165         assertTrue("Spurious columns", extras.getExtraColumnNames().size() == 1);
166         Object extraValue = extras.getExtra(columnName);
167         if (columnValue == null) {
168             assertEquals("Wrong extra value", columnValue, extraValue);
169         } else {
170             assertNotNull("Extra value null", extraValue);
171             if (columnValue == null) {
172                 assertEquals("Extra value wrong", columnValue, extraValue);
173             } else {
174                 assertEquals("Extra value wrong", columnValue.toString(), extraValue);
175             }
176         }
177     }
178 
179 }
180