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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « chrome/test/functional/PYAUTO_TESTS ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import glob
7 import logging
8 import os
9
6 import pyauto_functional # Must be imported before pyauto 10 import pyauto_functional # Must be imported before pyauto
7 import pyauto 11 import pyauto
8 12
9 13
10 class TranslateTest(pyauto.PyUITest): 14 class TranslateTest(pyauto.PyUITest):
11 """Tests that translate works correctly""" 15 """Tests that translate works correctly"""
12 16
13 spanish_google = 'http://www.google.com/webhp?hl=es'
14 spanish = 'es' 17 spanish = 'es'
15 after_translate = 'AFTER_TRANSLATE' 18 after_translate = 'AFTER_TRANSLATE'
16 before_translate = 'BEFORE_TRANSLATE' 19 before_translate = 'BEFORE_TRANSLATE'
17 translating = 'TRANSLATING' 20 translating = 'TRANSLATING'
18 translation_error = 'TRANSLATION_ERROR' 21 translation_error = 'TRANSLATION_ERROR'
19 22
20 def Debug(self): 23 def Debug(self):
21 """ Test method for experimentation. """ 24 """ Test method for experimentation. """
22 import pprint 25 import pprint
23 pp = pprint.PrettyPrinter(indent=2) 26 pp = pprint.PrettyPrinter(indent=2)
24 while True: 27 while True:
25 raw_input('Hit <enter> to dump translate info.. ') 28 raw_input('Hit <enter> to dump translate info.. ')
26 pp.pprint(self.GetTranslateInfo()) 29 pp.pprint(self.GetTranslateInfo())
27 30
31 def _GetURLForDataDirFile(self, filename):
32 """Return the file URL for the given file in the data directory."""
33 return self.GetFileURLForPath(os.path.join(self.DataDir(), filename))
34
35 def _GetDefaultSpanishURL(self):
36 return self._GetURLForDataDirFile(
37 os.path.join('translate', self.spanish, 'google.html'))
38
39 def _GetDefaultEnglishURL(self):
40 return self._GetURLForDataDirFile('title1.html')
41
28 def _NavigateAndWaitForBar(self, url): 42 def _NavigateAndWaitForBar(self, url):
29 self.NavigateToURL(url) 43 self.NavigateToURL(url)
30 self.WaitForInfobarCount(1) 44 self.WaitForInfobarCount(1)
31 45
32 def _ClickTranslateUntilSuccess(self): 46 def _ClickTranslateUntilSuccess(self):
33 """Since the translate can fail due to server error, continue trying until 47 """Since the translate can fail due to server error, continue trying until
34 it is successful or until it has tried too many times.""" 48 it is successful or until it has tried too many times."""
35 max_tries = 10 49 max_tries = 10
36 curr_try = 0 50 curr_try = 0
37 while curr_try < max_tries and not self.ClickTranslateBarTranslate(): 51 while curr_try < max_tries and not self.ClickTranslateBarTranslate():
38 curr_try = curr_try + 1 52 curr_try = curr_try + 1
39 if curr_try == 10: 53 if curr_try == 10:
40 self.fail('Translation failed more than %d times.' % max_tries) 54 self.fail('Translation failed more than %d times.' % max_tries)
41 55
56 def _AssertTranslateWorks(self, url, original_language):
57 """Translate the page at the given URL and assert that the page has been
58 translated.
59 """
60 self._NavigateAndWaitForBar(url)
61 translate_info = self.GetTranslateInfo()
62 self.assertEqual(original_language, translate_info['original_language'])
63 self.assertFalse(translate_info['page_translated'])
64 self.assertTrue(translate_info['can_translate_page'])
65 self.assertTrue('translate_bar' in translate_info)
66 self._ClickTranslateUntilSuccess()
67 translate_info = self.GetTranslateInfo()
68 self.assertTrue(translate_info['can_translate_page'])
69 self.assertTrue('translate_bar' in translate_info)
70 translate_bar = translate_info['translate_bar']
71 self.assertEquals(self.after_translate,
72 translate_info['translate_bar']['bar_state'])
73 self.assertEquals(original_language,
74 translate_bar['original_lang_code'])
75
42 def testTranslate(self): 76 def testTranslate(self):
43 """Tests that a page was translated if the user chooses to translate.""" 77 """Tests that a page was translated if the user chooses to translate."""
44 self._NavigateAndWaitForBar(self.spanish_google) 78 self._AssertTranslateWorks(self._GetDefaultSpanishURL(), self.spanish)
45 self._ClickTranslateUntilSuccess()
46 translate_info = self.GetTranslateInfo()
47 self.assertEqual(self.spanish, translate_info['original_language'])
48 self.assertTrue(translate_info['page_translated'])
49 self.assertTrue(translate_info['can_translate_page'])
50 self.assertTrue('translate_bar' in translate_info)
51 self.assertEquals(self.after_translate,
52 translate_info['translate_bar']['bar_state'])
53 79
54 def testNoTranslate(self): 80 def testNoTranslate(self):
55 """Tests that a page isn't translated if the user declines translate.""" 81 """Tests that a page isn't translated if the user declines translate."""
56 self._NavigateAndWaitForBar(self.spanish_google) 82 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
57 self.PerformActionOnInfobar('dismiss', 0) 83 self.PerformActionOnInfobar('dismiss', 0)
58 translate_info = self.GetTranslateInfo() 84 translate_info = self.GetTranslateInfo()
59 self.assertEqual(self.spanish, translate_info['original_language']) 85 self.assertEqual(self.spanish, translate_info['original_language'])
60 self.assertFalse(translate_info['page_translated']) 86 self.assertFalse(translate_info['page_translated'])
61 self.assertTrue(translate_info['can_translate_page']) 87 self.assertTrue(translate_info['can_translate_page'])
62 # If the user goes to the site again, the infobar should drop down but 88 # If the user goes to the site again, the infobar should drop down but
63 # the page should not be automatically translated. 89 # the page should not be automatically translated.
64 self._NavigateAndWaitForBar(self.spanish_google) 90 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
65 translate_info = self.GetTranslateInfo() 91 translate_info = self.GetTranslateInfo()
66 self.assertFalse(translate_info['page_translated']) 92 self.assertFalse(translate_info['page_translated'])
67 self.assertTrue(translate_info['can_translate_page']) 93 self.assertTrue(translate_info['can_translate_page'])
68 self.assertTrue('translate_bar' in translate_info) 94 self.assertTrue('translate_bar' in translate_info)
69 self.assertEquals(self.before_translate, 95 self.assertEquals(self.before_translate,
70 translate_info['translate_bar']['bar_state']) 96 translate_info['translate_bar']['bar_state'])
71 97
72 def testNeverTranslateLanguage(self): 98 def testNeverTranslateLanguage(self):
73 """Tests that blacklisting a language for translate works.""" 99 """Tests that blacklisting a language for translate works."""
74 self._NavigateAndWaitForBar(self.spanish_google) 100 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
75 self.SelectTranslateOption('never_translate_language') 101 self.SelectTranslateOption('never_translate_language')
76 translate_info = self.GetTranslateInfo() 102 translate_info = self.GetTranslateInfo()
77 self.assertEqual(self.spanish, translate_info['original_language']) 103 self.assertEqual(self.spanish, translate_info['original_language'])
78 self.assertFalse(translate_info['page_translated']) 104 self.assertFalse(translate_info['page_translated'])
79 self.assertFalse(translate_info['can_translate_page']) 105 self.assertFalse(translate_info['can_translate_page'])
80 spanish_wikipedia = 'http://es.wikipedia.org/wiki/Wikipedia:Portada' 106 spanish_wikipedia = 'http://es.wikipedia.org/wiki/Wikipedia:Portada'
81 self.NavigateToURL(spanish_wikipedia) 107 self.NavigateToURL(spanish_wikipedia)
82 translate_info = self.GetTranslateInfo() 108 translate_info = self.GetTranslateInfo()
83 self.assertEqual(self.spanish, translate_info['original_language']) 109 self.assertEqual(self.spanish, translate_info['original_language'])
84 self.assertFalse(translate_info['page_translated']) 110 self.assertFalse(translate_info['page_translated'])
85 self.assertFalse(translate_info['can_translate_page']) 111 self.assertFalse(translate_info['can_translate_page'])
86 112
87 def testAlwaysTranslateLanguage(self): 113 def testAlwaysTranslateLanguage(self):
88 """Tests that the always translate a language option works.""" 114 """Tests that the always translate a language option works."""
89 self._NavigateAndWaitForBar(self.spanish_google) 115 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
90 self.SelectTranslateOption('toggle_always_translate') 116 self.SelectTranslateOption('toggle_always_translate')
91 self._ClickTranslateUntilSuccess() 117 self._ClickTranslateUntilSuccess()
92 translate_info = self.GetTranslateInfo() 118 translate_info = self.GetTranslateInfo()
93 self.assertEquals(self.spanish, translate_info['original_language']) 119 self.assertEquals(self.spanish, translate_info['original_language'])
94 self.assertTrue(translate_info['page_translated']) 120 self.assertTrue(translate_info['page_translated'])
95 self.assertTrue(translate_info['can_translate_page']) 121 self.assertTrue(translate_info['can_translate_page'])
96 self.assertTrue('translate_bar' in translate_info) 122 self.assertTrue('translate_bar' in translate_info)
97 self.assertEquals(self.after_translate, 123 self.assertEquals(self.after_translate,
98 translate_info['translate_bar']['bar_state']) 124 translate_info['translate_bar']['bar_state'])
99 # Go to another spanish site and verify that it is translated. 125 # Go to another spanish site and verify that it is translated.
100 # Note that the 'This page has been translated..." bar will show up. 126 # Note that the 'This page has been translated..." bar will show up.
101 self._NavigateAndWaitForBar( 127 self._NavigateAndWaitForBar(
102 'http://es.wikipedia.org/wiki/Wikipedia:Portada') 128 'http://es.wikipedia.org/wiki/Wikipedia:Portada')
103 translate_info = self.GetTranslateInfo() 129 translate_info = self.GetTranslateInfo()
104 self.assertTrue('translate_bar' in translate_info) 130 self.assertTrue('translate_bar' in translate_info)
105 curr_bar_state = translate_info['translate_bar']['bar_state'] 131 curr_bar_state = translate_info['translate_bar']['bar_state']
106 # We don't care whether the translation has finished, just that it is 132 # We don't care whether the translation has finished, just that it is
107 # trying to translate. 133 # trying to translate.
108 self.assertTrue(curr_bar_state is self.after_translate or 134 self.assertTrue(curr_bar_state is self.after_translate or
109 self.translating or self.translation_error, 135 self.translating or self.translation_error,
110 'Bar state was %s.' % curr_bar_state) 136 'Bar state was %s.' % curr_bar_state)
111 137
112 def testNeverTranslateSite(self): 138 def testNeverTranslateSite(self):
113 """Tests that blacklisting a site for translate works.""" 139 """Tests that blacklisting a site for translate works."""
114 self._NavigateAndWaitForBar(self.spanish_google) 140 spanish_google = 'http://www.google.com/webhp?hl=es'
141 self._NavigateAndWaitForBar(spanish_google)
115 self.SelectTranslateOption('never_translate_site') 142 self.SelectTranslateOption('never_translate_site')
116 translate_info = self.GetTranslateInfo() 143 translate_info = self.GetTranslateInfo()
117 self.assertFalse(translate_info['page_translated']) 144 self.assertFalse(translate_info['page_translated'])
118 self.assertFalse(translate_info['can_translate_page']) 145 self.assertFalse(translate_info['can_translate_page'])
119 french_google = 'http://www.google.com/webhp?hl=fr' 146 french_google = 'http://www.google.com/webhp?hl=fr'
120 # Go to another page in the same site and verify that the page can't be 147 # Go to another page in the same site and verify that the page can't be
121 # translated even though it's in a different language. 148 # translated even though it's in a different language.
122 self.NavigateToURL(french_google) 149 self.NavigateToURL(french_google)
123 translate_info = self.GetTranslateInfo() 150 translate_info = self.GetTranslateInfo()
124 self.assertFalse(translate_info['page_translated']) 151 self.assertFalse(translate_info['page_translated'])
125 self.assertFalse(translate_info['can_translate_page']) 152 self.assertFalse(translate_info['can_translate_page'])
126 153
127 def testRevert(self): 154 def testRevert(self):
128 """Tests that reverting a site to its original language works.""" 155 """Tests that reverting a site to its original language works."""
129 self._NavigateAndWaitForBar(self.spanish_google) 156 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
130 self._ClickTranslateUntilSuccess() 157 self._ClickTranslateUntilSuccess()
131 self.RevertPageTranslation() 158 self.RevertPageTranslation()
132 translate_info = self.GetTranslateInfo() 159 translate_info = self.GetTranslateInfo()
133 self.assertFalse(translate_info['page_translated']) 160 self.assertFalse(translate_info['page_translated'])
134 self.assertTrue(translate_info['can_translate_page']) 161 self.assertTrue(translate_info['can_translate_page'])
135 162
163 def testBarNotVisibleOnSSLErrorPage(self):
164 """Test Translate bar is not visible on SSL error pages."""
165 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
166 translate_info = self.GetTranslateInfo()
167 self.assertTrue('translate_bar' in translate_info)
168 self.assertTrue(translate_info['can_translate_page'])
169 # This page is an ssl error page.
170 self.NavigateToURL('https://www.sourceforge.net')
171 self.WaitForInfobarCount(0)
172 translate_info = self.GetTranslateInfo()
173 self.assertFalse('translate_bar' in translate_info)
174
175 def testBarNotVisibleOnEnglishPage(self):
176 """Test Translate bar is not visible on English pages."""
177 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
178 translate_info = self.GetTranslateInfo()
179 self.assertTrue('translate_bar' in translate_info)
180 self.assertTrue(translate_info['can_translate_page'])
181 # With the translate bar visible in same tab open an English page.
182 self.NavigateToURL(self._GetDefaultEnglishURL())
183 self.WaitForInfobarCount(0)
184 translate_info = self.GetTranslateInfo()
185 self.assertFalse('translate_bar' in translate_info)
186
187 def testTranslateDiffURLs(self):
188 """Test that HTTP, HTTPS, and file urls all get translated."""
189 http_url = 'http://www.google.com/webhp?hl=es'
190 https_url = 'https://www.google.com/webhp?hl=es'
191 file_url = self._GetDefaultSpanishURL()
192 for url in (http_url, https_url, file_url):
193 self._AssertTranslateWorks(url, self.spanish)
194
195 def testNeverTranslateLanguage(self):
196 """Verify no translate bar for blacklisted language."""
197 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
198 self.SelectTranslateOption('never_translate_language')
199 self.assertFalse(self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars'])
200 # Navigate to a page that will show the translate bar, then navigate away.
201 self._NavigateAndWaitForBar(
202 self._GetURLForDataDirFile('french_page.html'))
203 self.NavigateToURL('http://es.wikipedia.org/wiki/Wikipedia:Portada')
204 self.WaitForInfobarCount(0)
205 translate_info = self.GetTranslateInfo()
206 self.assertFalse('translate_bar' in translate_info)
207 self.assertFalse(translate_info['page_translated'])
208 self.assertFalse(translate_info['can_translate_page'])
209
210 def testNotranslateMetaTag(self):
211 """Test "notranslate" meta tag."""
212 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
213 self.NavigateToURL(self._GetURLForDataDirFile(
214 os.path.join('translate', 'notranslate_meta_tag.html')))
215 self.WaitForInfobarCount(0)
216 translate_info = self.GetTranslateInfo()
217 self.assertFalse('translate_bar' in translate_info)
218
219 def testToggleTranslateOption(self):
220 """Test to toggle the 'Always Translate' option."""
221 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
222 # Assert the default.
223 translate_info = self.GetTranslateInfo()
224 self.assertFalse(translate_info['page_translated'])
225 self.assertTrue('translate_bar' in translate_info)
226 # Select 'Always Translate'.
227 self.SelectTranslateOption('toggle_always_translate')
228 self._ClickTranslateUntilSuccess()
229 translate_info = self.GetTranslateInfo()
230 self.assertTrue(translate_info['page_translated'])
231 # Reload the tab and confirm the page was translated.
232 self.GetBrowserWindow(0).GetTab(0).Reload()
233 self.WaitForInfobarCount(1)
234 success = self.WaitUntilTranslateComplete()
235 # Sometimes the translation fails. Continue clicking until it succeeds.
236 if not success:
237 self._ClickTranslateUntilSuccess()
238 # Uncheck 'Always Translate'
239 self.SelectTranslateOption('toggle_always_translate')
240 self.PerformActionOnInfobar('dismiss', 0)
241 translate_info = self.GetTranslateInfo()
242 self.assertTrue(translate_info['page_translated'])
243 self.assertFalse('translate_bar' in translate_info)
244 # Reload the tab and confirm that the page has not been translated.
245 self.GetBrowserWindow(0).GetTab(0).Reload()
246 translate_info = self.GetTranslateInfo()
247 self.assertFalse(translate_info['page_translated'])
248 self.assertTrue('translate_bar' in translate_info)
249
250 def testSessionRestore(self):
251 """Test that session restore restores the translate infobar and other
252 translate settings.
253 """
254 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
255 translate_info = self.GetTranslateInfo()
256 self.assertTrue('translate_bar' in translate_info)
257 self.SelectTranslateOption('toggle_always_translate')
258 self._ClickTranslateUntilSuccess()
259 self.SetPrefs(pyauto.kRestoreOnStartup, 1)
260 self.RestartBrowser(clear_profile=False)
261 self.WaitForInfobarCount(1)
262 translate_info = self.GetTranslateInfo()
263 self.assertTrue('translate_bar' in translate_info)
264 # Sometimes translation fails. We don't really care whether it succeededs,
265 # just that a translation was attempted.
266 self.assertNotEqual(self.before_translate,
267 translate_info['translate_bar']['bar_state'])
268
269 def testGoBackAndForwardToTranslatePage(self):
270 """Tests that translate bar re-appears after backward and forward
271 navigation to a page that can be translated.
272 """
273 no_trans_url = self._GetDefaultEnglishURL()
274 trans_url = self._GetDefaultSpanishURL()
275 self._NavigateAndWaitForBar(trans_url)
276 translate_info = self.GetTranslateInfo()
277 self.assertTrue('translate_bar' in translate_info)
278 self.NavigateToURL(no_trans_url)
279 self.WaitForInfobarCount(0)
280 self.assertFalse('translate_bar' in self.GetTranslateInfo())
281 # Go back to the page that should be translated and assert that the
282 # translate bar re-appears.
283 self.GetBrowserWindow(0).GetTab(0).GoBack()
284 self.WaitForInfobarCount(1)
285 self.assertTrue('translate_bar' in self.GetTranslateInfo())
286
287 # Now test going forward.
288 self.NavigateToURL(no_trans_url)
289 translate_info = self.GetTranslateInfo()
290 self.assertFalse('translate_bar' in translate_info)
291 self._AssertTranslateWorks(trans_url, self.spanish)
292 self.GetBrowserWindow(0).GetTab(0).GoBack()
293 self.WaitForInfobarCount(0)
294 translate_info = self.GetTranslateInfo()
295 self.assertFalse('translate_bar' in translate_info)
296 self.GetBrowserWindow(0).GetTab(0).GoForward()
297 self.WaitForInfobarCount(1)
298 translate_info = self.GetTranslateInfo()
299 self.assertTrue(translate_info['can_translate_page'])
300 self.assertTrue('translate_bar' in translate_info)
301
302 def testForCrashedTab(self):
303 """Tests that translate bar is dimissed if the renderer crashes."""
304 crash_url = 'about:crash'
305 self._NavigateAndWaitForBar(self._GetDefaultSpanishURL())
306 translate_info = self.GetTranslateInfo()
307 self.assertTrue('translate_bar' in translate_info)
308 self.NavigateToURL(crash_url)
309 self.WaitForInfobarCount(0)
310 self.assertFalse('translate_bar' in self.GetTranslateInfo())
311
312 def testTranslatePrefs(self):
313 """Test the Prefs:Translate option."""
314 # Assert defaults first.
315 self.assertTrue(self.GetPrefsInfo().Prefs(pyauto.kEnableTranslate))
316 # Uncheck.
317 self.SetPrefs(pyauto.kEnableTranslate, False)
318 self.NavigateToURL(self._GetDefaultSpanishURL())
319 self.assertFalse('translate_bar' in self.GetTranslateInfo())
320 # Restart the browser and assert the translate preference stays.
321 self.RestartBrowser(clear_profile=False)
322 self.assertFalse(self.GetPrefsInfo().Prefs(pyauto.kEnableTranslate))
323 self.NavigateToURL(self._GetDefaultSpanishURL())
324 self.assertFalse('translate_bar' in self.GetTranslateInfo())
325
326 def testSeveralLanguages(self):
327 """Verify translation for several languages.
328
329 This assumes that there is a directory of directories in the data dir.
330 The directory is called 'translate', and within that directory there are
331 subdirectories for each language code. Ex. a subdirectory 'es' with Spanish
332 html files.
333 """
334 corpora_path = os.path.join(self.DataDir(), 'translate')
335 corp_dir = glob.glob(os.path.join(corpora_path, '??')) + \
336 glob.glob(os.path.join(corpora_path, '??-??'))
337
338 for language in corp_dir:
339 files = glob.glob(os.path.join(language, '*.html*'))
340 lang_code = os.path.basename(language)
341 logging.debug('Starting language %s' % lang_code)
342 # Translate each html file in the language directory.
343 for lang_file in files:
344 logging.debug('Starting file %s' % lang_file)
345 lang_file = self.GetFileURLForPath(lang_file)
346 self._AssertTranslateWorks(lang_file, lang_code)
347
136 348
137 if __name__ == '__main__': 349 if __name__ == '__main__':
138 pyauto_functional.Main() 350 pyauto_functional.Main()
OLDNEW
« 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