diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/CMakeLists.txt | 3 | ||||
-rw-r--r-- | test/cmark.py | 10 | ||||
-rw-r--r-- | test/normalize.py | 42 | ||||
-rw-r--r-- | test/pathological_tests.py | 20 | ||||
-rwxr-xr-x | test/spec_tests.py | 20 |
5 files changed, 49 insertions, 46 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6a46dc9..f08b325 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,7 @@ # To get verbose output: cmake --build build --target "test" -- ARGS='-V' -set(PYTHON python) +find_package(PythonInterp 3 REQUIRED) +set(PYTHON ${PYTHON_EXECUTABLE}) if (WIN32) file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/src WIN_DLL_DIR) diff --git a/test/cmark.py b/test/cmark.py index 432a3e0..21d0b3f 100644 --- a/test/cmark.py +++ b/test/cmark.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- from ctypes import CDLL, c_char_p, c_long @@ -7,11 +7,13 @@ import platform def pipe_through_prog(prog, text): p1 = Popen(prog.split(), stdout=PIPE, stdin=PIPE, stderr=PIPE) - [result, err] = p1.communicate(input=text) - return [p1.returncode, result, err] + [result, err] = p1.communicate(input=text.encode('utf-8')) + return [p1.returncode, result.decode('utf-8'), err] def use_library(lib, text): - return [0, lib(text, len(text)), ''] + textbytes = text.encode('utf-8') + textlen = len(textbytes) + return [0, lib(textbytes, textlen).decode('utf-8'), ''] class CMark: def __init__(self, prog=None, library_dir=None): diff --git a/test/normalize.py b/test/normalize.py index 894a837..03d958e 100644 --- a/test/normalize.py +++ b/test/normalize.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from HTMLParser import HTMLParser, HTMLParseError -from htmlentitydefs import name2codepoint +from html.parser import HTMLParser, HTMLParseError +from html.entities import name2codepoint import sys import re import cgi @@ -14,7 +14,7 @@ class MyHTMLParser(HTMLParser): HTMLParser.__init__(self) self.last = "starttag" self.in_pre = False - self.output = u"" + self.output = "" self.last_tag = "" def handle_data(self, data): after_tag = self.last == "endtag" or self.last == "starttag" @@ -74,7 +74,7 @@ class MyHTMLParser(HTMLParser): self.last = "pi" def handle_entityref(self, name): try: - c = unichr(name2codepoint[name]) + c = chr(name2codepoint[name]) except KeyError: c = None self.output_char(c, '&' + name + ';') @@ -82,22 +82,22 @@ class MyHTMLParser(HTMLParser): def handle_charref(self, name): try: if name.startswith("x"): - c = unichr(int(name[1:], 16)) + c = chr(int(name[1:], 16)) else: - c = unichr(int(name)) + c = chr(int(name)) except ValueError: c = None self.output_char(c, '&' + name + ';') self.last = "ref" # Helpers. def output_char(self, c, fallback): - if c == u'<': + if c == '<': self.output += "<" - elif c == u'>': + elif c == '>': self.output += ">" - elif c == u'&': + elif c == '&': self.output += "&" - elif c == u'"': + elif c == '"': self.output += """ elif c == None: self.output += fallback @@ -122,43 +122,43 @@ def normalize_html(html): in pre tags): >>> normalize_html("<p>a \t b</p>") - u'<p>a b</p>' + '<p>a b</p>' >>> normalize_html("<p>a \t\nb</p>") - u'<p>a b</p>' + '<p>a b</p>' * Whitespace surrounding block-level tags is removed. >>> normalize_html("<p>a b</p>") - u'<p>a b</p>' + '<p>a b</p>' >>> normalize_html(" <p>a b</p>") - u'<p>a b</p>' + '<p>a b</p>' >>> normalize_html("<p>a b</p> ") - u'<p>a b</p>' + '<p>a b</p>' >>> normalize_html("\n\t<p>\n\t\ta b\t\t</p>\n\t") - u'<p>a b</p>' + '<p>a b</p>' >>> normalize_html("<i>a b</i> ") - u'<i>a b</i> ' + '<i>a b</i> ' * Self-closing tags are converted to open tags. >>> normalize_html("<br />") - u'<br>' + '<br>' * Attributes are sorted and lowercased. >>> normalize_html('<a title="bar" HREF="foo">x</a>') - u'<a href="foo" title="bar">x</a>' + '<a href="foo" title="bar">x</a>' * References are converted to unicode, except that '<', '>', '&', and '"' are rendered using entities. >>> normalize_html("∀&><"") - u'\u2200&><"' + '\u2200&><"' """ html_chunk_re = re.compile("(\<!\[CDATA\[.*?\]\]\>|\<[^>]*\>|[^<]+)") @@ -171,7 +171,7 @@ def normalize_html(html): if chunk.group(0)[:8] == "<![CDATA": parser.output += chunk.group(0) else: - parser.feed(chunk.group(0).decode(encoding='UTF-8')) + parser.feed(chunk.group(0)) parser.close() return parser.output except HTMLParseError as e: diff --git a/test/pathological_tests.py b/test/pathological_tests.py index 719e317..0e991f9 100644 --- a/test/pathological_tests.py +++ b/test/pathological_tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- import re @@ -30,8 +30,8 @@ pathological = { ((("> " * 50000) + "a"), re.compile("(<blockquote>\n){50000}")), "U+0000 in input": - ("abc\0de\0", - re.compile("abc(�)?de(�)?")) + ("abc\u0000de\u0000", + re.compile("abc\ufffd?de\ufffd?")) } whitespace_re = re.compile('/s+/') @@ -39,24 +39,24 @@ passed = 0 errored = 0 failed = 0 -print "Testing pathological cases:" +print("Testing pathological cases:") for description in pathological: - print description + print(description) (inp, regex) = pathological[description] [rc, actual, err] = cmark.to_html(inp) if rc != 0: errored += 1 - print description - print "program returned error code %d" % rc + print(description) + print("program returned error code %d" % rc) print(err) elif regex.search(actual): passed += 1 else: - print description, 'failed' - print(actual) + print(description, 'failed') + print(repr(actual)) failed += 1 -print "%d passed, %d failed, %d errored" % (passed, failed, errored) +print("%d passed, %d failed, %d errored" % (passed, failed, errored)) if (failed == 0 and errored == 0): exit(0) else: diff --git a/test/spec_tests.py b/test/spec_tests.py index aa172a0..b8b480e 100755 --- a/test/spec_tests.py +++ b/test/spec_tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys @@ -33,7 +33,7 @@ if __name__ == "__main__": args = parser.parse_args(sys.argv[1:]) def print_test_header(headertext, example_number, start_line, end_line): - print "Example %d (lines %d-%d) %s" % (example_number,start_line,end_line,headertext) + print("Example %d (lines %d-%d) %s" % (example_number,start_line,end_line,headertext)) def do_test(test, normalize, result_counts): [retcode, actual_html, err] = cmark.to_html(test['markdown']) @@ -43,7 +43,7 @@ def do_test(test, normalize, result_counts): if normalize: try: passed = normalize_html(actual_html) == normalize_html(expected_html) - except UnicodeDecodeError, e: + except UnicodeDecodeError as e: unicode_error = e passed = False else: @@ -54,9 +54,9 @@ def do_test(test, normalize, result_counts): print_test_header(test['section'], test['example'], test['start_line'], test['end_line']) sys.stdout.write(test['markdown']) if unicode_error: - print "Unicode error: " + str(unicode_error) - print "Expected: " + repr(expected_html) - print "Got: " + repr(actual_html) + print("Unicode error: " + str(unicode_error)) + print("Expected: " + repr(expected_html)) + print("Got: " + repr(actual_html)) else: expected_html_lines = expected_html.splitlines(True) actual_html_lines = actual_html.splitlines(True) @@ -67,7 +67,7 @@ def do_test(test, normalize, result_counts): result_counts['fail'] += 1 else: print_test_header(test['section'], test['example'], test['start_line'], test['end_line']) - print "program returned error code %d" % retcode + print("program returned error code %d" % retcode) print(err) result_counts['error'] += 1 @@ -114,7 +114,7 @@ def get_tests(specfile): if __name__ == "__main__": if args.debug_normalization: - print normalize_html(sys.stdin.read()) + print(normalize_html(sys.stdin.read())) exit(0) all_tests = get_tests(args.spec) @@ -124,7 +124,7 @@ if __name__ == "__main__": pattern_re = re.compile('.') tests = [ test for test in all_tests if re.search(pattern_re, test['section']) and (not args.number or test['example'] == args.number) ] if args.dump_tests: - print json.dumps(tests, ensure_ascii=False, indent=2) + print(json.dumps(tests, ensure_ascii=False, indent=2)) exit(0) else: skipped = len(all_tests) - len(tests) @@ -132,7 +132,7 @@ if __name__ == "__main__": result_counts = {'pass': 0, 'fail': 0, 'error': 0, 'skip': skipped} for test in tests: do_test(test, args.normalize, result_counts) - print "{pass} passed, {fail} failed, {error} errored, {skip} skipped".format(**result_counts) + print("{pass} passed, {fail} failed, {error} errored, {skip} skipped".format(**result_counts)) if result_counts['fail'] == 0 and result_counts['error'] == 0: exit(0) else: |