#
# 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())