Commit 40545bda authored by Stefan Behnel's avatar Stefan Behnel

fixes for I/O handling in test runner

parent 10cbc927
...@@ -22,6 +22,11 @@ try: ...@@ -22,6 +22,11 @@ try:
except ImportError: except ImportError:
import pickle import pickle
try:
from io import open as io_open
except ImportError:
from codecs import open as io_open
try: try:
import threading import threading
except ImportError: # No threads, no problems except ImportError: # No threads, no problems
...@@ -130,17 +135,21 @@ def memoize(f): ...@@ -130,17 +135,21 @@ def memoize(f):
def parse_tags(filepath): def parse_tags(filepath):
tags = defaultdict(list) tags = defaultdict(list)
for line in open(filepath): f = io_open(filepath, encoding='ISO-8859-1', errors='replace')
line = line.strip() try:
if not line: for line in f:
continue line = line.strip()
if line[0] != '#': if not line:
break continue
ix = line.find(':') if line[0] != '#':
if ix != -1: break
tag = line[1:ix].strip() ix = line.find(':')
values = line[ix+1:].split(',') if ix != -1:
tags[tag].extend([value.strip() for value in values]) tag = line[1:ix].strip()
values = line[ix+1:].split(',')
tags[tag].extend([value.strip() for value in values])
finally:
f.close()
return tags return tags
parse_tags = memoize(parse_tags) parse_tags = memoize(parse_tags)
...@@ -400,10 +409,10 @@ class CythonCompileTestCase(unittest.TestCase): ...@@ -400,10 +409,10 @@ class CythonCompileTestCase(unittest.TestCase):
def split_source_and_output(self, test_directory, module, workdir): def split_source_and_output(self, test_directory, module, workdir):
source_file = self.find_module_source_file(os.path.join(test_directory, module) + '.pyx') source_file = self.find_module_source_file(os.path.join(test_directory, module) + '.pyx')
source_and_output = codecs.open(source_file, 'rU', 'ISO-8859-1') source_and_output = io_open(source_file, 'rU', encoding='ISO-8859-1')
try: try:
out = codecs.open(os.path.join(workdir, module + os.path.splitext(source_file)[1]), out = io_open(os.path.join(workdir, module + os.path.splitext(source_file)[1]),
'w', 'ISO-8859-1') 'w', encoding='ISO-8859-1')
for line in source_and_output: for line in source_and_output:
last_line = line last_line = line
if line.startswith("_ERRORS"): if line.startswith("_ERRORS"):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment