15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2011 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import re 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto_functional # Must be imported before pyauto 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import test_utils 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchEnginesTest(pyauto.PyUITest): 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """TestCase for Search Engines.""" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _localhost_prefix = 'http://localhost:1000/' 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _GetSearchEngineWithKeyword(self, keyword): 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Get search engine info and return an element that matches keyword. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword: Search engine keyword field. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Returns: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A search engine info dict or None. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) match_list = ([x for x in self.GetSearchEngineInfo() 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if x['keyword'] == keyword]) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if match_list: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return match_list[0] 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return None 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def Debug(self): 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test method for experimentation. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This method will not run automatically. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while True: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raw_input('Interact with the browser and hit <enter>') 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.pprint(self.GetSearchEngineInfo()) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testDiscoverSearchEngine(self): 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test that chrome discovers youtube search engine after searching.""" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Take a snapshot of current search engine info. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info = self.GetSearchEngineInfo() 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) youtube = self._GetSearchEngineWithKeyword('youtube.com') 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertFalse(youtube) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Use omnibox to invoke search engine discovery. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Navigating using NavigateToURL does not currently invoke this logic. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.SetOmniboxText('http://www.youtube.com') 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OmniboxAcceptInput() 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def InfoUpdated(old_info): 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_info = self.GetSearchEngineInfo() 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if len(new_info) > len(old_info): 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.WaitUntil(lambda: InfoUpdated(info)) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) youtube = self._GetSearchEngineWithKeyword('youtube.com') 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(youtube) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(re.search('youtube', youtube['short_name'], 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re.IGNORECASE)) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertFalse(youtube['in_default_list']) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertFalse(youtube['is_default']) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testDeleteSearchEngine(self): 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test adding then deleting a search engine.""" 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AddSearchEngine(title='foo', 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword='foo.com', 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url='http://foo/?q=%s') 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) foo = self._GetSearchEngineWithKeyword('foo.com') 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(foo) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.DeleteSearchEngine('foo.com') 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) foo = self._GetSearchEngineWithKeyword('foo.com') 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertFalse(foo) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMakeSearchEngineDefault(self): 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test adding then making a search engine default.""" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AddSearchEngine( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title='foo', 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword='foo.com', 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url=self._localhost_prefix + '?q=%s') 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) foo = self._GetSearchEngineWithKeyword('foo.com') 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(foo) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertFalse(foo['is_default']) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.MakeSearchEngineDefault('foo.com') 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) foo = self._GetSearchEngineWithKeyword('foo.com') 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(foo) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(foo['is_default']) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.SetOmniboxText('foobar') 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OmniboxAcceptInput() 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(self._localhost_prefix + '?q=foobar', 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.GetActiveTabURL().spec()) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testDefaultSearchEngines(self): 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test that we have 3 default search options.""" 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info = self.GetSearchEngineInfo() 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(len(info), 3) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Verify that each can be used as the default search provider. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_providers = ['google.com', 'yahoo.com', 'bing.com'] 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for keyword in default_providers: 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.MakeSearchEngineDefault(keyword) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) search_engine = self._GetSearchEngineWithKeyword(keyword) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(search_engine['is_default']) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.SetOmniboxText('test search') 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OmniboxAcceptInput() 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(re.search(keyword, self.GetActiveTabURL().spec())) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto_functional.Main() 111