1"""A module to test whether doctest recognizes some 2.2 features,
2like static and class methods.
3
4>>> print('yup')  # 1
5yup
6
7We include some (random) encoded (utf-8) text in the text surrounding
8the example.  It should be ignored:
9
10ЉЊЈЁЂ
11
12"""
13
14import sys
15import unittest
16from test import support
17if sys.flags.optimize >= 2:
18    raise unittest.SkipTest("Cannot test docstrings with -O2")
19
20class C(object):
21    """Class C.
22
23    >>> print(C())  # 2
24    42
25
26
27    We include some (random) encoded (utf-8) text in the text surrounding
28    the example.  It should be ignored:
29
30        ЉЊЈЁЂ
31
32    """
33
34    def __init__(self):
35        """C.__init__.
36
37        >>> print(C()) # 3
38        42
39        """
40
41    def __str__(self):
42        """
43        >>> print(C()) # 4
44        42
45        """
46        return "42"
47
48    class D(object):
49        """A nested D class.
50
51        >>> print("In D!")   # 5
52        In D!
53        """
54
55        def nested(self):
56            """
57            >>> print(3) # 6
58            3
59            """
60
61    def getx(self):
62        """
63        >>> c = C()    # 7
64        >>> c.x = 12   # 8
65        >>> print(c.x)  # 9
66        -12
67        """
68        return -self._x
69
70    def setx(self, value):
71        """
72        >>> c = C()     # 10
73        >>> c.x = 12    # 11
74        >>> print(c.x)   # 12
75        -12
76        """
77        self._x = value
78
79    x = property(getx, setx, doc="""\
80        >>> c = C()    # 13
81        >>> c.x = 12   # 14
82        >>> print(c.x)  # 15
83        -12
84        """)
85
86    @staticmethod
87    def statm():
88        """
89        A static method.
90
91        >>> print(C.statm())    # 16
92        666
93        >>> print(C().statm())  # 17
94        666
95        """
96        return 666
97
98    @classmethod
99    def clsm(cls, val):
100        """
101        A class method.
102
103        >>> print(C.clsm(22))    # 18
104        22
105        >>> print(C().clsm(23))  # 19
106        23
107        """
108        return val
109
110def test_main():
111    from test import test_doctest2
112    EXPECTED = 19
113    f, t = support.run_doctest(test_doctest2)
114    if t != EXPECTED:
115        raise support.TestFailed("expected %d tests to run, not %d" %
116                                      (EXPECTED, t))
117
118# Pollute the namespace with a bunch of imported functions and classes,
119# to make sure they don't get tested.
120from doctest import *
121
122if __name__ == '__main__':
123    test_main()
124