Diff
Modified: trunk/Tools/ChangeLog (252615 => 252616)
--- trunk/Tools/ChangeLog 2019-11-19 01:35:29 UTC (rev 252615)
+++ trunk/Tools/ChangeLog 2019-11-19 01:51:17 UTC (rev 252616)
@@ -1,3 +1,31 @@
+2019-11-18 Jonathan Bedard <[email protected]>
+
+ Python 3: Support run-api-tests
+ https://bugs.webkit.org/show_bug.cgi?id=204252
+
+ Rubber-stamped by Aakash Jain.
+
+ * Scripts/webkitpy/api_tests/manager.py:
+ (Manager._collect_tests): Use items over iteritems.
+ (Manager._print_tests_result_with_status): Use compatible iteritems.
+ (Manager.run): Use range over xrange, use compatible iteritems.
+ * Scripts/webkitpy/api_tests/runner.py:
+ (Runner.run): Use compatible iteritems.
+ (Runner.result_map_by_status): Ditto.
+ (_Worker._run_single_test): Server process returns byte arrays, not strings.
+ (_Worker.handle): Use items over iteritems, use range over xrange.
+ * Scripts/webkitpy/common/message_pool.py:
+ (_MessagePool.run): Use range over xrange.
+ (_MessagePool._start_workers): Ditto.
+ * Scripts/webkitpy/common/multiprocessing_bootstrap.py: Remove version check.
+ * Scripts/webkitpy/port/base.py:
+ (Port.check_api_test_build):Use items over iteritems.
+ (Port.commits_for_upload): Ditto.
+ * Scripts/webkitpy/port/server_process.py:
+ (ServerProcess._reset): Use byte array over string.
+ (ServerProcess._pop_stdout_line_if_ready): Check for bytes newline.
+ (ServerProcess._pop_stderr_line_if_ready): Ditto.
+
2019-11-18 Andres Gonzalez <[email protected]>
Run AccessibilityController::rootElement on secondary thread to simulate HIServices during LayoutTests.
Modified: trunk/Tools/Scripts/webkitpy/api_tests/manager.py (252615 => 252616)
--- trunk/Tools/Scripts/webkitpy/api_tests/manager.py 2019-11-19 01:35:29 UTC (rev 252615)
+++ trunk/Tools/Scripts/webkitpy/api_tests/manager.py 2019-11-19 01:51:17 UTC (rev 252616)
@@ -25,9 +25,9 @@
import time
from webkitpy.api_tests.runner import Runner
+from webkitpy.common.iteration_compatibility import iteritems
from webkitpy.common.system.executive import ScriptError
from webkitpy.results.upload import Upload
-
from webkitpy.xcode.simulated_device import DeviceRequest, SimulatedDeviceManager
_log = logging.getLogger(__name__)
@@ -91,7 +91,7 @@
def _collect_tests(self, args):
available_tests = []
specified_binaries = self._binaries_for_arguments(args)
- for canonicalized_binary, path in self._port.path_to_api_test_binaries().iteritems():
+ for canonicalized_binary, path in self._port.path_to_api_test_binaries().items():
if canonicalized_binary not in specified_binaries:
continue
try:
@@ -124,7 +124,7 @@
self._stream.writeln(runner.NAME_FOR_STATUS[status])
self._stream.writeln('')
need_newline = False
- for test, output in mapping.iteritems():
+ for test, output in iteritems(mapping):
need_newline = Manager._print_test_result(self._stream, test, output)
if need_newline:
self._stream.writeln('')
@@ -182,7 +182,7 @@
self._stream.writeln(test)
return Manager.SUCCESS
- test_names = [test for test in test_names for _ in xrange(self._options.repeat_each)]
+ test_names = [test for test in test_names for _ in range(self._options.repeat_each)]
if self._options.repeat_each != 1:
_log.debug('Repeating each test {} times'.format(self._options.iterations))
@@ -189,7 +189,7 @@
try:
_log.info('Running tests')
runner = Runner(self._port, self._stream)
- for i in xrange(self._options.iterations):
+ for i in range(self._options.iterations):
_log.debug('\nIteration {}'.format(i + 1))
runner.run(test_names, int(self._options.child_processes) if self._options.child_processes else self._port.default_child_processes())
except KeyboardInterrupt:
@@ -235,7 +235,7 @@
self._print_tests_result_with_status(runner.STATUS_CRASHED, runner)
self._print_tests_result_with_status(runner.STATUS_TIMEOUT, runner)
- for test, result in runner.results.iteritems():
+ for test, result in iteritems(runner.results):
status_to_string = {
runner.STATUS_FAILED: 'Failed',
runner.STATUS_CRASHED: 'Crashed',
@@ -271,7 +271,7 @@
tests_skipped=len(result_dictionary['Skipped']),
),
results={test: Upload.create_test_result(actual=status_to_test_result[result[0]])
- for test, result in runner.results.iteritems() if result[0] in status_to_test_result},
+ for test, result in iteritems(runner.results) if result[0] in status_to_test_result},
)
for url in self._options.report_urls:
self._stream.write_update('Uploading to {} ...'.format(url))
Modified: trunk/Tools/Scripts/webkitpy/api_tests/runner.py (252615 => 252616)
--- trunk/Tools/Scripts/webkitpy/api_tests/runner.py 2019-11-19 01:35:29 UTC (rev 252615)
+++ trunk/Tools/Scripts/webkitpy/api_tests/runner.py 2019-11-19 01:51:17 UTC (rev 252616)
@@ -25,8 +25,10 @@
import time
from webkitpy.common import message_pool
+from webkitpy.common.iteration_compatibility import iteritems
from webkitpy.port.server_process import ServerProcess, _log as server_process_logger
from webkitpy.xcode.simulated_device import SimulatedDeviceManager
+from webkitpy.common.unicode_compatibility import decode_for
class Runner(object):
@@ -90,7 +92,7 @@
try:
self._num_workers = min(num_workers, len(shards))
with message_pool.get(self, lambda caller: _Worker(caller, self.port, shards), self._num_workers) as pool:
- pool.run(('test', shard) for shard, _ in shards.iteritems())
+ pool.run(('test', shard) for shard, _ in iteritems(shards))
finally:
server_process_logger.setLevel(original_level)
@@ -129,7 +131,7 @@
def result_map_by_status(self, status=None):
map = {}
- for test_name, result in self.results.iteritems():
+ for test_name, result in iteritems(self.results):
if result[0] == status:
map[test_name] = result[1]
return map
@@ -177,9 +179,11 @@
break
if stderr_line:
+ stderr_line = decode_for(stderr_line, str)
stderr_buffer += stderr_line
self.post('log', output=stderr_line[:-1])
if stdout_line:
+ stdout_line = decode_for(stdout_line, str)
if '**PASS**' in stdout_line:
status = Runner.STATUS_PASSED
elif '**FAIL**' in stdout_line:
@@ -198,8 +202,8 @@
status = Runner.STATUS_FAILED
finally:
- remaining_stderr = server_process.pop_all_buffered_stderr()
- remaining_stdout = server_process.pop_all_buffered_stdout()
+ remaining_stderr = decode_for(server_process.pop_all_buffered_stderr(), str)
+ remaining_stdout = decode_for(server_process.pop_all_buffered_stdout(), str)
self.post('log', output=remaining_stderr + remaining_stdout)
output_buffer = stderr_buffer + stdout_buffer + remaining_stderr + remaining_stdout
server_process.stop()
@@ -290,5 +294,5 @@
if split_test_name[0] not in binary_map:
binary_map[split_test_name[0]] = []
binary_map[split_test_name[0]].append('.'.join(split_test_name[1:]))
- for binary_name, test_list in binary_map.iteritems():
+ for binary_name, test_list in binary_map.items():
self._run_shard_with_binary(binary_name, test_list)
Modified: trunk/Tools/Scripts/webkitpy/common/message_pool.py (252615 => 252616)
--- trunk/Tools/Scripts/webkitpy/common/message_pool.py 2019-11-19 01:35:29 UTC (rev 252615)
+++ trunk/Tools/Scripts/webkitpy/common/message_pool.py 2019-11-19 01:51:17 UTC (rev 252616)
@@ -98,7 +98,7 @@
for message in shards:
self._messages_to_worker.put(_Message(self._name, message[0], message[1:], from_user=True, logs=()))
- for _ in xrange(self._num_workers):
+ for _ in range(self._num_workers):
self._messages_to_worker.put(_Message(self._name, 'stop', message_args=(), from_user=False, logs=()))
self.wait()
@@ -110,7 +110,7 @@
if self._running_inline or self._can_pickle(self._host):
host = self._host
- for worker_number in xrange(self._num_workers):
+ for worker_number in range(self._num_workers):
worker = _Worker(host, self._messages_to_manager, self._messages_to_worker, self._worker_factory, worker_number, self._running_inline, self if self._running_inline else None, self._worker_log_level())
self._workers.append(worker)
worker.start()
Modified: trunk/Tools/Scripts/webkitpy/common/multiprocessing_bootstrap.py (252615 => 252616)
--- trunk/Tools/Scripts/webkitpy/common/multiprocessing_bootstrap.py 2019-11-19 01:35:29 UTC (rev 252615)
+++ trunk/Tools/Scripts/webkitpy/common/multiprocessing_bootstrap.py 2019-11-19 01:51:17 UTC (rev 252616)
@@ -38,9 +38,7 @@
import subprocess
import sys
-from webkitpy.common import version_check # 'unused import' pylint: disable=W0611
-
def run(*parts):
up = os.path.dirname
script_dir = up(up(up(os.path.abspath(__file__))))
Modified: trunk/Tools/Scripts/webkitpy/port/base.py (252615 => 252616)
--- trunk/Tools/Scripts/webkitpy/port/base.py 2019-11-19 01:35:29 UTC (rev 252615)
+++ trunk/Tools/Scripts/webkitpy/port/base.py 2019-11-19 01:51:17 UTC (rev 252616)
@@ -251,7 +251,7 @@
if not self._root_was_set and self.get_option('build') and not self._build_api_tests(wtf_only=(canonicalized_binaries == ['TestWTF'])):
return False
- for binary, path in self.path_to_api_test_binaries().iteritems():
+ for binary, path in self.path_to_api_test_binaries().items():
if binary not in canonicalized_binaries:
continue
if not self._filesystem.exists(path):
@@ -1605,7 +1605,7 @@
repos['webkit'] = up(up(up(up(up(os.path.abspath(__file__))))))
commits = []
- for repo_id, path in repos.iteritems():
+ for repo_id, path in repos.items():
scm = SCMDetector(self._filesystem, self._executive).detect_scm_system(path)
commits.append(Upload.create_commit(
repository_id=repo_id,
Modified: trunk/Tools/Scripts/webkitpy/port/server_process.py (252615 => 252616)
--- trunk/Tools/Scripts/webkitpy/port/server_process.py 2019-11-19 01:35:29 UTC (rev 252615)
+++ trunk/Tools/Scripts/webkitpy/port/server_process.py 2019-11-19 01:51:17 UTC (rev 252616)
@@ -110,8 +110,8 @@
self._proc.stderr = None
self._proc = None
- self._output = str() # bytesarray() once we require Python 2.6
- self._error = str() # bytesarray() once we require Python 2.6
+ self._output = b''
+ self._error = b''
self._crashed = False
self.timed_out = False
@@ -188,13 +188,13 @@
self._crashed = True
def _pop_stdout_line_if_ready(self):
- index_after_newline = self._output.find('\n') + 1
+ index_after_newline = self._output.find(b'\n') + 1
if index_after_newline > 0:
return self._pop_output_bytes(index_after_newline)
return None
def _pop_stderr_line_if_ready(self):
- index_after_newline = self._error.find('\n') + 1
+ index_after_newline = self._error.find(b'\n') + 1
if index_after_newline > 0:
return self._pop_error_bytes(index_after_newline)
return None