blob: dcd6569fd27e113d728ec9d6761e9ffe7281ea71 [file] [log] [blame]
Guido van Rossum55b4a4a2007-02-25 21:03:54 +00001"""Doctests for module reloading.
2
3>>> from xreload import xreload
4>>> from test.test_xreload import make_mod
5>>> make_mod()
6>>> import x
7>>> C = x.C
8>>> Cfoo = C.foo
9>>> Cbar = C.bar
10>>> Cstomp = C.stomp
11>>> b = C()
12>>> bfoo = b.foo
13>>> b.foo()
1442
15>>> bfoo()
1642
17>>> Cfoo(b)
1842
19>>> Cbar()
2042 42
21>>> Cstomp()
2242 42 42
23>>> make_mod(repl="42", subst="24")
24>>> xreload(x)
25<module 'x' (built-in)>
26>>> b.foo()
2724
28>>> bfoo()
2924
30>>> Cfoo(b)
3124
32>>> Cbar()
3324 24
34>>> Cstomp()
3524 24 24
36
37"""
38
39SAMPLE_CODE = """
40class C:
41 def foo(self):
42 print(42)
43 @classmethod
44 def bar(cls):
45 print(42, 42)
46 @staticmethod
47 def stomp():
48 print (42, 42, 42)
49"""
50
51import os
52import sys
53import shutil
54import doctest
55import xreload
56import tempfile
57from test.test_support import run_unittest
58
59tempdir = None
60save_path = None
61
62
63def setUp(unused=None):
64 global tempdir, save_path
65 tempdir = tempfile.mkdtemp()
66 save_path = list(sys.path)
67 sys.path.append(tempdir)
68
69
70def tearDown(unused=None):
71 global tempdir, save_path
72 if save_path is not None:
73 sys.path = save_path
74 save_path = None
75 if tempdir is not None:
76 shutil.rmtree(tempdir)
77 tempdir = None
78
79
80def make_mod(name="x", repl=None, subst=None):
81 if not tempdir:
82 setUp()
83 assert tempdir
84 fn = os.path.join(tempdir, name + ".py")
85 f = open(fn, "w")
86 sample = SAMPLE_CODE
87 if repl is not None and subst is not None:
88 sample = sample.replace(repl, subst)
89 try:
90 f.write(sample)
91 finally:
92 f.close()
93
94
95def test_suite():
96 return doctest.DocTestSuite(setUp=setUp, tearDown=tearDown)
97
98
99def test_main():
100 run_unittest(test_suite())
101
102if __name__ == "__main__":
103 test_main()