2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
8 import pyauto_functional # Must be imported before pyauto
13 class SearchEnginesTest(pyauto.PyUITest):
14 """TestCase for Search Engines."""
16 _localhost_prefix = 'http://localhost:1000/'
18 def _GetSearchEngineWithKeyword(self, keyword):
19 """Get search engine info and return an element that matches keyword.
22 keyword: Search engine keyword field.
25 A search engine info dict or None.
27 match_list = ([x for x in self.GetSearchEngineInfo()
28 if x['keyword'] == keyword])
34 """Test method for experimentation.
36 This method will not run automatically.
39 raw_input('Interact with the browser and hit <enter>')
40 self.pprint(self.GetSearchEngineInfo())
42 def testDiscoverSearchEngine(self):
43 """Test that chrome discovers youtube search engine after searching."""
44 # Take a snapshot of current search engine info.
45 info = self.GetSearchEngineInfo()
46 youtube = self._GetSearchEngineWithKeyword('youtube.com')
47 self.assertFalse(youtube)
48 # Use omnibox to invoke search engine discovery.
49 # Navigating using NavigateToURL does not currently invoke this logic.
50 self.SetOmniboxText('http://www.youtube.com')
51 self.OmniboxAcceptInput()
52 def InfoUpdated(old_info):
53 new_info = self.GetSearchEngineInfo()
54 if len(new_info) > len(old_info):
57 self.WaitUntil(lambda: InfoUpdated(info))
58 youtube = self._GetSearchEngineWithKeyword('youtube.com')
59 self.assertTrue(youtube)
60 self.assertTrue(re.search('youtube', youtube['short_name'],
62 self.assertFalse(youtube['in_default_list'])
63 self.assertFalse(youtube['is_default'])
65 def testDeleteSearchEngine(self):
66 """Test adding then deleting a search engine."""
67 self.AddSearchEngine(title='foo',
69 url='http://foo/?q=%s')
70 foo = self._GetSearchEngineWithKeyword('foo.com')
72 self.DeleteSearchEngine('foo.com')
73 foo = self._GetSearchEngineWithKeyword('foo.com')
76 def testMakeSearchEngineDefault(self):
77 """Test adding then making a search engine default."""
81 url=self._localhost_prefix + '?q=%s')
82 foo = self._GetSearchEngineWithKeyword('foo.com')
84 self.assertFalse(foo['is_default'])
85 self.MakeSearchEngineDefault('foo.com')
86 foo = self._GetSearchEngineWithKeyword('foo.com')
88 self.assertTrue(foo['is_default'])
89 self.SetOmniboxText('foobar')
90 self.OmniboxAcceptInput()
91 self.assertEqual(self._localhost_prefix + '?q=foobar',
92 self.GetActiveTabURL().spec())
94 def testDefaultSearchEngines(self):
95 """Test that we have 3 default search options."""
96 info = self.GetSearchEngineInfo()
97 self.assertEqual(len(info), 3)
98 # Verify that each can be used as the default search provider.
99 default_providers = ['google.com', 'yahoo.com', 'bing.com']
100 for keyword in default_providers:
101 self.MakeSearchEngineDefault(keyword)
102 search_engine = self._GetSearchEngineWithKeyword(keyword)
103 self.assertTrue(search_engine['is_default'])
104 self.SetOmniboxText('test search')
105 self.OmniboxAcceptInput()
106 self.assertTrue(re.search(keyword, self.GetActiveTabURL().spec()))
109 if __name__ == '__main__':
110 pyauto_functional.Main()