Guido van Rossum | 55b4a4a | 2007-02-25 21:03:54 +0000 | [diff] [blame] | 1 | """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() |
| 14 | 42 |
| 15 | >>> bfoo() |
| 16 | 42 |
| 17 | >>> Cfoo(b) |
| 18 | 42 |
| 19 | >>> Cbar() |
| 20 | 42 42 |
| 21 | >>> Cstomp() |
| 22 | 42 42 42 |
| 23 | >>> make_mod(repl="42", subst="24") |
| 24 | >>> xreload(x) |
| 25 | <module 'x' (built-in)> |
| 26 | >>> b.foo() |
| 27 | 24 |
| 28 | >>> bfoo() |
| 29 | 24 |
| 30 | >>> Cfoo(b) |
| 31 | 24 |
| 32 | >>> Cbar() |
| 33 | 24 24 |
| 34 | >>> Cstomp() |
| 35 | 24 24 24 |
| 36 | |
| 37 | """ |
| 38 | |
| 39 | SAMPLE_CODE = """ |
| 40 | class 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 | |
| 51 | import os |
| 52 | import sys |
| 53 | import shutil |
| 54 | import doctest |
| 55 | import xreload |
| 56 | import tempfile |
| 57 | from test.test_support import run_unittest |
| 58 | |
| 59 | tempdir = None |
| 60 | save_path = None |
| 61 | |
| 62 | |
| 63 | def 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 | |
| 70 | def 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 | |
| 80 | def 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 | |
| 95 | def test_suite(): |
| 96 | return doctest.DocTestSuite(setUp=setUp, tearDown=tearDown) |
| 97 | |
| 98 | |
| 99 | def test_main(): |
| 100 | run_unittest(test_suite()) |
| 101 | |
| 102 | if __name__ == "__main__": |
| 103 | test_main() |