4 # ToolBox for test framework
11 class SatTestError(Exception):
13 Exception class for test errors.
16 def __init__(self, value):
20 return repr(self.value)
23 class SatNotApplicableError(Exception):
25 Exception class for test errors.
28 def __init__(self, value):
32 return repr(self.value)
36 print("ERROR", message)
37 raise SatTestError(message)
40 def NOT_APPLICABLE(message):
41 print("NOT_APPLICABLE", message)
42 raise SatNotApplicableError(message)
45 def compFloat(f1, f2, tol=10e-10):
46 """Compares 2 numbers with tolerance tol."""
48 print("|f1-f2| = %s (tol=%s)" % (str(diff), str(tol)))
56 def compFiles(f1, f2, tol=0):
57 """Compares 2 files."""
58 assert os.path.exists(f1), "compFiles: file not found: %s" % f1
59 assert os.path.exists(f2), "compFiles: file not found: %s" % f2
60 diffLine = os.popen("diff -y --suppress-common-lines %s %s" % (f1, f2))
61 diff = len(string.split(diffLine.read(), "\n"))
63 print("nb of diff lines = %s (tol=%s)" % (str(diff), str(tol)))
71 def mdump_med(med_file, dump_file, options):
72 """Uses mdump to dump a med file."""
73 assert isinstance(options, list), "Bad options for mdump: %s" % options
74 assert len(options) == 3, "Bad options for mdump: %s" % options
75 cmd = "mdump %s %s" % (med_file, " ".join(options))
78 with open(dump_file, "w") as df:
79 pdump = subprocess.Popen(cmd, shell=True, stdout=df)
84 def compMED(file1, file2, tol=0, diff_flags=""):
85 """Compares 2 med files by using mdump."""
87 # local utility method
90 os.environ["TT_TMP_RESULT"], os.path.basename(med) + ".mdump"
92 st = mdump_med(med, dump, ["1", "NODALE", "FULL_INTERLACE"])
93 if st != 0 or not os.path.exists(dump):
94 raise Exception("Error mpdump %s" % med)
96 # replace file name with "filename"
97 with open(dump, "r") as ff:
98 lines = ff.readlines()
99 with open(dump, "w") as dumpfile:
102 line.index("Universal name of mesh")
105 dumpfile.write(line.replace(med, "filename"))
117 if not os.path.exists(file1):
118 print("compMED: file not found: '%s'" % file1)
119 print("<<<< compMED\n")
121 if not os.path.exists(file2):
122 print("compMED: file not found: '%s'" % file2)
123 print("<<<< compMED\n")
126 dump1 = do_dump(file1)
127 dump2 = do_dump(file2)
129 diff_cmd = "diff %s %s %s" % (diff_flags, dump1, dump2)
130 print(" >" + diff_cmd)
131 pdiff = subprocess.Popen(diff_cmd, shell=True, stdout=subprocess.PIPE)
132 status = pdiff.wait()
133 print(" Diff =", status)
135 print(pdiff.stdout.read())
137 print("<<<< compMED\n")
141 class TOOLS_class(object):
142 def __init__(self, base_ressources_dir, tmp_dir, test_ressources_dir):
143 self.base_ressources_dir = base_ressources_dir
144 self.tmp_dir = tmp_dir
145 self.test_ressources_dir = test_ressources_dir
151 def ERROR(self, message):
152 # Simulation d'un plantage
155 def compMED(self, file1, file2, tol=0):
156 return compMED(file1, file2, tol, "--ignore-all-space")
158 def compFloat(self, f1, f2, tol=10e-10):
159 return compFloat(f1, f2, tol)
161 def compFiles(self, f1, f2, tol=0):
162 return compFiles(f1, f2, tol)
164 def get_inFile(self, name=None):
166 return self.base_ressources_dir
167 self.inFiles.append(name)
168 return os.path.join(self.base_ressources_dir, name)
170 def get_outFile(self, name=None):
173 return os.path.join(self.tmp_dir, name)
175 def writeInFiles(self, pylog):
176 pylog.write("inFiles=%s\n" % str(self.inFiles))