| Index: chrome/test/functional/translate.py
|
| diff --git a/chrome/test/functional/translate.py b/chrome/test/functional/translate.py
|
| index 4b7aabb464b2c4caa128e19884d46e75ce217e0f..df3e88c7d94c4e46e8630816774e376cbfaae391 100644
|
| --- a/chrome/test/functional/translate.py
|
| +++ b/chrome/test/functional/translate.py
|
| @@ -3,6 +3,10 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +import glob
|
| +import logging
|
| +import os
|
| +
|
| import pyauto_functional # Must be imported before pyauto
|
| import pyauto
|
|
|
| @@ -10,7 +14,6 @@ import pyauto
|
| class TranslateTest(pyauto.PyUITest):
|
| """Tests that translate works correctly"""
|
|
|
| - spanish_google = 'http://www.google.com/webhp?hl=es'
|
| spanish = 'es'
|
| after_translate = 'AFTER_TRANSLATE'
|
| before_translate = 'BEFORE_TRANSLATE'
|
| @@ -25,6 +28,17 @@ class TranslateTest(pyauto.PyUITest):
|
| raw_input('Hit <enter> to dump translate info.. ')
|
| pp.pprint(self.GetTranslateInfo())
|
|
|
| + def _GetURLForDataDirFile(self, filename):
|
| + """Return the file URL for the given file in the data directory."""
|
| + return self.GetFileURLForPath(os.path.join(self.DataDir(), filename))
|
| +
|
| + def _GetDefaultSpanishURL(self):
|
| + return self._GetURLForDataDirFile(
|
| + os.path.join('translate', self.spanish, 'google.html'))
|
| +
|
| + def _GetDefaultEnglishURL(self):
|
| + return self._GetURLForDataDirFile('title1.html')
|
| +
|
| def _NavigateAndWaitForBar(self, url):
|
| self.NavigateToURL(url)
|
| self.WaitForInfobarCount(1)
|
| @@ -39,21 +53,33 @@ class TranslateTest(pyauto.PyUITest):
|
| if curr_try == 10:
|
| self.fail('Translation failed more than %d times.' % max_tries)
|
|
|
| - def testTranslate(self):
|
| - """Tests that a page was translated if the user chooses to translate."""
|
| - self._NavigateAndWaitForBar(self.spanish_google)
|
| + def _AssertTranslateWorks(self, url, original_language):
|
| + """Translate the page at the given URL and assert that the page has been
|
| + translated.
|
| + """
|
| + self._NavigateAndWaitForBar(url)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertEqual(original_language, translate_info['original_language'])
|
| + self.assertFalse(translate_info['page_translated'])
|
| + self.assertTrue(translate_info['can_translate_page'])
|
| + self.assertTrue('translate_bar' in translate_info)
|
| self._ClickTranslateUntilSuccess()
|
| translate_info = self.GetTranslateInfo()
|
| - self.assertEqual(self.spanish, translate_info['original_language'])
|
| - self.assertTrue(translate_info['page_translated'])
|
| self.assertTrue(translate_info['can_translate_page'])
|
| self.assertTrue('translate_bar' in translate_info)
|
| + translate_bar = translate_info['translate_bar']
|
| self.assertEquals(self.after_translate,
|
| translate_info['translate_bar']['bar_state'])
|
| + self.assertEquals(original_language,
|
| + translate_bar['original_lang_code'])
|
| +
|
| + def testTranslate(self):
|
| + """Tests that a page was translated if the user chooses to translate."""
|
| + self._AssertTranslateWorks(self._GetDefaultSpanishURL(), self.spanish)
|
|
|
| def testNoTranslate(self):
|
| """Tests that a page isn't translated if the user declines translate."""
|
| - self._NavigateAndWaitForBar(self.spanish_google)
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| self.PerformActionOnInfobar('dismiss', 0)
|
| translate_info = self.GetTranslateInfo()
|
| self.assertEqual(self.spanish, translate_info['original_language'])
|
| @@ -61,7 +87,7 @@ class TranslateTest(pyauto.PyUITest):
|
| self.assertTrue(translate_info['can_translate_page'])
|
| # If the user goes to the site again, the infobar should drop down but
|
| # the page should not be automatically translated.
|
| - self._NavigateAndWaitForBar(self.spanish_google)
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| translate_info = self.GetTranslateInfo()
|
| self.assertFalse(translate_info['page_translated'])
|
| self.assertTrue(translate_info['can_translate_page'])
|
| @@ -71,7 +97,7 @@ class TranslateTest(pyauto.PyUITest):
|
|
|
| def testNeverTranslateLanguage(self):
|
| """Tests that blacklisting a language for translate works."""
|
| - self._NavigateAndWaitForBar(self.spanish_google)
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| self.SelectTranslateOption('never_translate_language')
|
| translate_info = self.GetTranslateInfo()
|
| self.assertEqual(self.spanish, translate_info['original_language'])
|
| @@ -86,7 +112,7 @@ class TranslateTest(pyauto.PyUITest):
|
|
|
| def testAlwaysTranslateLanguage(self):
|
| """Tests that the always translate a language option works."""
|
| - self._NavigateAndWaitForBar(self.spanish_google)
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| self.SelectTranslateOption('toggle_always_translate')
|
| self._ClickTranslateUntilSuccess()
|
| translate_info = self.GetTranslateInfo()
|
| @@ -111,7 +137,8 @@ class TranslateTest(pyauto.PyUITest):
|
|
|
| def testNeverTranslateSite(self):
|
| """Tests that blacklisting a site for translate works."""
|
| - self._NavigateAndWaitForBar(self.spanish_google)
|
| + spanish_google = 'http://www.google.com/webhp?hl=es'
|
| + self._NavigateAndWaitForBar(spanish_google)
|
| self.SelectTranslateOption('never_translate_site')
|
| translate_info = self.GetTranslateInfo()
|
| self.assertFalse(translate_info['page_translated'])
|
| @@ -126,13 +153,198 @@ class TranslateTest(pyauto.PyUITest):
|
|
|
| def testRevert(self):
|
| """Tests that reverting a site to its original language works."""
|
| - self._NavigateAndWaitForBar(self.spanish_google)
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| self._ClickTranslateUntilSuccess()
|
| self.RevertPageTranslation()
|
| translate_info = self.GetTranslateInfo()
|
| self.assertFalse(translate_info['page_translated'])
|
| self.assertTrue(translate_info['can_translate_page'])
|
|
|
| + def testBarNotVisibleOnSSLErrorPage(self):
|
| + """Test Translate bar is not visible on SSL error pages."""
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue('translate_bar' in translate_info)
|
| + self.assertTrue(translate_info['can_translate_page'])
|
| + # This page is an ssl error page.
|
| + self.NavigateToURL('https://www.sourceforge.net')
|
| + self.WaitForInfobarCount(0)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertFalse('translate_bar' in translate_info)
|
| +
|
| + def testBarNotVisibleOnEnglishPage(self):
|
| + """Test Translate bar is not visible on English pages."""
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue('translate_bar' in translate_info)
|
| + self.assertTrue(translate_info['can_translate_page'])
|
| + # With the translate bar visible in same tab open an English page.
|
| + self.NavigateToURL(self._GetDefaultEnglishURL())
|
| + self.WaitForInfobarCount(0)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertFalse('translate_bar' in translate_info)
|
| +
|
| + def testTranslateDiffURLs(self):
|
| + """Test that HTTP, HTTPS, and file urls all get translated."""
|
| + http_url = 'http://www.google.com/webhp?hl=es'
|
| + https_url = 'https://www.google.com/webhp?hl=es'
|
| + file_url = self._GetDefaultSpanishURL()
|
| + for url in (http_url, https_url, file_url):
|
| + self._AssertTranslateWorks(url, self.spanish)
|
| +
|
| + def testNeverTranslateLanguage(self):
|
| + """Verify no translate bar for blacklisted language."""
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| + self.SelectTranslateOption('never_translate_language')
|
| + self.assertFalse(self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars'])
|
| + # Navigate to a page that will show the translate bar, then navigate away.
|
| + self._NavigateAndWaitForBar(
|
| + self._GetURLForDataDirFile('french_page.html'))
|
| + self.NavigateToURL('http://es.wikipedia.org/wiki/Wikipedia:Portada')
|
| + self.WaitForInfobarCount(0)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertFalse('translate_bar' in translate_info)
|
| + self.assertFalse(translate_info['page_translated'])
|
| + self.assertFalse(translate_info['can_translate_page'])
|
| +
|
| + def testNotranslateMetaTag(self):
|
| + """Test "notranslate" meta tag."""
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| + self.NavigateToURL(self._GetURLForDataDirFile(
|
| + os.path.join('translate', 'notranslate_meta_tag.html')))
|
| + self.WaitForInfobarCount(0)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertFalse('translate_bar' in translate_info)
|
| +
|
| + def testToggleTranslateOption(self):
|
| + """Test to toggle the 'Always Translate' option."""
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| + # Assert the default.
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertFalse(translate_info['page_translated'])
|
| + self.assertTrue('translate_bar' in translate_info)
|
| + # Select 'Always Translate'.
|
| + self.SelectTranslateOption('toggle_always_translate')
|
| + self._ClickTranslateUntilSuccess()
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue(translate_info['page_translated'])
|
| + # Reload the tab and confirm the page was translated.
|
| + self.GetBrowserWindow(0).GetTab(0).Reload()
|
| + self.WaitForInfobarCount(1)
|
| + success = self.WaitUntilTranslateComplete()
|
| + # Sometimes the translation fails. Continue clicking until it succeeds.
|
| + if not success:
|
| + self._ClickTranslateUntilSuccess()
|
| + # Uncheck 'Always Translate'
|
| + self.SelectTranslateOption('toggle_always_translate')
|
| + self.PerformActionOnInfobar('dismiss', 0)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue(translate_info['page_translated'])
|
| + self.assertFalse('translate_bar' in translate_info)
|
| + # Reload the tab and confirm that the page has not been translated.
|
| + self.GetBrowserWindow(0).GetTab(0).Reload()
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertFalse(translate_info['page_translated'])
|
| + self.assertTrue('translate_bar' in translate_info)
|
| +
|
| + def testSessionRestore(self):
|
| + """Test that session restore restores the translate infobar and other
|
| + translate settings.
|
| + """
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue('translate_bar' in translate_info)
|
| + self.SelectTranslateOption('toggle_always_translate')
|
| + self._ClickTranslateUntilSuccess()
|
| + self.SetPrefs(pyauto.kRestoreOnStartup, 1)
|
| + self.RestartBrowser(clear_profile=False)
|
| + self.WaitForInfobarCount(1)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue('translate_bar' in translate_info)
|
| + # Sometimes translation fails. We don't really care whether it succeededs,
|
| + # just that a translation was attempted.
|
| + self.assertNotEqual(self.before_translate,
|
| + translate_info['translate_bar']['bar_state'])
|
| +
|
| + def testGoBackAndForwardToTranslatePage(self):
|
| + """Tests that translate bar re-appears after backward and forward
|
| + navigation to a page that can be translated.
|
| + """
|
| + no_trans_url = self._GetDefaultEnglishURL()
|
| + trans_url = self._GetDefaultSpanishURL()
|
| + self._NavigateAndWaitForBar(trans_url)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue('translate_bar' in translate_info)
|
| + self.NavigateToURL(no_trans_url)
|
| + self.WaitForInfobarCount(0)
|
| + self.assertFalse('translate_bar' in self.GetTranslateInfo())
|
| + # Go back to the page that should be translated and assert that the
|
| + # translate bar re-appears.
|
| + self.GetBrowserWindow(0).GetTab(0).GoBack()
|
| + self.WaitForInfobarCount(1)
|
| + self.assertTrue('translate_bar' in self.GetTranslateInfo())
|
| +
|
| + # Now test going forward.
|
| + self.NavigateToURL(no_trans_url)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertFalse('translate_bar' in translate_info)
|
| + self._AssertTranslateWorks(trans_url, self.spanish)
|
| + self.GetBrowserWindow(0).GetTab(0).GoBack()
|
| + self.WaitForInfobarCount(0)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertFalse('translate_bar' in translate_info)
|
| + self.GetBrowserWindow(0).GetTab(0).GoForward()
|
| + self.WaitForInfobarCount(1)
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue(translate_info['can_translate_page'])
|
| + self.assertTrue('translate_bar' in translate_info)
|
| +
|
| + def testForCrashedTab(self):
|
| + """Tests that translate bar is dimissed if the renderer crashes."""
|
| + crash_url = 'about:crash'
|
| + self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
|
| + translate_info = self.GetTranslateInfo()
|
| + self.assertTrue('translate_bar' in translate_info)
|
| + self.NavigateToURL(crash_url)
|
| + self.WaitForInfobarCount(0)
|
| + self.assertFalse('translate_bar' in self.GetTranslateInfo())
|
| +
|
| + def testTranslatePrefs(self):
|
| + """Test the Prefs:Translate option."""
|
| + # Assert defaults first.
|
| + self.assertTrue(self.GetPrefsInfo().Prefs(pyauto.kEnableTranslate))
|
| + # Uncheck.
|
| + self.SetPrefs(pyauto.kEnableTranslate, False)
|
| + self.NavigateToURL(self._GetDefaultSpanishURL())
|
| + self.assertFalse('translate_bar' in self.GetTranslateInfo())
|
| + # Restart the browser and assert the translate preference stays.
|
| + self.RestartBrowser(clear_profile=False)
|
| + self.assertFalse(self.GetPrefsInfo().Prefs(pyauto.kEnableTranslate))
|
| + self.NavigateToURL(self._GetDefaultSpanishURL())
|
| + self.assertFalse('translate_bar' in self.GetTranslateInfo())
|
| +
|
| + def testSeveralLanguages(self):
|
| + """Verify translation for several languages.
|
| +
|
| + This assumes that there is a directory of directories in the data dir.
|
| + The directory is called 'translate', and within that directory there are
|
| + subdirectories for each language code. Ex. a subdirectory 'es' with Spanish
|
| + html files.
|
| + """
|
| + corpora_path = os.path.join(self.DataDir(), 'translate')
|
| + corp_dir = glob.glob(os.path.join(corpora_path, '??')) + \
|
| + glob.glob(os.path.join(corpora_path, '??-??'))
|
| +
|
| + for language in corp_dir:
|
| + files = glob.glob(os.path.join(language, '*.html*'))
|
| + lang_code = os.path.basename(language)
|
| + logging.debug('Starting language %s' % lang_code)
|
| + # Translate each html file in the language directory.
|
| + for lang_file in files:
|
| + logging.debug('Starting file %s' % lang_file)
|
| + lang_file = self.GetFileURLForPath(lang_file)
|
| + self._AssertTranslateWorks(lang_file, lang_code)
|
| +
|
|
|
| if __name__ == '__main__':
|
| pyauto_functional.Main()
|
|
|