Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / browser_unittest.py
index f1c1b4b..512bd42 100644 (file)
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Copyright 2012 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
 import logging
-import unittest
 
-from telemetry import test
-from telemetry.core import browser_finder
+from telemetry import benchmark
 from telemetry.core import gpu_device
 from telemetry.core import gpu_info
 from telemetry.core import system_info
-from telemetry.core import util
-from telemetry.unittest import options_for_unittests
+from telemetry.core.platform import tracing_category_filter
+from telemetry.core.platform import tracing_options
+from telemetry.unittest import browser_test_case
 
 
-class BrowserTest(unittest.TestCase):
-  def setUp(self):
-    self._browser = None
-
-  def CreateBrowser(self,
-                    extra_browser_args=None,
-                    profile_type=None):
-    assert not self._browser
-
-    options = options_for_unittests.GetCopy()
-
-    if profile_type:
-      # TODO(jeremy): crbug.com/243912 profiles are only implemented on
-      # Desktop.
-      is_running_on_desktop = not (
-        options.browser_type.startswith('android') or
-        options.browser_type.startswith('cros'))
-      if not is_running_on_desktop:
-        logging.warn("Desktop-only test, skipping.")
-        return None
-      options.browser_options.profile_type = profile_type
-
-    if extra_browser_args:
-      options.AppendExtraBrowserArgs(extra_browser_args)
-
-    browser_to_create = browser_finder.FindBrowser(options)
-    if not browser_to_create:
-      raise Exception('No browser found, cannot continue test.')
-    self._browser = browser_to_create.Create()
-    self._browser.Start()
-
-    self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
-
-    return self._browser
-
-  def tearDown(self):
-    if self._browser:
-      self._browser.Close()
-
+class BrowserTest(browser_test_case.BrowserTestCase):
   def testBrowserCreation(self):
-    b = self.CreateBrowser()
-    self.assertEquals(1, len(b.tabs))
+    self.assertEquals(1, len(self._browser.tabs))
 
     # Different browsers boot up to different things.
-    assert b.tabs[0].url
-
-  def testCommandLineOverriding(self):
-    # This test starts the browser with --user-agent=telemetry. This tests
-    # whether the user agent is then set.
-    flag1 = '--user-agent=telemetry'
-    b = self.CreateBrowser(extra_browser_args=[flag1])
-    t = b.tabs[0]
-    t.Navigate(b.http_server.UrlOf('blank.html'))
-    t.WaitForDocumentReadyStateToBeInteractiveOrBetter()
-    self.assertEquals(t.EvaluateJavaScript('navigator.userAgent'),
-                      'telemetry')
+    assert self._browser.tabs[0].url
 
   def testVersionDetection(self):
-    b = self.CreateBrowser()
-    v = b._browser_backend._inspector_protocol_version # pylint: disable=W0212
-    self.assertTrue(v > 0)
-
-    v = b._browser_backend.chrome_branch_number # pylint: disable=W0212
+    # pylint: disable=W0212
+    v = self._browser._browser_backend.chrome_branch_number
     self.assertTrue(v > 0)
 
+  @benchmark.Enabled('has tabs')
   def testNewCloseTab(self):
-    b = self.CreateBrowser()
-    if not b.supports_tab_control:
-      logging.warning('Browser does not support tab control, skipping test.')
-      return
-    existing_tab = b.tabs[0]
-    self.assertEquals(1, len(b.tabs))
+    existing_tab = self._browser.tabs[0]
+    self.assertEquals(1, len(self._browser.tabs))
     existing_tab_url = existing_tab.url
 
-    new_tab = b.tabs.New()
-    self.assertEquals(2, len(b.tabs))
+    new_tab = self._browser.tabs.New()
+    self.assertEquals(2, len(self._browser.tabs))
     self.assertEquals(existing_tab.url, existing_tab_url)
     self.assertEquals(new_tab.url, 'about:blank')
 
     new_tab.Close()
-    self.assertEquals(1, len(b.tabs))
+    self.assertEquals(1, len(self._browser.tabs))
     self.assertEquals(existing_tab.url, existing_tab_url)
 
   def testMultipleTabCalls(self):
-    b = self.CreateBrowser()
-    b.tabs[0].Navigate(b.http_server.UrlOf('blank.html'))
-    b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
+    self._browser.tabs[0].Navigate(self.UrlOfUnittestFile('blank.html'))
+    self._browser.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
 
   def testTabCallByReference(self):
-    b = self.CreateBrowser()
-    tab = b.tabs[0]
-    tab.Navigate(b.http_server.UrlOf('blank.html'))
-    b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
+    tab = self._browser.tabs[0]
+    tab.Navigate(self.UrlOfUnittestFile('blank.html'))
+    self._browser.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
 
-  # Test flaky on windows: http://crbug.com/321527
-  @test.Disabled('win')
+  @benchmark.Enabled('has tabs')
+  @benchmark.Disabled('win')  # crbug.com/321527
   def testCloseReferencedTab(self):
