##// END OF EJS Templates
run-tests.py: fix handling of newlines....
Vadim Gelfer -
r2247:546c76e5 default
parent child Browse files
Show More
@@ -34,10 +34,25 def vlog(*msg):
34 print m,
34 print m,
35 print
35 print
36
36
37 def splitnewlines(text):
38 '''like str.splitlines, but only split on newlines.
39 keep line endings.'''
40 i = 0
41 lines = []
42 while True:
43 n = text.find('\n', i)
44 if n == -1:
45 last = text[i:]
46 if last:
47 lines.append(last)
48 return lines
49 lines.append(text[i:n+1])
50 i = n + 1
51
37 def show_diff(expected, output):
52 def show_diff(expected, output):
38 for line in difflib.unified_diff(expected, output,
53 for line in difflib.unified_diff(expected, output,
39 "Expected output", "Test output", lineterm=''):
54 "Expected output", "Test output", lineterm=''):
40 print line
55 sys.stdout.write(line)
41
56
42 def find_program(program):
57 def find_program(program):
43 """Search PATH for a executable program"""
58 """Search PATH for a executable program"""
@@ -125,7 +140,7 def output_coverage():
125 vlog("# Running: "+cmd)
140 vlog("# Running: "+cmd)
126 os.system(cmd)
141 os.system(cmd)
127
142
128 def run(cmd, split_lines=True):
143 def run(cmd):
129 """Run command in a sub-process, capturing the output (stdout and stderr).
144 """Run command in a sub-process, capturing the output (stdout and stderr).
130 Return the exist code, and output."""
145 Return the exist code, and output."""
131 # TODO: Use subprocess.Popen if we're running on Python 2.4
146 # TODO: Use subprocess.Popen if we're running on Python 2.4
@@ -141,9 +156,7 def run(cmd, split_lines=True):
141 proc.tochild.close()
156 proc.tochild.close()
142 output = proc.fromchild.read()
157 output = proc.fromchild.read()
143 ret = proc.wait()
158 ret = proc.wait()
144 if split_lines:
159 return ret, splitnewlines(output)
145 output = output.splitlines()
146 return ret, output
147
160
148 def run_one(test):
161 def run_one(test):
149 vlog("# Test", test)
162 vlog("# Test", test)
@@ -180,10 +193,10 def run_one(test):
180 # If reference output file exists, check test output against it
193 # If reference output file exists, check test output against it
181 if os.path.exists(ref):
194 if os.path.exists(ref):
182 f = open(ref, "r")
195 f = open(ref, "r")
183 ref_out = f.read().splitlines()
196 ref_out = splitnewlines(f.read())
184 f.close()
197 f.close()
185 else:
198 else:
186 ref_out = ''
199 ref_out = ['']
187 if out != ref_out:
200 if out != ref_out:
188 diffret = 1
201 diffret = 1
189 print "\nERROR: %s output changed" % (test)
202 print "\nERROR: %s output changed" % (test)
@@ -194,10 +207,9 def run_one(test):
194 ret = diffret
207 ret = diffret
195
208
196 if ret != 0: # Save errors to a file for diagnosis
209 if ret != 0: # Save errors to a file for diagnosis
197 f = open(err, "w")
210 f = open(err, "wb")
198 for line in out:
211 for line in out:
199 f.write(line)
212 f.write(line)
200 f.write("\n")
201 f.close()
213 f.close()
202
214
203 os.chdir(TESTDIR)
215 os.chdir(TESTDIR)
General Comments 0
You need to be logged in to leave comments. Login now