- add sources.
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / browser_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 import logging
5 import unittest
6
7 from telemetry.core import browser_finder
8 from telemetry.core import gpu_device
9 from telemetry.core import gpu_info
10 from telemetry.core import system_info
11 from telemetry.core import util
12 from telemetry.unittest import options_for_unittests
13
14 class BrowserTest(unittest.TestCase):
15   def setUp(self):
16     self._browser = None
17
18   def CreateBrowser(self,
19                     extra_browser_args=None,
20                     profile_type=None):
21     assert not self._browser
22
23     options = options_for_unittests.GetCopy()
24
25     if profile_type:
26       # TODO(jeremy): crbug.com/243912 profiles are only implemented on
27       # Desktop.
28       is_running_on_desktop = not (
29         options.browser_type.startswith('android') or
30         options.browser_type.startswith('cros'))
31       if not is_running_on_desktop:
32         logging.warn("Desktop-only test, skipping.")
33         return None
34       options.browser_options.profile_type = profile_type
35
36     if extra_browser_args:
37       options.AppendExtraBrowserArgs(extra_browser_args)
38
39     browser_to_create = browser_finder.FindBrowser(options)
40     if not browser_to_create:
41       raise Exception('No browser found, cannot continue test.')
42     self._browser = browser_to_create.Create()
43     self._browser.Start()
44
45     self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
46
47     return self._browser
48
49   def tearDown(self):
50     if self._browser:
51       self._browser.Close()
52
53   def testBrowserCreation(self):
54     b = self.CreateBrowser()
55     self.assertEquals(1, len(b.tabs))
56
57     # Different browsers boot up to different things.
58     assert b.tabs[0].url
59
60   def testCommandLineOverriding(self):
61     # This test starts the browser with --user-agent=telemetry. This tests
62     # whether the user agent is then set.
63     flag1 = '--user-agent=telemetry'
64     b = self.CreateBrowser(extra_browser_args=[flag1])
65     t = b.tabs[0]
66     t.Navigate(b.http_server.UrlOf('blank.html'))
67     t.WaitForDocumentReadyStateToBeInteractiveOrBetter()
68     self.assertEquals(t.EvaluateJavaScript('navigator.userAgent'),
69                       'telemetry')
70
71   def testVersionDetection(self):
72     b = self.CreateBrowser()
73     v = b._browser_backend._inspector_protocol_version # pylint: disable=W0212
74     self.assertTrue(v > 0)
75
76     v = b._browser_backend.chrome_branch_number # pylint: disable=W0212
77     self.assertTrue(v > 0)
78
79   def testNewCloseTab(self):
80     b = self.CreateBrowser()
81     if not b.supports_tab_control:
82       logging.warning('Browser does not support tab control, skipping test.')
83       return
84     existing_tab = b.tabs[0]
85     self.assertEquals(1, len(b.tabs))
86     existing_tab_url = existing_tab.url
87
88     new_tab = b.tabs.New()
89     self.assertEquals(2, len(b.tabs))
90     self.assertEquals(existing_tab.url, existing_tab_url)
91     self.assertEquals(new_tab.url, 'about:blank')
92
93     new_tab.Close()
94     self.assertEquals(1, len(b.tabs))
95     self.assertEquals(existing_tab.url, existing_tab_url)
96
97   def testMultipleTabCalls(self):
98     b = self.CreateBrowser()
99     b.tabs[0].Navigate(b.http_server.UrlOf('blank.html'))
100     b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
101
102   def testTabCallByReference(self):
103     b = self.CreateBrowser()
104     tab = b.tabs[0]
105     tab.Navigate(b.http_server.UrlOf('blank.html'))
106     b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
107
108   def testCloseReferencedTab(self):
109     b = self.CreateBrowser()
110     if not b.supports_tab_control:
111       logging.warning('Browser does not support tab control, skipping test.')
112       return
113     b.tabs.New()
114     tab = b.tabs[0]
115     tab.Navigate(b.http_server.UrlOf('blank.html'))
116     tab.Close()
117     self.assertEquals(1, len(b.tabs))
118
119   def testDirtyProfileCreation(self):
120     b = self.CreateBrowser(profile_type = 'small_profile')
121
122     # TODO(jeremy): crbug.com/243912 profiles are only implemented on Desktop
123     if not b:
124       return
125
126     self.assertEquals(1, len(b.tabs))
127
128   def testGetSystemInfo(self):
129     b = self.CreateBrowser()
130     if not b.supports_system_info:
131       logging.warning(
132           'Browser does not support getting system info, skipping test.')
133       return
134
135     info = b.GetSystemInfo()
136
137     self.assertTrue(isinstance(info, system_info.SystemInfo))
138     self.assertTrue(hasattr(info, 'model_name'))
139     self.assertTrue(hasattr(info, 'gpu'))
140     self.assertTrue(isinstance(info.gpu, gpu_info.GPUInfo))
141     self.assertTrue(hasattr(info.gpu, 'devices'))
142     self.assertTrue(len(info.gpu.devices) > 0)
143     for g in info.gpu.devices:
144       self.assertTrue(isinstance(g, gpu_device.GPUDevice))
145