Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5781)

Unified Diff: chrome/test/functional/translate.py

Issue 3030042: New translate tests for pyauto.py (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Adding corpora Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/functional/PYAUTO_TESTS ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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()
« no previous file with comments | « chrome/test/functional/PYAUTO_TESTS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698