17db96d56Sopenharmony_ci"""A module to test whether doctest recognizes some 2.2 features, 27db96d56Sopenharmony_cilike static and class methods. 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci>>> print('yup') # 1 57db96d56Sopenharmony_ciyup 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ciWe include some (random) encoded (utf-8) text in the text surrounding 87db96d56Sopenharmony_cithe example. It should be ignored: 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciЉЊЈЁЂ 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci""" 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciimport sys 157db96d56Sopenharmony_ciimport unittest 167db96d56Sopenharmony_ciif sys.flags.optimize >= 2: 177db96d56Sopenharmony_ci raise unittest.SkipTest("Cannot test docstrings with -O2") 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ciclass C(object): 207db96d56Sopenharmony_ci """Class C. 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci >>> print(C()) # 2 237db96d56Sopenharmony_ci 42 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci We include some (random) encoded (utf-8) text in the text surrounding 277db96d56Sopenharmony_ci the example. It should be ignored: 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci ЉЊЈЁЂ 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci """ 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci def __init__(self): 347db96d56Sopenharmony_ci """C.__init__. 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci >>> print(C()) # 3 377db96d56Sopenharmony_ci 42 387db96d56Sopenharmony_ci """ 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci def __str__(self): 417db96d56Sopenharmony_ci """ 427db96d56Sopenharmony_ci >>> print(C()) # 4 437db96d56Sopenharmony_ci 42 447db96d56Sopenharmony_ci """ 457db96d56Sopenharmony_ci return "42" 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci class D(object): 487db96d56Sopenharmony_ci """A nested D class. 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci >>> print("In D!") # 5 517db96d56Sopenharmony_ci In D! 527db96d56Sopenharmony_ci """ 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci def nested(self): 557db96d56Sopenharmony_ci """ 567db96d56Sopenharmony_ci >>> print(3) # 6 577db96d56Sopenharmony_ci 3 587db96d56Sopenharmony_ci """ 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci def getx(self): 617db96d56Sopenharmony_ci """ 627db96d56Sopenharmony_ci >>> c = C() # 7 637db96d56Sopenharmony_ci >>> c.x = 12 # 8 647db96d56Sopenharmony_ci >>> print(c.x) # 9 657db96d56Sopenharmony_ci -12 667db96d56Sopenharmony_ci """ 677db96d56Sopenharmony_ci return -self._x 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci def setx(self, value): 707db96d56Sopenharmony_ci """ 717db96d56Sopenharmony_ci >>> c = C() # 10 727db96d56Sopenharmony_ci >>> c.x = 12 # 11 737db96d56Sopenharmony_ci >>> print(c.x) # 12 747db96d56Sopenharmony_ci -12 757db96d56Sopenharmony_ci """ 767db96d56Sopenharmony_ci self._x = value 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci x = property(getx, setx, doc="""\ 797db96d56Sopenharmony_ci >>> c = C() # 13 807db96d56Sopenharmony_ci >>> c.x = 12 # 14 817db96d56Sopenharmony_ci >>> print(c.x) # 15 827db96d56Sopenharmony_ci -12 837db96d56Sopenharmony_ci """) 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci @staticmethod 867db96d56Sopenharmony_ci def statm(): 877db96d56Sopenharmony_ci """ 887db96d56Sopenharmony_ci A static method. 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci >>> print(C.statm()) # 16 917db96d56Sopenharmony_ci 666 927db96d56Sopenharmony_ci >>> print(C().statm()) # 17 937db96d56Sopenharmony_ci 666 947db96d56Sopenharmony_ci """ 957db96d56Sopenharmony_ci return 666 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci @classmethod 987db96d56Sopenharmony_ci def clsm(cls, val): 997db96d56Sopenharmony_ci """ 1007db96d56Sopenharmony_ci A class method. 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci >>> print(C.clsm(22)) # 18 1037db96d56Sopenharmony_ci 22 1047db96d56Sopenharmony_ci >>> print(C().clsm(23)) # 19 1057db96d56Sopenharmony_ci 23 1067db96d56Sopenharmony_ci """ 1077db96d56Sopenharmony_ci return val 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ciclass Test(unittest.TestCase): 1117db96d56Sopenharmony_ci def test_testmod(self): 1127db96d56Sopenharmony_ci import doctest, sys 1137db96d56Sopenharmony_ci EXPECTED = 19 1147db96d56Sopenharmony_ci f, t = doctest.testmod(sys.modules[__name__]) 1157db96d56Sopenharmony_ci if f: 1167db96d56Sopenharmony_ci self.fail("%d of %d doctests failed" % (f, t)) 1177db96d56Sopenharmony_ci if t != EXPECTED: 1187db96d56Sopenharmony_ci self.fail("expected %d tests to run, not %d" % (EXPECTED, t)) 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci# Pollute the namespace with a bunch of imported functions and classes, 1227db96d56Sopenharmony_ci# to make sure they don't get tested. 1237db96d56Sopenharmony_cifrom doctest import * 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ciif __name__ == '__main__': 1267db96d56Sopenharmony_ci unittest.main() 127