File: //snap/google-cloud-cli/396/lib/third_party/dulwich/dulwich_test.py
#
# Copyright 2010 Google Inc. All Rights Reserved.
"""Tests for Dulwich.
This module is a stub that runs the builtin Dulwich test suite.
"""
from __future__ import print_function
import sys
import types
import unittest
from absl import flags
from dulwich import tests
from dulwich.tests import utils
if sys.version_info.major >= 3:
  from importlib import reload
# Hold on to the original unittest.TestCase. It is overwritten as a side effect
# of importing googletest, which breaks the default test runner.
_real_testcase = unittest.TestCase
from google3.devtools.git.common import (  # pylint: disable-msg=C6204
    git_test_util)
# We need googletest to define FLAGS.test_tmpdir
from google3.testing.pybase import googletest  # pylint: disable-msg=W0611
unittest.TestCase = _real_testcase
FLAGS = flags.FLAGS
def NonSkippingExtFunctestBuilder(method, func):
  """Alternate implementation of dulwich.tests.utils.ext_functest_builder.
  Dulwich skips extension tests for missing C extensions, but we need them in
  google3. This implementation fails fast if the C extensions are not found.
  Args:
    method: The method to run.
    func: The function implementation to pass to method.
  Returns:
    A test method to run the given C extension function.
  """
  def DoTest(self):
    self.assertTrue(isinstance(func, types.BuiltinFunctionType),
                    'C extension for %s not found' % func.__name__)
    method(self, func)
  return DoTest
# Replace Dulwich's ext_functest_builder with our implementation. This works
# because the test modules aren't loaded until test_suite() is called below.
utils.ext_functest_builder = NonSkippingExtFunctestBuilder
if __name__ == '__main__':
  print('ENCODING: ' + sys.getfilesystemencoding(), file=sys.stderr)
  reload(sys)
  sys.getfilesystemencoding = lambda: 'ascii'
  print('ENCODING: ' + sys.getfilesystemencoding(), file=sys.stderr)
  googletest.ThisTestIsUsefulWithoutCallingMain()
  result = unittest.TextTestRunner().run(tests.test_suite())
  sys.exit(not result.wasSuccessful())