4 # ToolBox for test framework
11 class SatTestError(Exception):
13 Exception class for test errors.
15 def __init__(self, value):
19 return repr(self.value)
21 class SatNotApplicableError(Exception):
23 Exception class for test errors.
25 def __init__(self, value):
29 return repr(self.value)
32 print("ERROR", message)
33 raise SatTestError(message)
35 def NOT_APPLICABLE(message):
36 print("NOT_APPLICABLE", message)
37 raise SatNotApplicableError(message)
39 def compFloat(f1, f2, tol=10e-10):
40 """Compares 2 numbers with tolerance tol."""
42 print("|f1-f2| = %s (tol=%s)" % (str(diff), str(tol)))
49 def compFiles(f1, f2, tol=0):
50 """Compares 2 files."""
51 assert os.path.exists(f1), "compFiles: file not found: %s" % f1
52 assert os.path.exists(f2), "compFiles: file not found: %s" % f2
53 diffLine = os.popen("diff -y --suppress-common-lines %s %s" % (f1, f2))
54 diff = len(string.split(diffLine.read(), "\n"))
56 print("nb of diff lines = %s (tol=%s)" % (str(diff), str(tol)))
63 def mdump_med(med_file, dump_file, options):
64 """Uses mdump to dump a med file."""
65 assert isinstance(options, list), "Bad options for mdump: %s" % options
66 assert len(options) == 3, "Bad options for mdump: %s" % options
67 cmd = "mdump %s %s" % (med_file, " ".join(options))
70 with open(dump_file, "w") as df:
71 pdump = subprocess.Popen(cmd, shell=True, stdout=df)
75 def compMED(file1, file2, tol=0, diff_flags=""):
76 """Compares 2 med files by using mdump."""
78 # local utility method
80 dump = os.path.join(os.environ['TT_TMP_RESULT'], os.path.basename(med) + ".mdump")
81 st = mdump_med(med, dump, ["1", "NODALE", "FULL_INTERLACE"])
82 if st != 0 or not os.path.exists(dump):
83 raise Exception("Error mpdump %s" % med)
85 # replace file name with "filename"
86 with open(dump, "r") as ff:
87 lines = ff.readlines()
88 with open(dump, "w") as dumpfile:
91 line.index('Universal name of mesh')
94 dumpfile.write(line.replace(med, 'filename'))
102 """ % (file1, file2))
104 if not os.path.exists(file1):
105 print("compMED: file not found: '%s'" % file1)
106 print("<<<< compMED\n")
108 if not os.path.exists(file2):
109 print("compMED: file not found: '%s'" % file2)
110 print("<<<< compMED\n")
113 dump1 = do_dump(file1)
114 dump2 = do_dump(file2)
116 diff_cmd = "diff %s %s %s" % (diff_flags, dump1, dump2)
117 print(" >" + diff_cmd)
118 pdiff = subprocess.Popen(diff_cmd, shell=True, stdout=subprocess.PIPE)
119 status = pdiff.wait()
120 print(" Diff =", status)
122 print(pdiff.stdout.read())
124 print("<<<< compMED\n")
128 class TOOLS_class(object):
129 def __init__(self, base_ressources_dir, tmp_dir, test_ressources_dir):
130 self.base_ressources_dir = base_ressources_dir
131 self.tmp_dir = tmp_dir
132 self.test_ressources_dir = test_ressources_dir
138 def ERROR(self, message):
139 # Simulation d'un plantage
142 def compMED(self, file1, file2, tol=0):
143 return compMED(file1, file2, tol, "--ignore-all-space")
145 def compFloat(self, f1, f2, tol=10e-10):
146 return compFloat(f1, f2, tol)
148 def compFiles(self, f1, f2, tol=0):
149 return compFiles(f1, f2, tol)
151 def get_inFile(self, name=None):
153 return self.base_ressources_dir
154 self.inFiles.append(name)
155 return os.path.join(self.base_ressources_dir, name)
157 def get_outFile(self, name=None):
160 return os.path.join(self.tmp_dir, name)
162 def writeInFiles(self, pylog):
163 pylog.write('inFiles=%s\n' % str(self.inFiles))