Title: [248270] trunk/Tools
Revision
248270
Author
jbed...@apple.com
Date
2019-08-05 09:42:24 -0700 (Mon, 05 Aug 2019)

Log Message

run-webkit-tests asserts when the iPhone XR simulator is running
https://bugs.webkit.org/show_bug.cgi?id=200404
<rdar://problem/53878739>

Reviewed by Dean Jackson.

Support unicode in all logging statements tied to device model.

* Scripts/webkitpy/layout_tests/controllers/manager.py:
(Manager.run):
* Scripts/webkitpy/layout_tests/views/printing.py:
(Printer.print_baseline_search_path):
* Scripts/webkitpy/port/device.py:
(Device.__repr__):
* Scripts/webkitpy/port/device_port.py:
(DevicePort._install):
(DevicePort.setup_test_run):
(DevicePort.clean_up_test_run):
(DevicePort.configuration_for_upload):
* Scripts/webkitpy/port/ios.py:
(IOSPort.default_baseline_search_path):
* Scripts/webkitpy/xcode/device_type.py:
(DeviceType.__str__):
* Scripts/webkitpy/xcode/simulated_device.py:
(SimulatedDeviceManager.populate_available_devices):
(SimulatedDeviceManager._find_available_name):
(SimulatedDeviceManager._get_device_identifier_for_type):
(SimulatedDeviceManager._create_or_find_device_for_request):
(SimulatedDeviceManager._does_fulfill_request):
(SimulatedDeviceManager._wait_until_device_in_state):
(SimulatedDeviceManager._wait_until_device_is_usable):
(SimulatedDeviceManager._boot_device):
(SimulatedDeviceManager.initialize_devices):
(SimulatedDeviceManager.max_supported_simulators):
(SimulatedDeviceManager.swap):
(SimulatedDevice.is_usable):
(SimulatedDevice._shut_down):
(SimulatedDevice._delete):
(SimulatedDevice.launch_app):
(SimulatedDevice.__repr__):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (248269 => 248270)


--- trunk/Tools/ChangeLog	2019-08-05 16:26:00 UTC (rev 248269)
+++ trunk/Tools/ChangeLog	2019-08-05 16:42:24 UTC (rev 248270)
@@ -1,3 +1,46 @@
+2019-08-05  Jonathan Bedard  <jbed...@apple.com>
+
+        run-webkit-tests asserts when the iPhone XR simulator is running
+        https://bugs.webkit.org/show_bug.cgi?id=200404
+        <rdar://problem/53878739>
+
+        Reviewed by Dean Jackson.
+
+        Support unicode in all logging statements tied to device model.
+
+        * Scripts/webkitpy/layout_tests/controllers/manager.py:
+        (Manager.run):
+        * Scripts/webkitpy/layout_tests/views/printing.py:
+        (Printer.print_baseline_search_path):
+        * Scripts/webkitpy/port/device.py:
+        (Device.__repr__):
+        * Scripts/webkitpy/port/device_port.py:
+        (DevicePort._install):
+        (DevicePort.setup_test_run):
+        (DevicePort.clean_up_test_run):
+        (DevicePort.configuration_for_upload):
+        * Scripts/webkitpy/port/ios.py:
+        (IOSPort.default_baseline_search_path):
+        * Scripts/webkitpy/xcode/device_type.py:
+        (DeviceType.__str__):
+        * Scripts/webkitpy/xcode/simulated_device.py:
+        (SimulatedDeviceManager.populate_available_devices):
+        (SimulatedDeviceManager._find_available_name):
+        (SimulatedDeviceManager._get_device_identifier_for_type):
+        (SimulatedDeviceManager._create_or_find_device_for_request):
+        (SimulatedDeviceManager._does_fulfill_request):
+        (SimulatedDeviceManager._wait_until_device_in_state):
+        (SimulatedDeviceManager._wait_until_device_is_usable):
+        (SimulatedDeviceManager._boot_device):
+        (SimulatedDeviceManager.initialize_devices):
+        (SimulatedDeviceManager.max_supported_simulators):
+        (SimulatedDeviceManager.swap):
+        (SimulatedDevice.is_usable):
+        (SimulatedDevice._shut_down):
+        (SimulatedDevice._delete):
+        (SimulatedDevice.launch_app):
+        (SimulatedDevice.__repr__):
+
 2019-08-04  Chris Dumez  <cdu...@apple.com>
 
         Ping loads should not prevent page caching

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py (248269 => 248270)


--- trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py	2019-08-05 16:26:00 UTC (rev 248269)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py	2019-08-05 16:42:24 UTC (rev 248270)
@@ -184,8 +184,8 @@
         device_type_list = self._port.supported_device_types()
         for device_type in device_type_list:
             """Run the tests and return a RunDetails object with the results."""
-            for_device_type = 'for {} '.format(device_type) if device_type else ''
-            self._printer.write_update('Collecting tests {}...'.format(for_device_type))
+            for_device_type = u'for {} '.format(device_type) if device_type else ''
+            self._printer.write_update(u'Collecting tests {}...'.format(for_device_type))
             try:
                 paths, test_names = self._collect_tests(args, device_type=device_type)
             except IOError:
@@ -192,7 +192,7 @@
                 # This is raised if --test-list doesn't exist
                 return test_run_results.RunDetails(exit_code=-1)
 
-            self._printer.write_update('Parsing expectations {}...'.format(for_device_type))
+            self._printer.write_update(u'Parsing expectations {}...'.format(for_device_type))
             self._expectations[device_type] = test_expectations.TestExpectations(self._port, test_names, force_expectations_pass=self._options.force, device_type=device_type)
             self._expectations[device_type].parse_all_expectations()
 
@@ -259,7 +259,7 @@
 
             self._printer.print_baseline_search_path(device_type=device_type)
 
-            _log.info('Running {}{}'.format(pluralize(len(tests_to_run_by_device[device_type]), 'test'), ' for {}'.format(str(device_type)) if device_type else ''))
+            _log.info(u'Running {}{}'.format(pluralize(len(tests_to_run_by_device[device_type]), 'test'), u' for {}'.format(device_type) if device_type else ''))
             _log.info('')
             start_time_for_device = time.time()
             if not tests_to_run_by_device[device_type]:

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py (248269 => 248270)


--- trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py	2019-08-05 16:26:00 UTC (rev 248269)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/views/printing.py	2019-08-05 16:42:24 UTC (rev 248270)
@@ -99,12 +99,12 @@
         normalize_baseline = lambda baseline_search_path: [
             fs.relpath(x, self._port.layout_tests_dir()).replace("../", "") for x in baseline_search_path]
 
-        self._print_default('Verbose baseline search path: {} -> generic'.format(
-            ' -> '.join(normalize_baseline(full_baseline_search_path))))
+        self._print_default(u'Verbose baseline search path: {} -> generic'.format(
+            u' -> '.join(normalize_baseline(full_baseline_search_path))))
 
         self._print_default('')
-        self._print_default('Baseline search path: {} -> generic'.format(
-            ' -> '.join(normalize_baseline([path for path in full_baseline_search_path if fs.exists(path)]))))
+        self._print_default(u'Baseline search path: {} -> generic'.format(
+            u' -> '.join(normalize_baseline([path for path in full_baseline_search_path if fs.exists(path)]))))
         self._print_default('')
 
     def print_found(self, num_all_test_files, num_to_run, repeat_each, iterations):

Modified: trunk/Tools/Scripts/webkitpy/port/device.py (248269 => 248270)


--- trunk/Tools/Scripts/webkitpy/port/device.py	2019-08-05 16:26:00 UTC (rev 248269)
+++ trunk/Tools/Scripts/webkitpy/port/device.py	2019-08-05 16:42:24 UTC (rev 248270)
@@ -115,4 +115,4 @@
         return not self.__eq__(other)
 
     def __repr__(self):
-        return str(self.platform_device)
+        return u'{}'.format(self.platform_device)

Modified: trunk/Tools/Scripts/webkitpy/port/device_port.py (248269 => 248270)


--- trunk/Tools/Scripts/webkitpy/port/device_port.py	2019-08-05 16:26:00 UTC (rev 248269)
+++ trunk/Tools/Scripts/webkitpy/port/device_port.py	2019-08-05 16:42:24 UTC (rev 248270)
@@ -97,7 +97,7 @@
 
         for i in xrange(self.child_processes()):
             device = self.target_host(i)
