diff options
author | alyssad@chromium.org <alyssad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-05 15:52:59 +0000 |
---|---|---|
committer | alyssad@chromium.org <alyssad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-05 15:52:59 +0000 |
commit | 14a0aacb411040d2a4f60dc27573f0f8b33bc1e6 (patch) | |
tree | fa8337dff4a701c359cfcaf4629a2b410789e35a /chrome/test/functional | |
parent | 166326c6ccd6f6925185967a0786ca58ce81a535 (diff) | |
download | chromium_src-14a0aacb411040d2a4f60dc27573f0f8b33bc1e6.zip chromium_src-14a0aacb411040d2a4f60dc27573f0f8b33bc1e6.tar.gz chromium_src-14a0aacb411040d2a4f60dc27573f0f8b33bc1e6.tar.bz2 |
New translate tests for pyauto.py
This also includes a change to WaitUntilTranslateComplete.
Review URL: http://codereview.chromium.org/3030042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55070 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/functional')
-rw-r--r-- | chrome/test/functional/PYAUTO_TESTS | 4 | ||||
-rw-r--r-- | chrome/test/functional/translate.py | 236 |
2 files changed, 228 insertions, 12 deletions
diff --git a/chrome/test/functional/PYAUTO_TESTS b/chrome/test/functional/PYAUTO_TESTS index e46166c..3e35586 100644 --- a/chrome/test/functional/PYAUTO_TESTS +++ b/chrome/test/functional/PYAUTO_TESTS @@ -41,6 +41,10 @@ 'test_basic.SimpleTest.testCanOpenGoogle', 'themes', 'translate', + # This test fails due to crbug.com/35485 + '-translate.TranslateTest.testTBarNeverVisibleOnErrorPage', + # This test fails due to crbug.com/50706 + '-translate.TranslateTest.testToggleTranslateOption' ], 'win': [ diff --git a/chrome/test/functional/translate.py b/chrome/test/functional/translate.py index 4b7aabb..df3e88c 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() |