Index: Lib/test/test_inspect.py =================================================================== --- Lib/test/test_inspect.py (revision 79908) +++ Lib/test/test_inspect.py (working copy) @@ -435,8 +435,19 @@ exec 'def fakeSublistOfOne((foo)): return 1' self.assertArgSpecEquals(fakeSublistOfOne, ['foo']) - def test_classify_oldstyle(self): - class A: + + def _classify_test(self, newstyle): + """ + Helper for testing that classify_class_attrs finds a bunch of different + kinds of attributes on a given class. + """ + if newstyle: + base = object + else: + class base: + pass + + class A(base): def s(): pass s = staticmethod(s) @@ -495,71 +506,23 @@ self.assertIn(('m1', 'method', D), attrs, 'missing plain method') self.assertIn(('datablob', 'data', A), attrs, 'missing data') - # Repeat all that, but w/ new-style classes. - def test_classify_newstyle(self): - class A(object): - def s(): pass - s = staticmethod(s) + def test_classify_oldstyle(self): + """ + classify_class_attrs finds static methods, class methods, properties, + normal methods, and data attributes on an old-style class. + """ + self._classify_test(False) - def c(cls): pass - c = classmethod(c) - def getp(self): pass - p = property(getp) + def test_classify_newstyle(self): + """ + Just like test_classify_oldstyle, but for a new-style class. + """ + self._classify_test(True) - def m(self): pass - def m1(self): pass - datablob = '1' - - attrs = attrs_wo_objs(A) - self.assertIn(('s', 'static method', A), attrs, 'missing static method') - self.assertIn(('c', 'class method', A), attrs, 'missing class method') - self.assertIn(('p', 'property', A), attrs, 'missing property') - self.assertIn(('m', 'method', A), attrs, 'missing plain method') - self.assertIn(('m1', 'method', A), attrs, 'missing plain method') - self.assertIn(('datablob', 'data', A), attrs, 'missing data') - - class B(A): - - def m(self): pass - - attrs = attrs_wo_objs(B) - self.assertIn(('s', 'static method', A), attrs, 'missing static method') - self.assertIn(('c', 'class method', A), attrs, 'missing class method') - self.assertIn(('p', 'property', A), attrs, 'missing property') - self.assertIn(('m', 'method', B), attrs, 'missing plain method') - self.assertIn(('m1', 'method', A), attrs, 'missing plain method') - self.assertIn(('datablob', 'data', A), attrs, 'missing data') - - - class C(A): - - def m(self): pass - def c(self): pass - - attrs = attrs_wo_objs(C) - self.assertIn(('s', 'static method', A), attrs, 'missing static method') - self.assertIn(('c', 'method', C), attrs, 'missing plain method') - self.assertIn(('p', 'property', A), attrs, 'missing property') - self.assertIn(('m', 'method', C), attrs, 'missing plain method') - self.assertIn(('m1', 'method', A), attrs, 'missing plain method') - self.assertIn(('datablob', 'data', A), attrs, 'missing data') - - class D(B, C): - - def m1(self): pass - - attrs = attrs_wo_objs(D) - self.assertIn(('s', 'static method', A), attrs, 'missing static method') - self.assertIn(('c', 'method', C), attrs, 'missing plain method') - self.assertIn(('p', 'property', A), attrs, 'missing property') - self.assertIn(('m', 'method', B), attrs, 'missing plain method') - self.assertIn(('m1', 'method', D), attrs, 'missing plain method') - self.assertIn(('datablob', 'data', A), attrs, 'missing data') - class TestGetcallargsFunctions(unittest.TestCase): # tuple parameters are named '.1', '.2', etc.