mirror of https://github.com/python/cpython
104 lines
1.7 KiB
Python
104 lines
1.7 KiB
Python
"""Doctests for module reloading.
|
|
|
|
>>> from xreload import xreload
|
|
>>> from test.test_xreload import make_mod
|
|
>>> make_mod()
|
|
>>> import x
|
|
>>> C = x.C
|
|
>>> Cfoo = C.foo
|
|
>>> Cbar = C.bar
|
|
>>> Cstomp = C.stomp
|
|
>>> b = C()
|
|
>>> bfoo = b.foo
|
|
>>> b.foo()
|
|
42
|
|
>>> bfoo()
|
|
42
|
|
>>> Cfoo(b)
|
|
42
|
|
>>> Cbar()
|
|
42 42
|
|
>>> Cstomp()
|
|
42 42 42
|
|
>>> make_mod(repl="42", subst="24")
|
|
>>> xreload(x)
|
|
<module 'x' (built-in)>
|
|
>>> b.foo()
|
|
24
|
|
>>> bfoo()
|
|
24
|
|
>>> Cfoo(b)
|
|
24
|
|
>>> Cbar()
|
|
24 24
|
|
>>> Cstomp()
|
|
24 24 24
|
|
|
|
"""
|
|
|
|
SAMPLE_CODE = """
|
|
class C:
|
|
def foo(self):
|
|
print(42)
|
|
@classmethod
|
|
def bar(cls):
|
|
print(42, 42)
|
|
@staticmethod
|
|
def stomp():
|
|
print (42, 42, 42)
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import shutil
|
|
import doctest
|
|
import xreload
|
|
import tempfile
|
|
from test.test_support import run_unittest
|
|
|
|
tempdir = None
|
|
save_path = None
|
|
|
|
|
|
def setUp(unused=None):
|
|
global tempdir, save_path
|
|
tempdir = tempfile.mkdtemp()
|
|
save_path = list(sys.path)
|
|
sys.path.append(tempdir)
|
|
|
|
|
|
def tearDown(unused=None):
|
|
global tempdir, save_path
|
|
if save_path is not None:
|
|
sys.path = save_path
|
|
save_path = None
|
|
if tempdir is not None:
|
|
shutil.rmtree(tempdir)
|
|
tempdir = None
|
|
|
|
|
|
def make_mod(name="x", repl=None, subst=None):
|
|
if not tempdir:
|
|
setUp()
|
|
assert tempdir
|
|
fn = os.path.join(tempdir, name + ".py")
|
|
f = open(fn, "w")
|
|
sample = SAMPLE_CODE
|
|
if repl is not None and subst is not None:
|
|
sample = sample.replace(repl, subst)
|
|
try:
|
|
f.write(sample)
|
|
finally:
|
|
f.close()
|
|
|
|
|
|
def test_suite():
|
|
return doctest.DocTestSuite(setUp=setUp, tearDown=tearDown)
|
|
|
|
|
|
def test_main():
|
|
run_unittest(test_suite())
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|