1 #!/usr/bin/env python 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. 5 6 import re 7 8 import pyauto_functional # Must be imported before pyauto 9 import pyauto 10 import test_utils 11 12 13 class SearchEnginesTest(pyauto.PyUITest): 14 """TestCase for Search Engines.""" 15 16 _localhost_prefix = 'http://localhost:1000/' 17 18 def _GetSearchEngineWithKeyword(self, keyword): 19 """Get search engine info and return an element that matches keyword. 20 21 Args: 22 keyword: Search engine keyword field. 23 24 Returns: 25 A search engine info dict or None. 26 """ 27 match_list = ([x for x in self.GetSearchEngineInfo() 28 if x['keyword'] == keyword]) 29 if match_list: 30 return match_list[0] 31 return None 32 33 def Debug(self): 34 """Test method for experimentation. 35 36 This method will not run automatically. 37 """ 38 while True: 39 raw_input('Interact with the browser and hit <enter>') 40 self.pprint(self.GetSearchEngineInfo()) 41 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): 55 return True 56 return False 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'], 61 re.IGNORECASE)) 62 self.assertFalse(youtube['in_default_list']) 63 self.assertFalse(youtube['is_default']) 64 65 def testDeleteSearchEngine(self): 66 """Test adding then deleting a search engine.""" 67 self.AddSearchEngine(title='foo', 68 keyword='foo.com', 69 url='http://foo/?q=%s') 70 foo = self._GetSearchEngineWithKeyword('foo.com') 71 self.assertTrue(foo) 72 self.DeleteSearchEngine('foo.com') 73 foo = self._GetSearchEngineWithKeyword('foo.com') 74 self.assertFalse(foo) 75 76 def testMakeSearchEngineDefault(self): 77 """Test adding then making a search engine default.""" 78 self.AddSearchEngine( 79 title='foo', 80 keyword='foo.com', 81 url=self._localhost_prefix + '?q=%s') 82 foo = self._GetSearchEngineWithKeyword('foo.com') 83 self.assertTrue(foo) 84 self.assertFalse(foo['is_default']) 85 self.MakeSearchEngineDefault('foo.com') 86 foo = self._GetSearchEngineWithKeyword('foo.com') 87 self.assertTrue(foo) 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()) 93 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())) 107 108 109 if __name__ == '__main__': 110 pyauto_functional.Main() 111