blob: 2fcf9e8c4958e3ae8fabc1245607388ad1b77f65 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2011 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.
import re
import pyauto_functional # Must be imported before pyauto
import pyauto
import test_utils
class SearchEnginesTest(pyauto.PyUITest):
"""TestCase for Search Engines."""
_localhost_prefix = 'http://localhost:1000/'
def _GetSearchEngineWithKeyword(self, keyword):
"""Get search engine info and return an element that matches keyword.
Args:
keyword: Search engine keyword field.
Returns:
A search engine info dict or None.
"""
match_list = ([x for x in self.GetSearchEngineInfo()
if x['keyword'] == keyword])
if match_list:
return match_list[0]
return None
def Debug(self):
"""Test method for experimentation.
This method will not run automatically.
"""
while True:
raw_input('Interact with the browser and hit <enter>')
self.pprint(self.GetSearchEngineInfo())
def testDiscoverSearchEngine(self):
"""Test that chrome discovers youtube search engine after searching."""
# Take a snapshot of current search engine info.
info = self.GetSearchEngineInfo()
youtube = self._GetSearchEngineWithKeyword('youtube.com')
self.assertFalse(youtube)
# Use omnibox to invoke search engine discovery.
# Navigating using NavigateToURL does not currently invoke this logic.
self.SetOmniboxText('http://www.youtube.com')
self.OmniboxAcceptInput()
def InfoUpdated(old_info):
new_info = self.GetSearchEngineInfo()
if len(new_info) > len(old_info):
return True
return False
self.WaitUntil(lambda: InfoUpdated(info))
youtube = self._GetSearchEngineWithKeyword('youtube.com')
self.assertTrue(youtube)
self.assertTrue(re.search('youtube', youtube['short_name'],
re.IGNORECASE))
self.assertFalse(youtube['in_default_list'])
self.assertFalse(youtube['is_default'])
def testDeleteSearchEngine(self):
"""Test adding then deleting a search engine."""
self.AddSearchEngine(title='foo',
keyword='foo.com',
url='http://foo/?q=%s')
foo = self._GetSearchEngineWithKeyword('foo.com')
self.assertTrue(foo)
self.DeleteSearchEngine('foo.com')
foo = self._GetSearchEngineWithKeyword('foo.com')
self.assertFalse(foo)
def testMakeSearchEngineDefault(self):
"""Test adding then making a search engine default."""
self.AddSearchEngine(
title='foo',
keyword='foo.com',
url=self._localhost_prefix + '?q=%s')
foo = self._GetSearchEngineWithKeyword('foo.com')
self.assertTrue(foo)
self.assertFalse(foo['is_default'])
self.MakeSearchEngineDefault('foo.com')
foo = self._GetSearchEngineWithKeyword('foo.com')
self.assertTrue(foo)
self.assertTrue(foo['is_default'])
self.SetOmniboxText('foobar')
self.OmniboxAcceptInput()
self.assertEqual(self._localhost_prefix + '?q=foobar',
self.GetActiveTabURL().spec())
def testDefaultSearchEngines(self):
"""Test that we have 3 default search options."""
info = self.GetSearchEngineInfo()
self.assertEqual(len(info), 3)
# Verify that each can be used as the default search provider.
default_providers = ['google.com', 'yahoo.com', 'bing.com']
for keyword in default_providers:
self.MakeSearchEngineDefault(keyword)
search_engine = self._GetSearchEngineWithKeyword(keyword)
self.assertTrue(search_engine['is_default'])
self.SetOmniboxText('test search')
self.OmniboxAcceptInput()
self.assertTrue(re.search(keyword, self.GetActiveTabURL().spec()))
if __name__ == '__main__':
pyauto_functional.Main()