old_contents: # Copyright 2015 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.core import exceptions
  from telemetry.unittest_util import tab_test_case
  
  
  class TabListBackendTest(tab_test_case.TabTestCase):
    def testTabIdMatchesContextId(self):
      # Ensure that there are two tabs.
      while len(self.tabs) < 2:
        self.tabs.New()
  
      # Check that the tab.id matches context_id.
      tabs = []
      for context_id in self.tabs:
        tab = self.tabs.GetTabById(context_id)
        self.assertEquals(tab.id, context_id)
        tabs.append(self.tabs.GetTabById(context_id))
  
    def testTabIdStableAfterTabCrash(self):
      # Ensure that there are two tabs.
      while len(self.tabs) < 2:
        self.tabs.New()
  
      tabs = []
      for context_id in self.tabs:
        tabs.append(self.tabs.GetTabById(context_id))
  
      # Crash the first tab.
      self.assertRaises(exceptions.DevtoolsTargetCrashException,
          lambda: tabs[0].Navigate('chrome://crash'))
  
      # Fetching the second tab by id should still work. Fetching the first tab
      # should raise an exception.
      self.assertEquals(tabs[1], self.tabs.GetTabById(tabs[1].id))
      self.assertRaises(KeyError, lambda: self.tabs.GetTabById(tabs[0].id))
  
new_contents: # Copyright 2015 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.core import exceptions
  from telemetry.unittest_util import tab_test_case
  
  
  class TabListBackendTest(tab_test_case.TabTestCase):
    @decorators.Enabled('has tabs')
    def testTabIdMatchesContextId(self):
      # Ensure that there are two tabs.
      while len(self.tabs) < 2:
        self.tabs.New()
  
      # Check that the tab.id matches context_id.
      tabs = []
      for context_id in self.tabs:
        tab = self.tabs.GetTabById(context_id)
        self.assertEquals(tab.id, context_id)
        tabs.append(self.tabs.GetTabById(context_id))
  
    @decorators.Enabled('has tabs')
    def testTabIdStableAfterTabCrash(self):
      # Ensure that there are two tabs.
      while len(self.tabs) < 2:
        self.tabs.New()
  
      tabs = []
      for context_id in self.tabs:
        tabs.append(self.tabs.GetTabById(context_id))
  
      # Crash the first tab.
      self.assertRaises(exceptions.DevtoolsTargetCrashException,
          lambda: tabs[0].Navigate('chrome://crash'))
  
      # Fetching the second tab by id should still work. Fetching the first tab
      # should raise an exception.
      self.assertEquals(tabs[1], self.tabs.GetTabById(tabs[1].id))
      self.assertRaises(KeyError, lambda: self.tabs.GetTabById(tabs[0].id))
  
subject: Fix flaky TabListBackendTest