__version__ = "$Revision: 10687 $"

from unittest import TestResult

from utext.asserts import *


class TestTestRunnerMixin(object):

    """A test runner mixin class for testing unittests recursively."""

    def __init__(self):
        self._result = TestResult()

    def runTest(self, test):
        "Run the given test case or test suite."
        test(self._result)

    def assert_test_runs(self, successful, errors, failures):
        "Assert the number of successful/error/failure tests."
        assert_equals(errors, len(self._result.errors),
                "wrong number of errors: %d != %d" % \
                        (errors, len(self._result.errors)))
        assert_equals(failures, len(self._result.failures),
                "wrong number of failures: %d != %d" % \
                        (failures, len(self._result.failures)))
        total_expected = successful+errors+failures
        assert_equals(total_expected, self._result.testsRun,
                "wrong number of tests run: %d, expected: %d" % \
                        (self._result.testsRun, total_expected))
