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() |