From: Stefan Behnel Date: Thu, 7 Apr 2011 18:17:52 +0000 (+0200) Subject: fixes for I/O handling in test runner X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=40545bdaaf8814124b28bff651ce0f112b3df864;p=cython.git fixes for I/O handling in test runner --- diff --git a/runtests.py b/runtests.py index cee950f3..4dcac43e 100644 --- a/runtests.py +++ b/runtests.py @@ -22,6 +22,11 @@ try: except ImportError: import pickle +try: + from io import open as io_open +except ImportError: + from codecs import open as io_open + try: import threading except ImportError: # No threads, no problems @@ -130,17 +135,21 @@ def memoize(f): def parse_tags(filepath): tags = defaultdict(list) - for line in open(filepath): - line = line.strip() - if not line: - continue - if line[0] != '#': - break - ix = line.find(':') - if ix != -1: - tag = line[1:ix].strip() - values = line[ix+1:].split(',') - tags[tag].extend([value.strip() for value in values]) + f = io_open(filepath, encoding='ISO-8859-1', errors='replace') + try: + for line in f: + line = line.strip() + if not line: + continue + if line[0] != '#': + break + ix = line.find(':') + if ix != -1: + tag = line[1:ix].strip() + values = line[ix+1:].split(',') + tags[tag].extend([value.strip() for value in values]) + finally: + f.close() return tags parse_tags = memoize(parse_tags) @@ -400,10 +409,10 @@ class CythonCompileTestCase(unittest.TestCase): 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_and_output = codecs.open(source_file, 'rU', 'ISO-8859-1') + source_and_output = io_open(source_file, 'rU', encoding='ISO-8859-1') try: - out = codecs.open(os.path.join(workdir, module + os.path.splitext(source_file)[1]), - 'w', 'ISO-8859-1') + out = io_open(os.path.join(workdir, module + os.path.splitext(source_file)[1]), + 'w', encoding='ISO-8859-1') for line in source_and_output: last_line = line if line.startswith("_ERRORS"):