-    b = self.CreateBrowser()
-    if not b.supports_tab_control:
-      logging.warning('Browser does not support tab control, skipping test.')
-      return
-    b.tabs.New()
-    tab = b.tabs[0]
-    tab.Navigate(b.http_server.UrlOf('blank.html'))
+    self._browser.tabs.New()
+    tab = self._browser.tabs[0]
+    tab.Navigate(self.UrlOfUnittestFile('blank.html'))
     tab.Close()
-    self.assertEquals(1, len(b.tabs))
+    self.assertEquals(1, len(self._browser.tabs))
 
+  @benchmark.Enabled('has tabs')
   def testForegroundTab(self):
-    b = self.CreateBrowser()
-    if not b.supports_tab_control:
-      logging.warning('Browser does not support tab control, skipping test.')
-      return
     # Should be only one tab at this stage, so that must be the foreground tab
-    original_tab = b.tabs[0]
-    self.assertEqual(b.foreground_tab, original_tab)
-    new_tab = b.tabs.New()
+    original_tab = self._browser.tabs[0]
+    self.assertEqual(self._browser.foreground_tab, original_tab)
+    new_tab = self._browser.tabs.New()
     # New tab shouls be foreground tab
-    self.assertEqual(b.foreground_tab, new_tab)
+    self.assertEqual(self._browser.foreground_tab, new_tab)
     # Make sure that activating the background tab makes it the foreground tab
     original_tab.Activate()
-    self.assertEqual(b.foreground_tab, original_tab)
+    self.assertEqual(self._browser.foreground_tab, original_tab)
     # Closing the current foreground tab should switch the foreground tab to the
     # other tab
     original_tab.Close()
-    self.assertEqual(b.foreground_tab, new_tab)
-
-  def testDirtyProfileCreation(self):
-    b = self.CreateBrowser(profile_type = 'small_profile')
-
-    # TODO(jeremy): crbug.com/243912 profiles are only implemented on Desktop
-    if not b:
-      return
-
-    self.assertEquals(1, len(b.tabs))
+    self.assertEqual(self._browser.foreground_tab, new_tab)
 
   def testGetSystemInfo(self):
-    b = self.CreateBrowser()
-    if not b.supports_system_info:
+    if not self._browser.supports_system_info:
       logging.warning(
           'Browser does not support getting system info, skipping test.')
       return
 
-    info = b.GetSystemInfo()
+    info = self._browser.GetSystemInfo()
 
     self.assertTrue(isinstance(info, system_info.SystemInfo))
     self.assertTrue(hasattr(info, 'model_name'))
@@ -167,6 +91,53 @@ class BrowserTest(unittest.TestCase):
     for g in info.gpu.devices:
       self.assertTrue(isinstance(g, gpu_device.GPUDevice))
 
+  def testGetSystemInfoNotCachedObject(self):
+    if not self._browser.supports_system_info:
+      logging.warning(
+          'Browser does not support getting system info, skipping test.')
+      return
+
+    info_a = self._browser.GetSystemInfo()
+    info_b = self._browser.GetSystemInfo()
+    self.assertFalse(info_a is info_b)
+
   def testGetSystemTotalMemory(self):
-    b = self.CreateBrowser()
-    self.assertTrue(b.memory_stats['SystemTotalPhysicalMemory'] > 0)
+    self.assertTrue(self._browser.memory_stats['SystemTotalPhysicalMemory'] > 0)
+
+  @benchmark.Disabled('chromeos') # crbug.com/412713.
+  def testIsTracingRunning(self):
+    tracing_controller = self._browser.platform.tracing_controller
+    if not tracing_controller.IsChromeTracingSupported(self._browser):
+      return
+    self.assertFalse(tracing_controller.is_tracing_running)
+    options = tracing_options.TracingOptions()
+    options.enable_chrome_trace = True
+    category_filter = tracing_category_filter.TracingCategoryFilter()
+    tracing_controller.Start(options, category_filter)
+    self.assertTrue(tracing_controller.is_tracing_running)
+    tracing_controller.Stop()
+    self.assertFalse(tracing_controller.is_tracing_running)
+
+
+class CommandLineBrowserTest(browser_test_case.BrowserTestCase):
+  @classmethod
+  def CustomizeBrowserOptions(cls, options):
+    options.AppendExtraBrowserArgs('--user-agent=telemetry')
+
+  def testCommandLineOverriding(self):
+    # This test starts the browser with --user-agent=telemetry. This tests
+    # whether the user agent is then set.
+    t = self._browser.tabs[0]
+    t.Navigate(self.UrlOfUnittestFile('blank.html'))
+    t.WaitForDocumentReadyStateToBeInteractiveOrBetter()
+    self.assertEquals(t.EvaluateJavaScript('navigator.userAgent'),
+                      'telemetry')
+
+class DirtyProfileBrowserTest(browser_test_case.BrowserTestCase):
+  @classmethod
+  def CustomizeBrowserOptions(cls, options):
+    options.profile_type = 'small_profile'
+
+  @benchmark.Disabled('chromeos')  # crbug.com/243912
+  def testDirtyProfileCreation(self):
+    self.assertEquals(1, len(self._browser.tabs))