diff --git a/pep-0399.txt b/pep-0399.txt --- a/pep-0399.txt +++ b/pep-0399.txt @@ -8,7 +8,7 @@ Content-Type: text/x-rst Created: 04-Apr-2011 Python-Version: 3.3 -Post-History: 04-Apr-2011, 12-Apr-2011, 17-Jul-2011, 15-Aug-2011 +Post-History: 04-Apr-2011, 12-Apr-2011, 17-Jul-2011, 15-Aug-2011, 01-Jan-2013 Abstract ======== @@ -124,7 +124,7 @@ py_heapq = import_fresh_module('heapq', blocked=['_heapq']) - class ExampleTest(unittest.TestCase): + class ExampleTest: def test_heappop_exc_for_non_MutableSequence(self): # Raise TypeError when heap is not a @@ -136,33 +136,34 @@ return 0 heap = Spam() - self.assertFalse(isinstance(heap, - collections.abc.MutableSequence)) + self.assertIsInstance(heap, collections.abc.MutableSequence) with self.assertRaises(TypeError): self.heapq.heappop(heap) - class AcceleratedExampleTest(ExampleTest): + class PyExampleTest(ExampleTest, unittest.TestCase): + """Test with just the pure Python code.""" + heapq = py_heapq + + @unittest.skipUnless(c_heapq, 'requires the C _heapq module') + class CExampleTest(ExampleTest, unittest.TestCase): """Test using the accelerated code.""" - heapq = c_heapq - class PyExampleTest(ExampleTest): + if __name__ == '__main__': + unittest.main() - """Test with just the pure Python code.""" - heapq = py_heapq - - - def test_main(): - run_unittest(AcceleratedExampleTest, PyExampleTest) - - - if __name__ == '__main__': - test_main() - +The test module defines a base class with the tests methods that access the +``heapq`` module through a ``self.heapq`` class attribute, and two subclasses +that set this attribute to either the Python or the C version of the module. +Note that only the two subclasses inherit from ``unittest.TestCase`` -- this +prevents the ``ExampleTest`` class from being detected as a ``TestCase`` +subclass by ``unittest`` test discovery. +A ``skipUnless`` decorator can be added to the class that tests the C code +in order to have these tests skipped when the C module is not available. If this test were to provide extensive coverage for ``heapq.heappop()`` in the pure Python implementation then the