1import pyximport; pyximport.install(reload_support=True)
2import os, sys
3import time, shutil
4import tempfile
5
6def make_tempdir():
7    tempdir = os.path.join(tempfile.gettempdir(), "pyrex_temp")
8    if os.path.exists(tempdir):
9        remove_tempdir(tempdir)
10
11    os.mkdir(tempdir)
12    return tempdir
13
14def remove_tempdir(tempdir):
15    shutil.rmtree(tempdir, 0, on_remove_file_error)
16
17def on_remove_file_error(func, path, excinfo):
18    print "Sorry! Could not remove a temp file:", path
19    print "Extra information."
20    print func, excinfo
21    print "You may want to delete this yourself when you get a chance."
22
23def test():
24    pyximport._test_files = []
25    tempdir = make_tempdir()
26    sys.path.append(tempdir)
27    filename = os.path.join(tempdir, "dummy.pyx")
28    open(filename, "w").write("print 'Hello world from the Pyrex install hook'")
29    import dummy
30    reload(dummy)
31
32    depend_filename = os.path.join(tempdir, "dummy.pyxdep")
33    depend_file = open(depend_filename, "w")
34    depend_file.write("*.txt\nfoo.bar")
35    depend_file.close()
36
37    build_filename = os.path.join(tempdir, "dummy.pyxbld")
38    build_file = open(build_filename, "w")
39    build_file.write("""
40from distutils.extension import Extension
41def make_ext(name, filename):
42    return Extension(name=name, sources=[filename])
43""")
44    build_file.close()
45
46    open(os.path.join(tempdir, "foo.bar"), "w").write(" ")
47    open(os.path.join(tempdir, "1.txt"), "w").write(" ")
48    open(os.path.join(tempdir, "abc.txt"), "w").write(" ")
49    reload(dummy)
50    assert len(pyximport._test_files)==1, pyximport._test_files
51    reload(dummy)
52
53    time.sleep(1) # sleep a second to get safer mtimes
54    open(os.path.join(tempdir, "abc.txt"), "w").write(" ")
55    print "Here goes the reolad"
56    reload(dummy)
57    assert len(pyximport._test_files) == 1, pyximport._test_files
58
59    reload(dummy)
60    assert len(pyximport._test_files) ==0, pyximport._test_files
61    remove_tempdir(tempdir)
62
63if __name__=="__main__":
64    test()
65
66