1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.chromium.chrome.browser.search_engines;
7 import android.test.suitebuilder.annotation.SmallTest;
9 import org.chromium.base.ThreadUtils;
10 import org.chromium.base.test.util.Feature;
11 import org.chromium.chrome.browser.search_engines.TemplateUrlService.LoadListener;
12 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl;
13 import org.chromium.chrome.testshell.ChromiumTestShellTestBase;
14 import org.chromium.content.browser.test.util.Criteria;
15 import org.chromium.content.browser.test.util.CriteriaHelper;
17 import java.util.List;
18 import java.util.concurrent.atomic.AtomicBoolean;
19 import java.util.concurrent.atomic.AtomicInteger;
20 import java.util.concurrent.atomic.AtomicReference;
23 * Tests for Chrome on Android's usage of the TemplateUrlService API.
25 public class TemplateUrlServiceTest extends ChromiumTestShellTestBase {
28 public void setUp() throws Exception {
31 launchChromiumTestShellWithBlankPage();
32 assertTrue(waitForActiveShellToBeDoneLoading());
36 @Feature({"SearchEngines"})
37 public void testLoadUrlService() throws InterruptedException {
38 final AtomicBoolean loadedResult = new AtomicBoolean();
39 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
42 loadedResult.set(TemplateUrlService.getInstance().isLoaded());
45 assertFalse(loadedResult.get());
47 waitForTemplateUrlServiceToLoad();
49 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
52 loadedResult.set(TemplateUrlService.getInstance().isLoaded());
56 assertTrue(loadedResult.get());
60 @Feature({"SearchEngines"})
61 public void testSetAndGetSearchEngine() throws InterruptedException {
62 final TemplateUrlService templateUrlService = waitForTemplateUrlServiceToLoad();
63 final AtomicInteger searchEngineIndex = new AtomicInteger();
65 // Ensure known state of default search index before running teest.
66 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
69 searchEngineIndex.set(templateUrlService.getDefaultSearchEngineIndex());
72 assertEquals(0, searchEngineIndex.get());
74 // Set search engine index and verified it stuck.
75 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
78 List<TemplateUrl> searchEngines =
79 templateUrlService.getLocalizedSearchEngines();
80 assertTrue("There must be more than one search engine to change searchEngines",
81 searchEngines.size() > 1);
82 templateUrlService.setSearchEngine(1);
83 searchEngineIndex.set(templateUrlService.getDefaultSearchEngineIndex());
86 assertEquals(1, searchEngineIndex.get());
89 private TemplateUrlService waitForTemplateUrlServiceToLoad() throws InterruptedException {
90 final AtomicBoolean observerNotified = new AtomicBoolean(false);
91 final LoadListener listener = new LoadListener() {
93 public void onTemplateUrlServiceLoaded() {
94 observerNotified.set(true);
97 final AtomicReference<TemplateUrlService> templateUrlService =
98 new AtomicReference<TemplateUrlService>();
99 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
102 TemplateUrlService service = TemplateUrlService.getInstance();
103 templateUrlService.set(service);
105 service.registerLoadListener(listener);
110 assertTrue("Observer wasn't notified of TemplateUrlService load.",
111 CriteriaHelper.pollForCriteria(new Criteria() {
113 public boolean isSatisfied() {
114 return observerNotified.get();
117 return templateUrlService.get();