summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_xreload.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_xreload.py')
-rw-r--r--Lib/test/test_xreload.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/Lib/test/test_xreload.py b/Lib/test/test_xreload.py
new file mode 100644
index 0000000..dcd6569
--- /dev/null
+++ b/Lib/test/test_xreload.py
@@ -0,0 +1,103 @@
+"""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()