text: # Copyright (c) 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.
  
  """Base class representing GTest test packages."""
  
  import logging
  
  
  class TestPackage(object):
  
    """A helper base class for both APK and stand-alone executables.
  
    Args:
      suite_name: Name of the test suite (e.g. base_unittests).
    """
    def __init__(self, suite_name):
      self.suite_name = suite_name
  
    def ClearApplicationState(self, adb):
      """Clears the application state.
  
      Args:
        adb: Instance of AndroidCommands.
      """
      raise NotImplementedError('Method must be overriden.')
  
    def CreateCommandLineFileOnDevice(self, adb, test_filter, test_arguments):
      """Creates a test runner script and pushes to the device.
  
      Args:
        adb: Instance of AndroidCommands.
        test_filter: A test_filter flag.
        test_arguments: Additional arguments to pass to the test binary.
      """
      raise NotImplementedError('Method must be overriden.')
  
    def GetAllTests(self, adb):
      """Returns a list of all tests available in the test suite.
  
      Args:
        adb: Instance of AndroidCommands.
      """
      raise NotImplementedError('Method must be overriden.')
  
    def GetGTestReturnCode(self, adb):
      return None
  
    def SpawnTestProcess(self, adb):
      """Spawn the test process.
  
      Args:
        adb: Instance of AndroidCommands.
  
      Returns:
        An instance of pexpect spawn class.
      """
      raise NotImplementedError('Method must be overriden.')
  
    def Install(self, adb):
      """Install the test package to the device.
  
      Args:
        adb: Instance of AndroidCommands.
      """
      raise NotImplementedError('Method must be overriden.')
  
    def _ParseGTestListTests(self, raw_list):
      """Parses a raw test list as provided by --gtest_list_tests.
  
      Args:
        raw_list: The raw test listing with the following format:
  
        IPCChannelTest.
          SendMessageInChannelConnected
        IPCSyncChannelTest.
          Simple
          DISABLED_SendWithTimeoutMixedOKAndTimeout
  
      Returns:
        A list of all tests. For the above raw listing:
  
        [IPCChannelTest.SendMessageInChannelConnected, IPCSyncChannelTest.Simple,
         IPCSyncChannelTest.DISABLED_SendWithTimeoutMixedOKAndTimeout]
      """
      ret = []
      current = ''
      for test in raw_list:
        if not test:
          continue
        if test[0] != ' ' and not test.endswith('.'):
          # Ignore any lines with unexpected format.
          continue
        if test[0] != ' ' and test.endswith('.'):
          current = test
          continue
        if 'YOU HAVE' in test:
          break
        test_name = test[2:]
        ret += [current + test_name]
      return ret
  