diff -r b97557699db3 Lib/test/test_pydoc.py --- a/Lib/test/test_pydoc.py Tue Jun 17 00:34:14 2014 -0700 +++ b/Lib/test/test_pydoc.py Tue Jun 17 21:07:40 2014 +0200 @@ -471,6 +471,27 @@ expected = 'C in module %s object' % __name__ self.assertIn(expected, pydoc.render_doc(c)) + def test_class_with_metaclass(self): + class CMeta(type): + "Metaclass with exposed class attribute" + c_attr = "foo" + def __dir__(cls): + ret = [name for name in cls.__dict__] # expose the normal list + ret += ['c_attr'] # expose the class attribute + return ret + class C(object): + "New-style class with metaclass" + __metaclass__ = CMeta + c = C() + + self.assertEqual(pydoc.describe(CMeta), 'class CMeta') + self.assertEqual(pydoc.describe(C), 'class C') + self.assertEqual(pydoc.describe(c), 'C') + C_doc = pydoc.plain(pydoc.render_doc(C)) + self.assertIsNotNone(re.search("class C in module "+__name__, C_doc)) + self.assertIsNotNone(re.search("Data and other attributes propagated from metaclass CMeta", C_doc)) + self.assertIsNotNone(re.search("c_attr = 'foo'", C_doc)) + def test_namedtuple_public_underscore(self): NT = namedtuple('NT', ['abc', 'def'], rename=True) with captured_stdout() as help_io: