diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-10-04 05:27:00 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-10-04 05:27:00 (GMT) |
commit | 2f93e28a19e3f250e8c19f9f4334cfa76f5e3645 (patch) | |
tree | 22e884413dc23251e95f9737bd9e14daaf43bd0f /Lib | |
parent | f137f75ab82019b7b4db6d45bd69e2c0b155b2eb (diff) | |
download | cpython-2f93e28a19e3f250e8c19f9f4334cfa76f5e3645.zip cpython-2f93e28a19e3f250e8c19f9f4334cfa76f5e3645.tar.gz cpython-2f93e28a19e3f250e8c19f9f4334cfa76f5e3645.tar.bz2 |
SF bug [#467331] ClassType.__doc__ always None.
For a dynamically constructed type object, fill in the tp_doc slot with
a copy of the argument dict's "__doc__" value, provided the latter exists
and is a string.
NOTE: I don't know what to do if it's a Unicode string, so in that case
tp_doc is left NULL (which shows up as Py_None if you do Class.__doc__).
Note that tp_doc holds a char*, not a general PyObject*.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_descr.py | 35 | ||||
-rw-r--r-- | Lib/test/test_doctest2.py | 6 |
2 files changed, 35 insertions, 6 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 4ed6853..cd65c2c 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -88,6 +88,38 @@ def testset3op(a, b, c, d, res, stmt="a[b:c]=d", meth="__setslice__"): bm(b, c, d) verify(dict['a'] == res) +def class_docstrings(): + class Classic: + "A classic docstring." + verify(Classic.__doc__ == "A classic docstring.") + verify(Classic.__dict__['__doc__'] == "A classic docstring.") + + class Classic2: + pass + verify(Classic2.__doc__ is None) + + class NewStatic: + "Another docstring." + __dynamic__ = 0 + verify(NewStatic.__doc__ == "Another docstring.") + verify(NewStatic.__dict__['__doc__'] == "Another docstring.") + + class NewStatic2: + __dynamic__ = 0 + pass + verify(NewStatic2.__doc__ is None) + + class NewDynamic: + "Another docstring." + __dynamic__ = 1 + verify(NewDynamic.__doc__ == "Another docstring.") + verify(NewDynamic.__dict__['__doc__'] == "Another docstring.") + + class NewDynamic2: + __dynamic__ = 1 + pass + verify(NewDynamic2.__doc__ is None) + def lists(): if verbose: print "Testing list operations..." testbinop([1], [2], [1,2], "a+b", "__add__") @@ -2168,7 +2200,7 @@ def binopoverride(): return I(pow(int(other), int(self), mod)) else: return I(pow(int(other), int(self), int(mod))) - + vereq(`I(1) + I(2)`, "I(3)") vereq(`I(1) + 2`, "I(3)") vereq(`1 + I(2)`, "I(3)") @@ -2182,6 +2214,7 @@ def binopoverride(): def test_main(): + class_docstrings() lists() dicts() dict_constructor() diff --git a/Lib/test/test_doctest2.py b/Lib/test/test_doctest2.py index 9a0e57c..00b6cc4 100644 --- a/Lib/test/test_doctest2.py +++ b/Lib/test/test_doctest2.py @@ -7,7 +7,6 @@ yup import test_support -# XXX The class docstring is skipped. class C(object): """Class C. @@ -29,7 +28,6 @@ class C(object): """ return "42" - # XXX The class docstring is skipped. class D(object): """A nested D class. @@ -96,9 +94,7 @@ class C(object): def test_main(): import test_doctest2 - # XXX 2 class docstrings are skipped. - # EXPECTED = 19 - EXPECTED = 17 + EXPECTED = 19 f, t = test_support.run_doctest(test_doctest2) if t != EXPECTED: raise test_support.TestFailed("expected %d tests to run, not %d" % |