- add sources.
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / tab_unittest.py
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import logging
6
7 from telemetry.core import util
8 from telemetry.core import exceptions
9 from telemetry.unittest import tab_test_case
10
11
12 def _IsDocumentVisible(tab):
13   state = tab.EvaluateJavaScript('document.webkitVisibilityState')
14   # TODO(dtu): Remove when crbug.com/166243 is fixed.
15   tab.Disconnect()
16   return state == 'visible'
17
18
19 class TabTest(tab_test_case.TabTestCase):
20   def testNavigateAndWaitToForCompleteState(self):
21     self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
22     self._tab.Navigate(self._browser.http_server.UrlOf('blank.html'))
23     self._tab.WaitForDocumentReadyStateToBeComplete()
24
25   def testNavigateAndWaitToForInteractiveState(self):
26     self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
27     self._tab.Navigate(self._browser.http_server.UrlOf('blank.html'))
28     self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
29
30   def testTabBrowserIsRightBrowser(self):
31     self.assertEquals(self._tab.browser, self._browser)
32
33   def testRendererCrash(self):
34     self.assertRaises(exceptions.TabCrashException,
35                       lambda: self._tab.Navigate('chrome://crash',
36                                                  timeout=5))
37
38   def testActivateTab(self):
39     if not self._browser.supports_tab_control:
40       logging.warning('Browser does not support tab control, skipping test.')
41       return
42
43     self.assertTrue(_IsDocumentVisible(self._tab))
44     new_tab = self._browser.tabs.New()
45     new_tab.Navigate('about:blank')
46     util.WaitFor(lambda: _IsDocumentVisible(new_tab), timeout=5)
47     self.assertFalse(_IsDocumentVisible(self._tab))
48     self._tab.Activate()
49     util.WaitFor(lambda: _IsDocumentVisible(self._tab), timeout=5)
50     self.assertFalse(_IsDocumentVisible(new_tab))
51
52
53 class GpuTabTest(tab_test_case.TabTestCase):
54   def setUp(self):
55     self._extra_browser_args = ['--enable-gpu-benchmarking']
56     super(GpuTabTest, self).setUp()
57
58   def testScreenshot(self):
59     if not self._tab.screenshot_supported:
60       logging.warning('Browser does not support screenshots, skipping test.')
61       return
62
63     self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
64     self._tab.Navigate(
65       self._browser.http_server.UrlOf('green_rect.html'))
66     self._tab.WaitForDocumentReadyStateToBeComplete()
67     pixel_ratio = self._tab.EvaluateJavaScript('window.devicePixelRatio || 1')
68
69     screenshot = self._tab.Screenshot(5)
70     assert screenshot
71     screenshot.GetPixelColor(0 * pixel_ratio, 0 * pixel_ratio).AssertIsRGB(
72         0, 255, 0, tolerance=2)
73     screenshot.GetPixelColor(31 * pixel_ratio, 31 * pixel_ratio).AssertIsRGB(
74         0, 255, 0, tolerance=2)
75     screenshot.GetPixelColor(32 * pixel_ratio, 32 * pixel_ratio).AssertIsRGB(
76         255, 255, 255, tolerance=2)
77
78   def testScreenshotSync(self):
79     if not self._tab.screenshot_supported:
80       logging.warning('Browser does not support screenshots, skipping test.')
81       return
82
83     self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
84     self._tab.Navigate(
85       self._browser.http_server.UrlOf('screenshot_sync.html'))
86     self._tab.WaitForDocumentReadyStateToBeComplete()
87
88     def IsTestComplete():
89       return self._tab.EvaluateJavaScript('window.__testComplete')
90     util.WaitFor(IsTestComplete, 120)
91
92     message = self._tab.EvaluateJavaScript('window.__testMessage')
93     if message:
94       logging.error(message)
95     assert self._tab.EvaluateJavaScript('window.__testSuccess')