New submission from Zachary Ware: This patch makes extensive changes to test_decimal, with the ultimate goal of making `python -m unittest discover Lib/test/ "test_*.py"` not choke on test_decimal (see issue16748). Trying to do so uncovered a few other issues, such as some tests not properly cleaning up the context.
Here's a (non-exhaustive) list of what the patch will do: - Clean up imports, including a repeated import of warnings - Create a new hierarchy of TestCase subclasses - BaseTestCase is an empty subclass of unittest.TestCase to serve as a base class for all tests that are meant to test both implementations. This makes it easy to find such tests and create the implementation-specific test cases programmatically. - DecimalTest defines some methods for all tests: - setUp and tearDown, which ensure that the context is set up properly and cleaned up properly. A test that changes the context is marked as a failure in tearDown. These take the place of the toplevel init(module) function. - assertSignals, formerly toplevel assert_signals. It has also been enhanced to provide the current context if no context is given, and to accept strings as signals (which are then looked up on the current decimal module to get the real exception) - assertAndClearFlags, which is a shortcut for assertSignals('flags' ...) and clears the flags when done. Several tests made no changes to the context except for flags, and this was a quick, easy, and convenient way to confirm behavior and clean up. - CDecimalTest and PyDecimalTest, subclasses of DecimalTest which can be inherited from directly by tests that are meant for a single implementation (such as C/PyWhitebox, C/PyFunctionality), and are inherited by the generated subclasses of the base classes (IBMTestCases, FormatTest, etc.) - Do away with the 'skip_expected' global, use a decorator to skip IBMTestCases if the test data can't be found. - Clean up other toplevel setup code a bit. - Make vertical spacing more consistent throughout the module. - Move a couple of tests into `with localcontext()` blocks to avoid context pollution. - Decorate all of CFunctionality with @requires_extra_functionality instead of each individual test - Remove the explicit listing of test classes. - Remove test_main(). - Add a Doctests base class which runs the doctests via doctest.testmod() and expects a certain number of tests to have been run. Attempts to use doctest.DocTestSuite were stymied by the two-headed nature of decimal and _decimal, and would have required a load_tests function to load them anyway. - Add tearDownModule, which restores the original contexts and checks to make sure sys.modules['decimal'] is as expected. - Convert `if __name__ == '__main__'` argument handling from optparse to argparse. - Allow arguments to be passed through to unittest.main(). - The old method of specifying IBM test case names now requires a '--test' or '-t' switch before each set of names (more than one -t switch can be present, but each must have at least one name following). - Add an '--extended'/'-e' switch for switching 'EXTENDEDERRORTEST', which formerly required editing the file. - Use unittest.main() for running the script directly. With the patch test_decimal can be run successfully: directly, by regrtest, or by unittest discovery in Lib/test/; with any acceptable combination of arguments when run directly; with or without _decimal; with or without -OO. I have not yet been able to test -DEXTRA_FUNCTIONALITY, --without-docstrings, or on any platform but Windows, but I don't expect any issues (of course :). The patch is against default; 3.3 requires the removal of a usage of subTest and a tweaking of the Doctest expected results. Any review will be very much appreciated! Thanks, Zach ---------- components: Tests files: test_decimal_cleanup.diff keywords: needs review, patch messages: 206482 nosy: ezio.melotti, facundobatista, mark.dickinson, rhettinger, skrah, zach.ware priority: normal severity: normal stage: patch review status: open title: Clean up/refactor/make discoverable test_decimal type: enhancement versions: Python 3.3, Python 3.4 Added file: http://bugs.python.org/file33182/test_decimal_cleanup.diff _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue20008> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com