From: Gregory P. Smith Date: Tue, 14 Apr 2015 20:26:06 +0000 (-0700) Subject: issue9859: Document test.support.detect_api_mismatch() and simplify its test. X-Git-Tag: v3.5.0a4~49 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4e72cceb628010b5f30dce7a2883cda92ed61393;p=thirdparty%2FPython%2Fcpython.git issue9859: Document test.support.detect_api_mismatch() and simplify its test. --- diff --git a/Doc/library/test.rst b/Doc/library/test.rst index 974909e18204..029f93047ae0 100644 --- a/Doc/library/test.rst +++ b/Doc/library/test.rst @@ -568,6 +568,15 @@ The :mod:`test.support` module defines the following functions: def load_tests(*args): return load_package_tests(os.path.dirname(__file__), *args) +.. function:: detect_api_mismatch(ref_api, other_api, *, ignore=()): + + Returns the set of attributes, functions or methods of `ref_api` not + found on `other_api`, except for a defined list of items to be + ignored in this check specified in `ignore`. + + By default this skips private attributes beginning with '_' but + includes all magic methods, i.e. those starting and ending in '__'. + The :mod:`test.support` module defines the following classes: diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index b9fda11ba910..8b180b565790 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2184,7 +2184,7 @@ def fs_is_case_insensitive(directory): return False -def detect_api_mismatch(ref_api, other_api, *, ignore=None): +def detect_api_mismatch(ref_api, other_api, *, ignore=()): """Returns the set of items in ref_api not in other_api, except for a defined list of items to be ignored in this check. diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 4a27c44380fd..2c0041741481 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -280,46 +280,36 @@ class TestSupport(unittest.TestCase): self.assertEqual(D["item"], 5) self.assertEqual(D["item"], 1) + class RefClass: + attribute1 = None + attribute2 = None + _hidden_attribute1 = None + __magic_1__ = None + + class OtherClass: + attribute2 = None + attribute3 = None + __magic_1__ = None + __magic_2__ = None + def test_detect_api_mismatch(self): - class RefClass: - attribute1 = None - attribute2 = None - _hidden_attribute1 = None - __magic_1__ = None - - class OtherClass: - attribute2 = None - attribute3 = None - __magic_1__ = None - __magic_2__ = None - - missing_items = support.detect_api_mismatch(RefClass, OtherClass) + missing_items = support.detect_api_mismatch(self.RefClass, + self.OtherClass) self.assertEqual({'attribute1'}, missing_items) - missing_items = support.detect_api_mismatch(OtherClass, RefClass) + missing_items = support.detect_api_mismatch(self.OtherClass, + self.RefClass) self.assertEqual({'attribute3', '__magic_2__'}, missing_items) def test_detect_api_mismatch__ignore(self): - class RefClass: - attribute1 = None - attribute2 = None - _hidden_attribute1 = None - __magic_1__ = None - - class OtherClass: - attribute2 = None - attribute3 = None - __magic_1__ = None - __magic_2__ = None - ignore = ['attribute1', 'attribute3', '__magic_2__', 'not_in_either'] - missing_items = support.detect_api_mismatch(RefClass, OtherClass, - ignore=ignore) + missing_items = support.detect_api_mismatch( + self.RefClass, self.OtherClass, ignore=ignore) self.assertEqual(set(), missing_items) - missing_items = support.detect_api_mismatch(OtherClass, RefClass, - ignore=ignore) + missing_items = support.detect_api_mismatch( + self.OtherClass, self.RefClass, ignore=ignore) self.assertEqual(set(), missing_items) # XXX -follows a list of untested API