# 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.


class TestInstance:
  """A type of test.

  This is expected to handle all logic that is test-type specific but
  independent of the environment or device.

  Examples include:
    - gtests
    - instrumentation tests
  """

  def __init__(self):
    pass

  def TestType(self):
    raise NotImplementedError

  # pylint: disable=no-self-use
  def GetPreferredAbis(self):
    return None

  # pylint: enable=no-self-use

  def SetUp(self):
    raise NotImplementedError

  def TearDown(self):
    raise NotImplementedError

  def __enter__(self):
    self.SetUp()
    return self

  def __exit__(self, _exc_type, _exc_val, _exc_tb):
    self.TearDown()
