172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert/* 272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Copyright (C) 2010 The Android Open Source Project 372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * 472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * you may not use this file except in compliance with the License. 672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * You may obtain a copy of the License at 772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * 872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * 1072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 1172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 1272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * See the License for the specific language governing permissions and 1472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * limitations under the License. 1572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert */ 1672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 1772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertpackage com.android.quicksearchbox; 1872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 1972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.content.Context; 2072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.content.Intent; 2172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.graphics.drawable.Drawable; 2272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.net.Uri; 2372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.os.Bundle; 2472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.test.AndroidTestCase; 2572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.test.MoreAsserts; 2672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.test.suitebuilder.annotation.LargeTest; 2772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 2872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport java.util.concurrent.Executor; 2972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport java.util.concurrent.Executors; 3072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 3172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert/** 3272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Tests for {@link MultiSourceCorpus}. 3372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert */ 3472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert@LargeTest 3572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertpublic class MultiSourceCorpusTest extends AndroidTestCase { 3672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 3772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert protected MultiSourceCorpus mCorpus; 3872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 3972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert @Override 4072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert protected void setUp() throws Exception { 4172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert super.setUp(); 4272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 4396c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert Config config = new Config(getContext()); 449a3f0f73437fad172a510e85064fc300523476ecBjorn Bringert // Using a single thread to make the test deterministic 459a3f0f73437fad172a510e85064fc300523476ecBjorn Bringert Executor executor = Executors.newSingleThreadExecutor(); 4696c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert mCorpus = new SkeletonMultiSourceCorpus(getContext(), config, executor, 4772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert MockSource.SOURCE_1, MockSource.SOURCE_2); 4872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 4972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 5072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public void testGetSources() { 5172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert MoreAsserts.assertContentsInOrder(mCorpus.getSources(), 5272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert MockSource.SOURCE_1, MockSource.SOURCE_2); 5372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 5472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 5572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public void testGetSuggestions() { 5672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert ListSuggestionCursor expected = concatSuggestionCursors("foo", 57cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood MockSource.SOURCE_1.getSuggestions("foo", 50, false), 58cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood MockSource.SOURCE_2.getSuggestions("foo", 50, false)); 59cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood CorpusResult observed = mCorpus.getSuggestions("foo", 50, false); 6072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert SuggestionCursorUtil.assertSameSuggestions(expected, observed); 6172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 6272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 63f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert public void testIncludeInAll() { 64f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert assertTrue(mCorpus.includeInAll()); 65f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert } 66f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert 6772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert private static ListSuggestionCursor concatSuggestionCursors(String query, 6872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert SuggestionCursor... cursors) { 6972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert ListSuggestionCursor out = new ListSuggestionCursor("foo"); 7072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert for (SuggestionCursor cursor : cursors) { 7172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert int count = cursor.getCount(); 7272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert for (int i = 0; i < count; i++) { 7372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert out.add(new SuggestionPosition(cursor, i)); 7472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 7572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 7672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return out; 7772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 7872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 7972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert private static class SkeletonMultiSourceCorpus extends MultiSourceCorpus { 8072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 8196c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert public SkeletonMultiSourceCorpus(Context context, Config config, Executor executor, 8296c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert Source... sources) { 8396c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert super(context, config, executor, sources); 8472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 8572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 8672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public Intent createSearchIntent(String query, Bundle appData) { 8772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return null; 8872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 8972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 9072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public Intent createVoiceSearchIntent(Bundle appData) { 9172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return null; 9272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 9372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 9472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public Drawable getCorpusIcon() { 9572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return null; 9672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 9772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 9872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public Uri getCorpusIconUri() { 9972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return null; 10072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 10172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 10272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public CharSequence getHint() { 10372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return null; 10472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 10572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 10672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public CharSequence getLabel() { 10772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return null; 10872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 10972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 110cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood @Override 11172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public int getQueryThreshold() { 11272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return 0; 11372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 11472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 11572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public CharSequence getSettingsDescription() { 11672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return null; 11772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 11872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 11972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public boolean isWebCorpus() { 12072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return false; 12172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 12272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 123cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood @Override 12472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public boolean queryAfterZeroResults() { 12572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return false; 12672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 12772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 128cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood @Override 12972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public boolean voiceSearchEnabled() { 13072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return false; 13172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 13272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 13372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert public String getName() { 13472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert return "SkeletonMultiSourceCorpus"; 13572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 13672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert 13772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert } 13872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert} 139