source: src/tests/pybin/tools.py @ c07d724

aaron-thesisarm-ehcleanup-dtorsdeferred_resndemanglerjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerresolv-newwith_gc
Last change on this file since c07d724 was c07d724, checked in by Thierry Delisle <tdelisle@…>, 4 years ago

Cleaned-up test script, notably by creating a pybin folder and a tools script inside it

  • Property mode set to 100644
File size: 2.7 KB
Line 
1import __main__
2import argparse
3import os
4import re
5import stat
6
7from subprocess import Popen, PIPE, STDOUT
8
9# helper functions to run terminal commands
10def sh(cmd, dry_run = False, print2stdout = True):
11        if dry_run :    # if this is a dry_run, only print the commands that would be ran
12                print("cmd: %s" % cmd)
13                return 0, None
14        else :                  # otherwise create a pipe and run the desired command
15                proc = Popen(cmd, stdout=None if print2stdout else PIPE, stderr=STDOUT, shell=True)
16                out, err = proc.communicate()
17                return proc.returncode, out
18
19# Remove 1 or more files silently
20def rm( files, dry_run = False ):
21        try:
22                for file in files:
23                        sh("rm -f %s > /dev/null 2>&1" % file, dry_run)
24        except TypeError:
25                sh("rm -f %s > /dev/null 2>&1" % files, dry_run)
26
27def chdir( dest = __main__.__file__ ):
28        abspath = os.path.abspath(dest)
29        dname = os.path.dirname(abspath)
30        os.chdir(dname)
31
32# helper function to replace patterns in a file
33def file_replace(fname, pat, s_after):
34    # first, see if the pattern is even in the file.
35    with open(fname) as f:
36        if not any(re.search(pat, line) for line in f):
37            return # pattern does not occur in file so we are done.
38
39    # pattern is in the file, so perform replace operation.
40    with open(fname) as f:
41        out_fname = fname + ".tmp"
42        out = open(out_fname, "w")
43        for line in f:
44            out.write(re.sub(pat, s_after, line))
45        out.close()
46        os.rename(out_fname, fname)
47
48# helper function to check if a files contains only a spacific string
49def fileContainsOnly(file, text) :
50        with open(file) as f:
51                ff = f.read().strip()
52                result = ff == text.strip()
53
54                return result;
55
56# check whether or not a file is executable
57def fileIsExecutable(file) :
58        try :
59                fileinfo = os.stat(file)
60                return bool(fileinfo.st_mode & stat.S_IXUSR)
61        except Exception as inst:
62                print(type(inst))    # the exception instance
63                print(inst.args)     # arguments stored in .args
64                print(inst)
65                return False
66
67# check if arguments is yes or no
68def yes_no(string):
69        if string == "yes" :
70                return True
71        if string == "no" :
72                return False
73        raise argparse.ArgumentTypeError(msg)
74        return False
75
76# diff two files
77def diff( lhs, rhs, dry_run ):
78        # diff the output of the files
79        diff_cmd = ("diff --ignore-all-space "
80                                "--ignore-blank-lines "
81                                "--old-group-format='\t\tmissing lines :\n"
82                                "%%<' \\\n"
83                                "--new-group-format='\t\tnew lines :\n"
84                                "%%>' \\\n"
85                                "--unchanged-group-format='%%=' \\"
86                                "--changed-group-format='\t\texpected :\n"
87                                "%%<\n"
88                                "\t\tgot :\n"
89                                "%%>' \\\n"
90                                "--new-line-format='\t\t%%dn\t%%L' \\\n"
91                                "--old-line-format='\t\t%%dn\t%%L' \\\n"
92                                "--unchanged-line-format='' \\\n"
93                                "%s %s")
94
95        # fetch return code and error from the diff command
96        return sh(diff_cmd % (lhs, rhs), dry_run, False)       
Note: See TracBrowser for help on using the repository browser.