diff options
Diffstat (limited to 'scipy/weave/tests/weave_test_utils.py')
-rw-r--r-- | scipy/weave/tests/weave_test_utils.py | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/scipy/weave/tests/weave_test_utils.py b/scipy/weave/tests/weave_test_utils.py new file mode 100644 index 000000000..9189a4619 --- /dev/null +++ b/scipy/weave/tests/weave_test_utils.py @@ -0,0 +1,172 @@ +import os,sys,string +import pprint + +def remove_whitespace(in_str): + import string + out = string.replace(in_str," ","") + out = string.replace(out,"\t","") + out = string.replace(out,"\n","") + return out + +def print_assert_equal(test_string,actual,desired): + """this should probably be in scipy_test.testing + """ + try: + assert(actual == desired) + except AssertionError: + import cStringIO + msg = cStringIO.StringIO() + msg.write(test_string) + msg.write(' failed\nACTUAL: \n') + pprint.pprint(actual,msg) + msg.write('DESIRED: \n') + pprint.pprint(desired,msg) + raise AssertionError, msg.getvalue() + +################################################### +# mainly used by catalog tests +################################################### +from scipy_distutils.misc_util import add_grandparent_to_path,restore_path + +add_grandparent_to_path(__name__) +import catalog +restore_path() + +import glob + +def temp_catalog_files(prefix=''): + # might need to add some more platform specific catalog file + # suffixes to remove. The .pag was recently added for SunOS + d = catalog.default_dir() + f = catalog.os_dependent_catalog_name() + return glob.glob(os.path.join(d,prefix+f+'*')) + +import tempfile + +def clear_temp_catalog(): + """ Remove any catalog from the temp dir + """ + global backup_dir + backup_dir =tempfile.mktemp() + os.mkdir(backup_dir) + for file in temp_catalog_files(): + move_file(file,backup_dir) + #d,f = os.path.split(file) + #backup = os.path.join(backup_dir,f) + #os.rename(file,backup) + +def restore_temp_catalog(): + """ Remove any catalog from the temp dir + """ + global backup_dir + cat_dir = catalog.default_dir() + for file in os.listdir(backup_dir): + file = os.path.join(backup_dir,file) + d,f = os.path.split(file) + dst_file = os.path.join(cat_dir, f) + if os.path.exists(dst_file): + os.remove(dst_file) + #os.rename(file,dst_file) + move_file(file,dst_file) + os.rmdir(backup_dir) + backup_dir = None + +def empty_temp_dir(): + """ Create a sub directory in the temp directory for use in tests + """ + import tempfile + d = catalog.default_dir() + for i in range(10000): + new_d = os.path.join(d,tempfile.gettempprefix()[1:-1]+`i`) + if not os.path.exists(new_d): + os.mkdir(new_d) + break + return new_d + +def cleanup_temp_dir(d): + """ Remove a directory created by empty_temp_dir + should probably catch errors + """ + files = map(lambda x,d=d: os.path.join(d,x),os.listdir(d)) + for i in files: + try: + if os.path.isdir(i): + cleanup_temp_dir(i) + else: + os.remove(i) + except OSError: + pass # failed to remove file for whatever reason + # (maybe it is a DLL Python is currently using) + try: + os.rmdir(d) + except OSError: + pass + + +# from distutils -- old versions had bug, so copying here to make sure +# a working version is available. +from distutils.errors import DistutilsFileError +import distutils.file_util +def move_file (src, dst, + verbose=0, + dry_run=0): + + """Move a file 'src' to 'dst'. If 'dst' is a directory, the file will + be moved into it with the same name; otherwise, 'src' is just renamed + to 'dst'. Return the new full name of the file. + + Handles cross-device moves on Unix using 'copy_file()'. What about + other systems??? + """ + from os.path import exists, isfile, isdir, basename, dirname + import errno + + if verbose: + print "moving %s -> %s" % (src, dst) + + if dry_run: + return dst + + if not isfile(src): + raise DistutilsFileError, \ + "can't move '%s': not a regular file" % src + + if isdir(dst): + dst = os.path.join(dst, basename(src)) + elif exists(dst): + raise DistutilsFileError, \ + "can't move '%s': destination '%s' already exists" % \ + (src, dst) + + if not isdir(dirname(dst)): + raise DistutilsFileError, \ + "can't move '%s': destination '%s' not a valid path" % \ + (src, dst) + + copy_it = 0 + try: + os.rename(src, dst) + except os.error, (num, msg): + if num == errno.EXDEV: + copy_it = 1 + else: + raise DistutilsFileError, \ + "couldn't move '%s' to '%s': %s" % (src, dst, msg) + + if copy_it: + distutils.file_util.copy_file(src, dst) + try: + os.unlink(src) + except os.error, (num, msg): + try: + os.unlink(dst) + except os.error: + pass + raise DistutilsFileError, \ + ("couldn't move '%s' to '%s' by copy/delete: " + + "delete '%s' failed: %s") % \ + (src, dst, src, msg) + + return dst + +
\ No newline at end of file |