Auto merge of #26035 - dralley:test-jquery-py3, r=jdm

Make tests/jquery/run_jquery.py Python3 compatible

Attempt to make it py3 compatible.

Ran the "python-migrate" tool, and did a couple of manual adjustments, which are directly noted with comments below.

re: https://github.com/servo/servo/issues/23607

```
(.env) [dalley@localhost servo]$ python3 ./mach test-jquery
Already up to date.
Testing jQuery on Servo!
	selector
		OK: element - jQuery only
		OK: id
		OK: class - jQuery only
		OK: name
		OK: selectors with comma
		OK: child and adjacent
		OK: attributes
		OK: disconnected nodes
		OK: disconnected nodes - jQuery only
		OK: attributes - jQuery.attr
		OK: jQuery.contains
		OK: jQuery.uniqueSort
		OK: Sizzle cache collides with multiple Sizzles on a page
		FAIL: Iframe dispatch should not affect jQuery (#13936): WAS ok=0 fail=1 total=1 NOW ok=1 fail=0 total=1
	Ran 14 test groups. 1 unexpected results.
	163 tests succeeded of 167 (97.60%)

```

Not sure if the test failure on the last one is an issue.
This commit is contained in:
bors-servo 2020-03-25 15:32:52 -04:00 committed by GitHub
commit 145c3a5502
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,15 +4,18 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this # License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/. # file, You can obtain one at https://mozilla.org/MPL/2.0/.
from __future__ import absolute_import
from __future__ import print_function
import os import os
import re import re
import subprocess import subprocess
import sys import sys
import BaseHTTPServer import six.moves.BaseHTTPServer
import SimpleHTTPServer import six.moves.SimpleHTTPServer
import SocketServer import six.moves.socketserver
import threading import threading
import urlparse import six.moves.urllib.parse
import six
# List of jQuery modules that will be tested. # List of jQuery modules that will be tested.
# TODO(gw): Disabled most of them as something has been # TODO(gw): Disabled most of them as something has been
@ -46,7 +49,7 @@ JQUERY_MODULES = [
TEST_SERVER_PORT = 8192 TEST_SERVER_PORT = 8192
# A regex for matching console.log output lines from the test runner. # A regex for matching console.log output lines from the test runner.
REGEX_PATTERN = "^\[jQuery test\] \[([0-9]+)/([0-9]+)/([0-9]+)] (.*)" REGEX_PATTERN = r"^\[jQuery test\] \[([0-9]+)/([0-9]+)/([0-9]+)] (.*)"
# The result of a single test group. # The result of a single test group.
@ -103,7 +106,7 @@ def run_servo(servo_exe, module):
break break
line = line.rstrip() line = line.rstrip()
try: try:
name, test_result = parse_line_to_result(line) name, test_result = parse_line_to_result(line.decode('utf-8'))
yield name, test_result yield name, test_result
except AttributeError: except AttributeError:
pass pass
@ -124,7 +127,7 @@ def read_existing_results(module):
# Write a set of results to file # Write a set of results to file
def write_results(module, results): def write_results(module, results):
with open(module_filename(module), 'w') as file: with open(module_filename(module), 'w') as file:
for result in test_results.itervalues(): for result in six.itervalues(test_results):
file.write(result.text + '\n') file.write(result.text + '\n')
@ -135,24 +138,24 @@ def print_usage():
# Run a simple HTTP server to serve up the jQuery test suite # Run a simple HTTP server to serve up the jQuery test suite
def run_http_server(): def run_http_server():
class ThreadingSimpleServer(SocketServer.ThreadingMixIn, class ThreadingSimpleServer(six.moves.socketserver.ThreadingMixIn,
BaseHTTPServer.HTTPServer): six.moves.BaseHTTPServer.HTTPServer):
allow_reuse_address = True allow_reuse_address = True
class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): class RequestHandler(six.moves.SimpleHTTPServer.SimpleHTTPRequestHandler):
# TODO(gw): HACK copy the fixed version from python # TODO(gw): HACK copy the fixed version from python
# main repo - due to https://bugs.python.org/issue23112 # main repo - due to https://bugs.python.org/issue23112
def send_head(self): def send_head(self):
path = self.translate_path(self.path) path = self.translate_path(self.path)
f = None f = None
if os.path.isdir(path): if os.path.isdir(path):
parts = urlparse.urlsplit(self.path) parts = six.moves.urllib.parse.urlsplit(self.path)
if not parts.path.endswith('/'): if not parts.path.endswith('/'):
# redirect browser - doing basically what apache does # redirect browser - doing basically what apache does
self.send_response(301) self.send_response(301)
new_parts = (parts[0], parts[1], parts[2] + '/', new_parts = (parts[0], parts[1], parts[2] + '/',
parts[3], parts[4]) parts[3], parts[4])
new_url = urlparse.urlunsplit(new_parts) new_url = six.moves.urllib.parse.urlunsplit(new_parts)
self.send_header("Location", new_url) self.send_header("Location", new_url)
self.end_headers() self.end_headers()
return None return None
@ -251,6 +254,7 @@ if __name__ == '__main__':
print("\t{0} tests succeeded of {1} ({2:.2f}%)".format(individual_success, print("\t{0} tests succeeded of {1} ({2:.2f}%)".format(individual_success,
individual_total, individual_total,
100.0 * individual_success / individual_total)) 100.0 * individual_success / individual_total))
if unexpected_count > 0: if unexpected_count > 0:
sys.exit(1) sys.exit(1)
elif cmd == "update": elif cmd == "update":