/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app; import android.app.activity.LocalActivity; import android.app.Activity; import android.app.ISearchManager; import android.app.SearchManager; import android.app.SearchableInfo; import android.content.ComponentName; import android.content.Context; import android.os.ServiceManager; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; /** * To launch this test from the command line: * * adb shell am instrument -w \ * -e class com.android.unit_tests.SearchManagerTest \ * com.android.unit_tests/android.test.InstrumentationTestRunner */ public class SearchManagerTest extends ActivityInstrumentationTestCase2 { private ComponentName SEARCHABLE_ACTIVITY = new ComponentName("com.android.frameworks.coretests", "android.app.activity.SearchableActivity"); /* * Bug list of test ideas. * * testSearchManagerInterfaceAvailable() * Exercise the interface obtained * * testSearchManagerAvailable() * Exercise the interface obtained * * testSearchManagerInvocations() * FIX - make it work again * stress test with a very long string * * SearchManager tests * confirm proper identification of "default" activity based on policy, not hardcoded contacts * * SearchBar tests * Maybe have to do with framework / unittest runner - need instrumented activity? * How can we unit test the suggestions content providers? * Should I write unit tests for any of them? * Test scenarios: * type-BACK (cancel) * type-GO (send) * type-navigate-click (suggestion) * type-action * type-navigate-action (suggestion) */ /** * Local copy of activity context */ Context mContext; public SearchManagerTest() { super("com.android.frameworks.coretests", LocalActivity.class); } /** * Setup any common data for the upcoming tests. */ @Override public void setUp() throws Exception { super.setUp(); Activity testActivity = getActivity(); mContext = testActivity; } private ISearchManager getSearchManagerService() { return ISearchManager.Stub.asInterface( ServiceManager.getService(Context.SEARCH_SERVICE)); } /** * The goal of this test is to confirm that we can obtain * a search manager interface. */ @MediumTest public void testSearchManagerInterfaceAvailable() { assertNotNull(getSearchManagerService()); } /** * The goal of this test is to confirm that we can obtain * a search manager at any time, and that for any given context, * it is a singleton. */ @LargeTest public void testSearchManagerAvailable() { SearchManager searchManager1 = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); assertNotNull(searchManager1); SearchManager searchManager2 = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); assertNotNull(searchManager2); assertSame(searchManager1, searchManager2 ); } /** * Tests that startSearch() can be called multiple times without stopSearch() * in between. */ public void testStartSearchIdempotent() throws Exception { SearchManager searchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); assertNotNull(searchManager); searchManager.startSearch(null, false, SEARCHABLE_ACTIVITY, null, false); searchManager.startSearch(null, false, SEARCHABLE_ACTIVITY, null, false); searchManager.stopSearch(); } /** * Tests that stopSearch() can be called when the search UI is not visible and can be * called multiple times without startSearch() in between. */ public void testStopSearchIdempotent() throws Exception { SearchManager searchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); assertNotNull(searchManager); searchManager.stopSearch(); searchManager.startSearch(null, false, SEARCHABLE_ACTIVITY, null, false); searchManager.stopSearch(); searchManager.stopSearch(); } /** * The goal of this test is to confirm that we can start and then * stop a simple search. */ public void testSearchManagerInvocations() throws Exception { SearchManager searchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); assertNotNull(searchManager); // These tests should simply run to completion w/o exceptions searchManager.startSearch(null, false, SEARCHABLE_ACTIVITY, null, false); searchManager.stopSearch(); searchManager.startSearch("", false, SEARCHABLE_ACTIVITY, null, false); searchManager.stopSearch(); searchManager.startSearch("test search string", false, SEARCHABLE_ACTIVITY, null, false); searchManager.stopSearch(); searchManager.startSearch("test search string", true, SEARCHABLE_ACTIVITY, null, false); searchManager.stopSearch(); } }