blob: a3ae6297574020e9008e1e95c8bf294eca90e3ef [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.search_engines;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.search_engines.TemplateUrlService.LoadListener;
import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl;
import org.chromium.chrome.testshell.ChromiumTestShellTestBase;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
/**
* Tests for Chrome on Android's usage of the TemplateUrlService API.
*/
public class TemplateUrlServiceTest extends ChromiumTestShellTestBase {
@Override
public void setUp() throws Exception {
super.setUp();
clearAppData();
launchChromiumTestShellWithBlankPage();
assertTrue(waitForActiveShellToBeDoneLoading());
}
@SmallTest
@Feature({"SearchEngines"})
public void testLoadUrlService() throws InterruptedException {
final AtomicBoolean loadedResult = new AtomicBoolean();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
loadedResult.set(TemplateUrlService.getInstance().isLoaded());
}
});
assertFalse(loadedResult.get());
waitForTemplateUrlServiceToLoad();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
loadedResult.set(TemplateUrlService.getInstance().isLoaded());
}
});
assertTrue(loadedResult.get());
}
@SmallTest
@Feature({"SearchEngines"})
public void testSetAndGetSearchEngine() throws InterruptedException {
final TemplateUrlService templateUrlService = waitForTemplateUrlServiceToLoad();
final AtomicInteger searchEngineIndex = new AtomicInteger();
// Ensure known state of default search index before running teest.
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
searchEngineIndex.set(templateUrlService.getDefaultSearchEngineIndex());
}
});
assertEquals(0, searchEngineIndex.get());
// Set search engine index and verified it stuck.
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
List<TemplateUrl> searchEngines =
templateUrlService.getLocalizedSearchEngines();
assertTrue("There must be more than one search engine to change searchEngines",
searchEngines.size() > 1);
templateUrlService.setSearchEngine(1);
searchEngineIndex.set(templateUrlService.getDefaultSearchEngineIndex());
}
});
assertEquals(1, searchEngineIndex.get());
}
private TemplateUrlService waitForTemplateUrlServiceToLoad() throws InterruptedException {
final AtomicBoolean observerNotified = new AtomicBoolean(false);
final LoadListener listener = new LoadListener() {
@Override
public void onTemplateUrlServiceLoaded() {
observerNotified.set(true);
}
};
final AtomicReference<TemplateUrlService> templateUrlService =
new AtomicReference<TemplateUrlService>();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
TemplateUrlService service = TemplateUrlService.getInstance();
templateUrlService.set(service);
service.registerLoadListener(listener);
service.load();
}
});
assertTrue("Observer wasn't notified of TemplateUrlService load.",
CriteriaHelper.pollForCriteria(new Criteria() {
@Override
public boolean isSatisfied() {
return observerNotified.get();
}
}));
return templateUrlService.get();
}
}