From 4e72cceb628010b5f30dce7a2883cda92ed61393 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Tue, 14 Apr 2015 13:26:06 -0700 Subject: issue9859: Document test.support.detect_api_mismatch() and simplify its test. --- Doc/library/test.rst | 9 ++++++++ Lib/test/support/__init__.py | 2 +- Lib/test/test_support.py | 50 ++++++++++++++++++-------------------------- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/Doc/library/test.rst b/Doc/library/test.rst index 974909e..029f930 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 b9fda11..8b180b5 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 4a27c44..2c00417 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 -- cgit v0.12