summaryrefslogtreecommitdiffstats
path: root/chrome/test/functional
diff options
context:
space:
mode:
authoralyssad@chromium.org <alyssad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-05 15:52:59 +0000
committeralyssad@chromium.org <alyssad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-05 15:52:59 +0000
commit14a0aacb411040d2a4f60dc27573f0f8b33bc1e6 (patch)
treefa8337dff4a701c359cfcaf4629a2b410789e35a /chrome/test/functional
parent166326c6ccd6f6925185967a0786ca58ce81a535 (diff)
downloadchromium_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_TESTS4
-rw-r--r--chrome/test/functional/translate.py236
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()