Commit 2c9a03d4 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #23707 -- Prevented discovery of duplicated tests

parent 92269b7b
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ def reorder_suite(suite, classes):

def partition_suite(suite, classes, bins):
    """
    Partitions a test suite by test type.
    Partitions a test suite by test type. Also prevents duplicated tests.

    classes is a sequence of types
    bins is a sequence of TestSuites, one more than classes
@@ -248,9 +248,11 @@ def partition_suite(suite, classes, bins):
        else:
            for i in range(len(classes)):
                if isinstance(test, classes[i]):
                    if test not in bins[i]:
                        bins[i].addTest(test)
                    break
            else:
                if test not in bins[-1]:
                    bins[-1].addTest(test)


+9 −0
Original line number Diff line number Diff line
@@ -117,6 +117,15 @@ class DiscoverRunnerTest(TestCase):
            # All others can follow in unspecified order, including doctests
            self.assertIn('DocTestCase', [t.__class__.__name__ for t in suite._tests[2:]])

    def test_duplicates_ignored(self):
        """
        Tests shouldn't be discovered twice when discovering on overlapping paths.
        """
        single = DiscoverRunner().build_suite(["django.contrib.gis"]).countTestCases()
        dups = DiscoverRunner().build_suite(
            ["django.contrib.gis", "django.contrib.gis.tests.geo3d"]).countTestCases()
        self.assertEqual(single, dups)

    def test_overrideable_test_suite(self):
        self.assertEqual(DiscoverRunner().test_suite, TestSuite)