- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / android / javatests / src / org / chromium / chrome / browser / search_engines / TemplateUrlServiceTest.java
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.
4
5 package org.chromium.chrome.browser.search_engines;
6
7 import android.test.suitebuilder.annotation.SmallTest;
8
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;
16
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;
21
22 /**
23  * Tests for Chrome on Android's usage of the TemplateUrlService API.
24  */
25 public class TemplateUrlServiceTest extends ChromiumTestShellTestBase {
26
27     @Override
28     public void setUp() throws Exception {
29         super.setUp();
30         clearAppData();
31         launchChromiumTestShellWithBlankPage();
32         assertTrue(waitForActiveShellToBeDoneLoading());
33     }
34
35     @SmallTest
36     @Feature({"SearchEngines"})
37     public void testLoadUrlService() throws InterruptedException {
38         final AtomicBoolean loadedResult = new AtomicBoolean();
39         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
40             @Override
41             public void run() {
42                 loadedResult.set(TemplateUrlService.getInstance().isLoaded());
43             }
44         });
45         assertFalse(loadedResult.get());
46
47         waitForTemplateUrlServiceToLoad();
48
49         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
50             @Override
51             public void run() {
52                 loadedResult.set(TemplateUrlService.getInstance().isLoaded());
53
54             }
55         });
56         assertTrue(loadedResult.get());
57     }
58
59     @SmallTest
60     @Feature({"SearchEngines"})
61     public void testSetAndGetSearchEngine() throws InterruptedException {
62         final TemplateUrlService templateUrlService = waitForTemplateUrlServiceToLoad();
63         final AtomicInteger searchEngineIndex = new AtomicInteger();
64
65         // Ensure known state of default search index before running teest.
66         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
67             @Override
68             public void run() {
69                 searchEngineIndex.set(templateUrlService.getDefaultSearchEngineIndex());
70             }
71         });
72         assertEquals(0, searchEngineIndex.get());
73
74         // Set search engine index and verified it stuck.
75         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
76             @Override
77             public void run() {
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());
84             }
85         });
86         assertEquals(1, searchEngineIndex.get());
87     }
88
89     private TemplateUrlService waitForTemplateUrlServiceToLoad() throws InterruptedException {
90         final AtomicBoolean observerNotified = new AtomicBoolean(false);
91         final LoadListener listener = new LoadListener() {
92             @Override
93             public void onTemplateUrlServiceLoaded() {
94                 observerNotified.set(true);
95             }
96         };
97         final AtomicReference<TemplateUrlService> templateUrlService =
98                 new AtomicReference<TemplateUrlService>();
99         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
100             @Override
101             public void run() {
102                 TemplateUrlService service = TemplateUrlService.getInstance();
103                 templateUrlService.set(service);
104
105                 service.registerLoadListener(listener);
106                 service.load();
107             }
108         });
109
110         assertTrue("Observer wasn't notified of TemplateUrlService load.",
111                 CriteriaHelper.pollForCriteria(new Criteria() {
112                     @Override
113                     public boolean isSatisfied() {
114                         return observerNotified.get();
115                     }
116         }));
117         return templateUrlService.get();
118     }
119 }