-            _log.debug('Installing to {}'.format(device))
+            _log.debug(u'Installing to {}'.format(device))
             # Without passing DYLD_LIBRARY_PATH, libWebCoreTestSupport cannot be loaded and DRT/WKTR will crash pre-launch,
             # leaving a crash log which will be picked up in results. DYLD_FRAMEWORK_PATH is needed to prevent an early crash.
             if not device.install_app(self._path_to_driver(), {'DYLD_LIBRARY_PATH': self._build_path(), 'DYLD_FRAMEWORK_PATH': self._build_path()}):
@@ -162,7 +162,7 @@
             raise RuntimeError(self.NO_DEVICE_MANAGER)
 
         device_type = self._device_type_with_version(device_type)
-        _log.debug('\nCreating devices for {}'.format(device_type))
+        _log.debug(u'\nCreating devices for {}'.format(device_type))
 
         request = DeviceRequest(
             device_type,
@@ -212,7 +212,7 @@
                 if isinstance(e, Exception):
                     exception_list.append([e, trace])
                 else:
-                    exception_list.append([Exception('Exception while tearing down {}'.format(device)), trace])
+                    exception_list.append([Exception(u'Exception while tearing down {}'.format(device)), trace])
 
         if len(exception_list) == 1:
             raise
@@ -247,7 +247,7 @@
         device_type = host.device_type if host else self.DEVICE_TYPE
         model = device_type.hardware_family
         if model and device_type.hardware_type:
-            model += ' {}'.format(device_type.hardware_type)
+            model += u' {}'.format(device_type.hardware_type)
 
         version = self.device_version()
         version_name = None

Modified: trunk/Tools/Scripts/webkitpy/port/ios.py (248269 => 248270)


--- trunk/Tools/Scripts/webkitpy/port/ios.py	2019-08-05 16:26:00 UTC (rev 248269)
+++ trunk/Tools/Scripts/webkitpy/port/ios.py	2019-08-05 16:42:24 UTC (rev 248270)
@@ -74,12 +74,12 @@
 
         base_variants = []
         if hardware_family and hardware_type:
-            base_variants.append('{}-{}-{}'.format(hardware_family, hardware_type, runtime_type))
+            base_variants.append(u'{}-{}-{}'.format(hardware_family, hardware_type, runtime_type))
         if hardware_family:
-            base_variants.append('{}-{}'.format(hardware_family, runtime_type))
-        base_variants.append('{}-{}'.format(IOSPort.port_name, runtime_type))
+            base_variants.append(u'{}-{}'.format(hardware_family, runtime_type))
+        base_variants.append(u'{}-{}'.format(IOSPort.port_name, runtime_type))
         if hardware_family and hardware_type:
-            base_variants.append('{}-{}'.format(hardware_family, hardware_type))
+            base_variants.append(u'{}-{}'.format(hardware_family, hardware_type))
         if hardware_family:
             base_variants.append(hardware_family)
         base_variants.append(IOSPort.port_name)
@@ -92,15 +92,15 @@
                     apple_name = VersionNameMap.map(self.host.platform).to_name(version, platform=IOSPort.port_name, table=INTERNAL_TABLE)
 
                 if apple_name:
-                    expectations.append(self._apple_baseline_path('{}-{}-{}'.format(variant, apple_name.lower().replace(' ', ''), wk_string)))
-                expectations.append(self._webkit_baseline_path('{}-{}-{}'.format(variant, version.major, wk_string)))
+                    expectations.append(self._apple_baseline_path(u'{}-{}-{}'.format(variant, apple_name.lower().replace(' ', ''), wk_string)))
+                expectations.append(self._webkit_baseline_path(u'{}-{}-{}'.format(variant, version.major, wk_string)))
                 if apple_name:
-                    expectations.append(self._apple_baseline_path('{}-{}'.format(variant, apple_name.lower().replace(' ', ''))))
-                expectations.append(self._webkit_baseline_path('{}-{}'.format(variant, version.major)))
+                    expectations.append(self._apple_baseline_path(u'{}-{}'.format(variant, apple_name.lower().replace(' ', ''))))
+                expectations.append(self._webkit_baseline_path(u'{}-{}'.format(variant, version.major)))
 
             if apple_additions():
-                expectations.append(self._apple_baseline_path('{}-{}'.format(variant, wk_string)))
-            expectations.append(self._webkit_baseline_path('{}-{}'.format(variant, wk_string)))
+                expectations.append(self._apple_baseline_path(u'{}-{}'.format(variant, wk_string)))
+            expectations.append(self._webkit_baseline_path(u'{}-{}'.format(variant, wk_string)))
             if apple_additions():
                 expectations.append(self._apple_baseline_path(variant))
             expectations.append(self._webkit_baseline_path(variant))

Modified: trunk/Tools/Scripts/webkitpy/xcode/device_type.py (248269 => 248270)


--- trunk/Tools/Scripts/webkitpy/xcode/device_type.py	2019-08-05 16:26:00 UTC (rev 248269)
+++ trunk/Tools/Scripts/webkitpy/xcode/device_type.py	2019-08-05 16:42:24 UTC (rev 248270)
@@ -115,9 +115,9 @@
         elif self.software_version:
             version = VersionNameMap.map().to_name(self.software_version, platform=self.software_variant.lower())
 
-        return '{hardware_family}{hardware_type} running {version}'.format(
+        return u'{hardware_family}{hardware_type} running {version}'.format(
             hardware_family=self.hardware_family if self.hardware_family else 'Device',
-            hardware_type=' {}'.format(self.hardware_type) if self.hardware_type else '',
+            hardware_type=u' {}'.format(self.hardware_type) if self.hardware_type else '',
             version=version or self.software_variant,
         )
 

Modified: trunk/Tools/Scripts/webkitpy/xcode/simulated_device.py (248269 => 248270)


--- trunk/Tools/Scripts/webkitpy/xcode/simulated_device.py	2019-08-05 16:26:00 UTC (rev 248269)
+++ trunk/Tools/Scripts/webkitpy/xcode/simulated_device.py	2019-08-05 16:42:24 UTC (rev 248270)
@@ -124,7 +124,7 @@
             return
 
         try:
-            simctl_json = json.loads(host.executive.run_command([SimulatedDeviceManager.xcrun, 'simctl', 'list', '--json']))
+            simctl_json = json.loads(host.executive.run_command([SimulatedDeviceManager.xcrun, 'simctl', 'list', '--json'], decode_output=False))
         except (ValueError, ScriptError):
             return
 
@@ -184,7 +184,7 @@
     def _find_available_name(name_base):
         created_index = 0
         while True:
-            name = '{} {}'.format(name_base, created_index)
+            name = u'{} {}'.format(name_base, created_index)
             created_index += 1
             for device in SimulatedDeviceManager.INITIALIZED_DEVICES:
                 if device is None:
@@ -240,7 +240,7 @@
     @staticmethod
     def _get_device_identifier_for_type(device_type):
         for type_id, type_name in SimulatedDeviceManager._device_identifier_to_name.iteritems():
-            if type_name.lower() == '{} {}'.format(device_type.hardware_family.lower(), device_type.hardware_type.lower()):
+            if type_name.lower() == u'{} {}'.format(device_type.hardware_family.lower(), device_type.hardware_type.lower()):
                 return type_id
         return None
 
@@ -265,7 +265,7 @@
                 device.platform_device._delete()
                 break
 
-        _log.debug("Creating device '{}', of type {}".format(name, device_type))
+        _log.debug(u"Creating device '{}', of type {}".format(name, device_type))
         host.executive.run_command([SimulatedDeviceManager.xcrun, 'simctl', 'create', name, device_identifier, runtime.identifier])
 
         # We just added a device, so our list of _available_devices needs to be re-synced.
@@ -286,7 +286,7 @@
             if not request.use_booted_simulator:
                 continue
             if request.device_type == device.device_type:
-                _log.debug("The request for '{}' matched {} exactly".format(request.device_type, device))
+                _log.debug(u"The request for '{}' matched {} exactly".format(request.device_type, device))
                 return request
 
         # Contained-in match.
@@ -294,7 +294,7 @@
             if not request.use_booted_simulator:
                 continue
             if device.device_type in request.device_type:
-                _log.debug("The request for '{}' fuzzy-matched {}".format(request.device_type, device))
+                _log.debug(u"The request for '{}' fuzzy-matched {}".format(request.device_type, device))
                 return request
 
         # DeviceRequests are compared by reference
@@ -307,8 +307,8 @@
             if not request.use_booted_simulator or not request.allow_incomplete_match:
                 continue
             if request.device_type.software_variant == device.device_type.software_variant:
-                _log.warn("The request for '{}' incomplete-matched {}".format(request.device_type, device))
-                _log.warn("This may cause unexpected behavior in code that expected the device type {}".format(request.device_type))
+                _log.warn(u"The request for '{}' incomplete-matched {}".format(request.device_type, device))
+                _log.warn(u"This may cause unexpected behavior in code that expected the device type {}".format(request.device_type))
                 return request
         return None
 
@@ -315,7 +315,7 @@
     @staticmethod
     def _wait_until_device_in_state(device, state, deadline):
         while device.platform_device.state(force_update=True) != state:
-            _log.debug('Waiting on {} to enter state {}...'.format(device, SimulatedDevice.NAME_FOR_STATE[state]))
+            _log.debug(u'Waiting on {} to enter state {}...'.format(device, SimulatedDevice.NAME_FOR_STATE[state]))
             time.sleep(1)
             if time.time() > deadline:
                 raise RuntimeError('Timed out while waiting for all devices to boot')
@@ -322,15 +322,15 @@
 
     @staticmethod
     def _wait_until_device_is_usable(device, deadline):
-        _log.debug('Waiting until {} is usable'.format(device))
+        _log.debug(u'Waiting until {} is usable'.format(device))
         while not device.platform_device.is_usable(force_update=True):
             if time.time() > deadline:
-                raise RuntimeError('Timed out while waiting for {} to become usable'.format(device))
+                raise RuntimeError(u'Timed out while waiting for {} to become usable'.format(device))
             time.sleep(1)
 
     @staticmethod
     def _boot_device(device, host=SystemHost()):
-        _log.debug("Booting device '{}'".format(device.udid))
+        _log.debug(u"Booting device '{}'".format(device.udid))
         device.platform_device.booted_by_script = True
         host.executive.run_command([SimulatedDeviceManager.xcrun, 'simctl', 'boot', device.udid])
         SimulatedDeviceManager.INITIALIZED_DEVICES.append(device)
@@ -370,7 +370,7 @@
             if matched_request is None:
                 continue
             requests.remove(matched_request)
-            _log.debug('Attached to running simulator {}'.format(device))
+            _log.debug(u'Attached to running simulator {}'.format(device))
             SimulatedDeviceManager.INITIALIZED_DEVICES.append(device)
 
             # DeviceRequests are compared by reference
@@ -413,7 +413,7 @@
         try:
             system_process_count_limit = int(host.executive.run_command(['/usr/bin/ulimit', '-u']).strip())
             current_process_count = len(host.executive.run_command(['/bin/ps', 'aux']).strip().split('\n'))
-            _log.debug('Process limit: {}, current #processes: {}'.format(system_process_count_limit, current_process_count))
+            _log.debug(u'Process limit: {}, current #processes: {}'.format(system_process_count_limit, current_process_count))
         except (ValueError, ScriptError):
             return 0
 
@@ -421,7 +421,7 @@
         max_supported_simulators_locally = (system_process_count_limit - current_process_count) // SimulatedDeviceManager.PROCESS_COUNT_ESTIMATE_PER_SIMULATOR_INSTANCE
 
         if (max_supported_simulators_locally < max_supported_simulators_for_hardware):
-            _log.warn('This machine could support {} simulators, but is only configured for {}.'.format(max_supported_simulators_for_hardware, max_supported_simulators_locally))
+            _log.warn(u'This machine could support {} simulators, but is only configured for {}.'.format(max_supported_simulators_for_hardware, max_supported_simulators_locally))
             _log.warn('Please see <https://trac.webkit.org/wiki/IncreasingKernelLimits>.')
 
         if max_supported_simulators_locally == 0:
@@ -434,7 +434,7 @@
         if SimulatedDeviceManager.INITIALIZED_DEVICES is None:
             raise RuntimeError('Cannot swap when there are no initialized devices')
         if device not in SimulatedDeviceManager.INITIALIZED_DEVICES:
-            raise RuntimeError('{} is not initialized, cannot swap it'.format(device))
+            raise RuntimeError(u'{} is not initialized, cannot swap it'.format(device))
 
         index = SimulatedDeviceManager.INITIALIZED_DEVICES.index(device)
         SimulatedDeviceManager.INITIALIZED_DEVICES[index] = None
@@ -445,7 +445,7 @@
 
         if not device.platform_device.is_booted_or_booting(force_update=True):
             device.platform_device.booted_by_script = True
-            _log.debug("Booting device '{}'".format(device.udid))
+            _log.debug(u"Booting device '{}'".format(device.udid))
             host.executive.run_command([SimulatedDeviceManager.xcrun, 'simctl', 'boot', device.udid])
         SimulatedDeviceManager.INITIALIZED_DEVICES[index] = device
 
@@ -531,7 +531,7 @@
         elif self.device_type.software_variant == 'watchOS':
             home_screen_service = 'com.apple.carousel.sessionservice'
         else:
-            _log.debug('{} has no service to check if the device is usable'.format(self.device_type.software_variant))
+            _log.debug(u'{} has no service to check if the device is usable'.format(self.device_type.software_variant))
             return True
 
         for line in self.executive.run_command([SimulatedDeviceManager.xcrun, 'simctl', 'spawn', self.udid, 'launchctl', 'print', 'system'], decode_output=False).splitlines():
@@ -545,17 +545,17 @@
         # Either shutdown is successful, or the device was already shutdown when we attempted to shut it down.
         exit_code = self.executive.run_command([SimulatedDeviceManager.xcrun, 'simctl', 'shutdown', self.udid], return_exit_code=True)
         if exit_code != 0 and self.state() != SimulatedDevice.DeviceState.SHUT_DOWN:
-            raise RuntimeError('Failed to shutdown {} with exit code {}'.format(self.udid, exit_code))
+            raise RuntimeError(u'Failed to shutdown {} with exit code {}'.format(self.udid, exit_code))
 
         while self.state(force_update=True) != SimulatedDevice.DeviceState.SHUT_DOWN:
             time.sleep(.5)
             if time.time() > deadline:
-                raise RuntimeError('Timed out while waiting for {} to shut down'.format(self.udid))
+                raise RuntimeError(u'Timed out while waiting for {} to shut down'.format(self.udid))
 
     def _delete(self, timeout=10.0):
         deadline = time.time() + timeout
         self._shut_down(deadline - time.time())
-        _log.debug("Removing device '{}'".format(self.name))
+        _log.debug(u"Removing device '{}'".format(self.name))
         self.executive.run_command([SimulatedDeviceManager.xcrun, 'simctl', 'delete', self.udid])
 
         # This will (by design) fail if run more than once on the same SimulatedDevice
@@ -603,7 +603,7 @@
 
         output = None
 
-        with Timeout(timeout, RuntimeError('Timed out waiting for process to open {} on {}'.format(bundle_id, self.udid))):
+        with Timeout(timeout, RuntimeError(u'Timed out waiting for process to open {} on {}'.format(bundle_id, self.udid))):
             while True:
                 output = self.executive.run_command(
                     ['xcrun', 'simctl', 'launch', self.udid, bundle_id] + args,
@@ -615,13 +615,13 @@
                 if match and self.executive.check_running_pid(int(match.group('pid'))):
                     break
                 if match:
-                    _log.debug('simctl launch reported pid {}, but this process is not running'.format(match.group('pid')))
+                    _log.debug(u'simctl launch reported pid {}, but this process is not running'.format(match.group('pid')))
                 else:
                     _log.debug('simctl launch did not report a pid')
 
         if match.group('bundle') != bundle_id:
-            raise RuntimeError('Failed to find process id for {}: {}'.format(bundle_id, output))
-        _log.debug('Returning pid {} of launched process'.format(match.group('pid')))
+            raise RuntimeError(u'Failed to find process id for {}: {}'.format(bundle_id, output))
+        _log.debug(u'Returning pid {} of launched process'.format(match.group('pid')))
         return int(match.group('pid'))
 
     def __eq__(self, other):
@@ -631,7 +631,7 @@
         return not self.__eq__(other)
 
     def __repr__(self):
-        return '<Device "{name}": {udid}. State: {state}. Type: {type}>'.format(
+        return u'<Device "{name}": {udid}. State: {state}. Type: {type}>'.format(
             name=self.name,
             udid=self.udid,
             state=SimulatedDevice.NAME_FOR_STATE[self.state()],
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to