summaryrefslogtreecommitdiff
path: root/systrace/catapult/telemetry/telemetry/internal/backends/chrome_inspector/devtools_client_backend_unittest.py
blob: 3a234fbab7e7d92f7fdb12787f7ebadc00570fad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Copyright 2014 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.

from telemetry import decorators
from telemetry.testing import browser_test_case
from telemetry.timeline import model
from telemetry.timeline import trace_data
from telemetry.timeline import tracing_config


class DevToolsClientBackendTest(browser_test_case.BrowserTestCase):
  @property
  def _browser_backend(self):
    return self._browser._browser_backend

  @property
  def _devtools_client(self):
    return self._browser_backend.devtools_client

  def testGetChromeBranchNumber(self):
    branch_num = self._devtools_client.GetChromeBranchNumber()
    self.assertIsInstance(branch_num, int)
    self.assertGreater(branch_num, 0)

  def testIsAlive(self):
    self.assertTrue(self._devtools_client.IsAlive())

  # https://github.com/catapult-project/catapult/issues/3099 (Android)
  # crbug.com/483212 (CrOS)
  @decorators.Enabled('has tabs')
  @decorators.Disabled('android', 'chromeos')
  def testGetUpdatedInspectableContexts(self):
    self._browser.tabs.New()
    c1 = self._devtools_client.GetUpdatedInspectableContexts()
    self.assertEqual(len(c1.contexts), 2)
    backends1 = [c1.GetInspectorBackend(c['id']) for c in c1.contexts]
    tabs1 = list(self._browser.tabs)

    c2 = self._devtools_client.GetUpdatedInspectableContexts()
    self.assertEqual(len(c2.contexts), 2)
    backends2 = [c2.GetInspectorBackend(c['id']) for c in c2.contexts]
    tabs2 = list(self._browser.tabs)
    self.assertEqual(backends2, backends1)
    self.assertEqual(tabs2, tabs1)

    self._browser.tabs.New()
    c3 = self._devtools_client.GetUpdatedInspectableContexts()
    self.assertEqual(len(c3.contexts), 3)
    backends3 = [c3.GetInspectorBackend(c['id']) for c in c3.contexts]
    tabs3 = list(self._browser.tabs)
    self.assertEqual(backends3[1], backends1[0])
    self.assertEqual(backends3[2], backends1[1])
    self.assertEqual(tabs3[0], tabs1[0])
    self.assertEqual(tabs3[1], tabs1[1])

    self._browser.tabs[1].Close()
    c4 = self._devtools_client.GetUpdatedInspectableContexts()
    self.assertEqual(len(c4.contexts), 2)
    backends4 = [c4.GetInspectorBackend(c['id']) for c in c4.contexts]
    tabs4 = list(self._browser.tabs)
    self.assertEqual(backends4[0], backends3[0])
    self.assertEqual(backends4[1], backends3[1])
    self.assertEqual(tabs4[0], tabs3[0])
    self.assertEqual(tabs4[1], tabs3[2])

  # https://github.com/catapult-project/catapult/issues/3099 (Android)
  # crbug.com/483212 (CrOS)
  @decorators.Disabled('android', 'chromeos')
  def testGetUpdatedInspectableContextsUpdateContextsData(self):
    c1 = self._devtools_client.GetUpdatedInspectableContexts()
    self.assertEqual(len(c1.contexts), 1)
    self.assertEqual(c1.contexts[0]['url'], 'about:blank')

    context_id = c1.contexts[0]['id']
    backend = c1.GetInspectorBackend(context_id)
    backend.Navigate(self.UrlOfUnittestFile('blank.html'), None, 10)
    c2 = self._devtools_client.GetUpdatedInspectableContexts()
    self.assertEqual(len(c2.contexts), 1)
    self.assertTrue('blank.html' in c2.contexts[0]['url'])
    self.assertEqual(c2.GetInspectorBackend(context_id), backend)

  def testTracing(self):
    devtools_client = self._devtools_client
    if not devtools_client.IsChromeTracingSupported():
      self.skipTest('Browser does not support tracing, skipping test.')

    # Start Chrome tracing.
    config = tracing_config.TracingConfig()
    config.enable_chrome_trace = True
    devtools_client.StartChromeTracing(config)

    # Stop Chrome tracing and check that the resulting data is valid.
    builder = trace_data.TraceDataBuilder()
    devtools_client.StopChromeTracing()
    devtools_client.CollectChromeTracingData(builder)
    model.TimelineModel(builder.AsData())