4 # ToolBox for test framework
11 Exception class for test errors.
13 class SatTestError(Exception):
14 def __init__(self, value):
17 return repr(self.value)
19 class SatNotApplicableError(Exception):
20 def __init__(self, value):
23 return repr(self.value)
27 raise SatTestError(message)
29 def NOT_APPLICABLE(message):
31 raise SatNotApplicableError(message)
34 # Compares 2 numbers with tolerance tol.
35 def compFloat(f1, f2, tol=10e-10):
37 print "|f1-f2| = %s (tol=%s)" % (str(diff), str(tol))
46 def compFiles(f1, f2, tol=0):
47 assert os.path.exists(f1), "compFiles: file not found: %s" % f1
48 assert os.path.exists(f2), "compFiles: file not found: %s" % f2
49 diffLine = os.popen("diff -y --suppress-common-lines %s %s" % (f1, f2))
50 diff = len(string.split(diffLine.read(), "\n"))
52 print "nb of diff lines = %s (tol=%s)" % (str(diff), str(tol))
60 # Uses mdump to dump a med file.
61 def mdump_med(med_file, dump_file, options):
62 assert isinstance(options, list), "Bad options for mdump: %s" % options
63 assert len(options) == 3, "Bad options for mdump: %s" % options
64 cmd = "mdump %s %s" % (med_file, " ".join(options))
67 df = open(dump_file, "w")
68 pdump = subprocess.Popen(cmd, shell=True, stdout=df)
75 # Compares 2 med files by using mdump.
76 def compMED(file1, file2, tol=0, diff_flags=""):
77 assert os.path.exists(file1), "compMED: file not found: %s" % file1
78 assert os.path.exists(file2), "compMED: file not found: %s" % file2
82 print " file1:", file1
83 print " file2:", file2
86 dump = os.path.join(os.environ['TT_TMP_RESULT'], os.path.basename(med) + ".mdump")
87 st = mdump_med(med, dump, ["1", "NODALE", "FULL_INTERLACE"])
88 if st != 0 or not os.path.exists(dump):
89 raise Exception("Error mpdump %s" % med)
91 # replace file name with "filename"
92 lines = open(dump, "r").readlines()
93 dumpfile = open(dump, "w")
96 line.index('Nom universel du maillage')
99 dumpfile.write(line.replace(med, 'filename'))
102 dump1 = do_dump(file1)
103 dump2 = do_dump(file2)
105 diff_cmd = "diff %s %s %s" % (diff_flags, dump1, dump2)
106 print " >" + diff_cmd
107 pdiff = subprocess.Popen(diff_cmd, shell=True, stdout=subprocess.PIPE)
108 status = pdiff.wait()
109 print " Diff =", status
111 print pdiff.stdout.read()
120 def __init__(self, base_ressources_dir, tmp_dir, test_ressources_dir):
121 self.base_ressources_dir = base_ressources_dir
122 self.tmp_dir = tmp_dir
123 self.test_ressources_dir = test_ressources_dir
129 def ERROR(self, message):
130 # Simulation d'un plantage
133 def compMED(self, file1, file2, tol=0):
134 return compMED(file1, file2, tol, "--ignore-all-space")
136 def compFloat(self, f1, f2, tol=10e-10):
137 return compFloat(f1, f2, tol)
139 def compFiles(self, f1, f2, tol=0):
140 return compFiles(f1, f2, tol)
142 def get_inFile(self, name=None):
144 return self.base_ressources_dir
145 self.inFiles.append(name)
146 return os.path.join(self.base_ressources_dir, name)
148 def get_outFile(self, name=None):
151 return os.path.join(self.tmp_dir, name)
153 def writeInFiles(self, pylog):
154 pylog.write('inFiles=%s\n' % str(self.inFiles))