181 lines
8.6 KiB
Python
181 lines
8.6 KiB
Python
# Copyright (C) 2014-2020 Apple Inc. All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
|
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
|
|
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
from webkitcorepy import Version
|
|
|
|
from webkitpy.port.ios_simulator import IOSSimulatorPort
|
|
from webkitpy.port import ios_testcase
|
|
from webkitpy.port import port_testcase
|
|
from webkitpy.port.config import clear_cached_configuration
|
|
from webkitpy.tool.mocktool import MockOptions
|
|
from webkitpy.common.system.executive_mock import MockExecutive2, ScriptError
|
|
from webkitpy.xcode.device_type import DeviceType
|
|
|
|
from webkitcorepy import OutputCapture
|
|
|
|
|
|
class IOSSimulatorTest(ios_testcase.IOSTest):
|
|
# FIXME: https://bugs.webkit.org/show_bug.cgi?id=173107
|
|
os_name = 'mac'
|
|
os_version = None
|
|
port_name = 'ios-simulator'
|
|
port_maker = IOSSimulatorPort
|
|
|
|
def make_port(self, host=None, port_name=None, options=None, os_name=None, os_version=Version(15), **kwargs):
|
|
port = super(IOSSimulatorTest, self).make_port(host=host, port_name=port_name, options=options, os_name=os_name, os_version=os_version, kwargs=kwargs)
|
|
port.set_option('child_processes', 1)
|
|
return port
|
|
|
|
def test_setup_environ_for_server(self):
|
|
port = self.make_port(options=MockOptions(leaks=True, guard_malloc=True))
|
|
env = port.setup_environ_for_server(port.driver_name())
|
|
self.assertEqual(env['MallocStackLogging'], '1')
|
|
self.assertEqual(env['MallocScribble'], '1')
|
|
self.assertEqual(env['DYLD_INSERT_LIBRARIES'], '/usr/lib/libgmalloc.dylib')
|
|
|
|
def test_operating_system(self):
|
|
self.assertEqual('ios-simulator', self.make_port().operating_system())
|
|
|
|
def test_32bit(self):
|
|
port = self.make_port(options=MockOptions(architecture='i386'))
|
|
|
|
def run_script(script, args=None, env=None):
|
|
self.args = args
|
|
|
|
port._run_script = run_script
|
|
self.assertEqual(port.architecture(), 'i386')
|
|
port._build_driver()
|
|
self.assertEqual(self.args, ['--sdk', 'iphonesimulator', 'ARCHS=i386'])
|
|
|
|
def test_64bit(self):
|
|
# Apple Mac port is 64-bit by default
|
|
port = self.make_port()
|
|
self.assertEqual(port.architecture(), 'x86_64')
|
|
|
|
def run_script(script, args=None, env=None):
|
|
self.args = args
|
|
|
|
port._run_script = run_script
|
|
port._build_driver()
|
|
self.assertEqual(self.args, ['--sdk', 'iphonesimulator', 'ARCHS=x86_64'])
|
|
|
|
def test_sdk_name(self):
|
|
port = self.make_port()
|
|
self.assertEqual(port.SDK, 'iphonesimulator')
|
|
|
|
def test_xcrun(self):
|
|
def throwing_run_command(args):
|
|
print(args)
|
|
raise ScriptError("MOCK script error")
|
|
|
|
port = self.make_port()
|
|
port._executive = MockExecutive2(run_command_fn=throwing_run_command)
|
|
with OutputCapture() as captured:
|
|
port.xcrun_find('test', 'falling')
|
|
self.assertEqual(
|
|
captured.stdout.getvalue(),
|
|
"['xcrun', '--sdk', 'iphonesimulator', '-find', 'test']\n",
|
|
)
|
|
|
|
def test_layout_test_searchpath_with_apple_additions(self):
|
|
with port_testcase.bind_mock_apple_additions():
|
|
search_path = self.make_port().default_baseline_search_path()
|
|
|
|
self.assertEqual(search_path, [
|
|
'/additional_testing_path/ios-simulator-add-ios15-wk1',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-15-wk1',
|
|
'/additional_testing_path/ios-simulator-add-ios15',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-15',
|
|
'/additional_testing_path/ios-simulator-wk1',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-wk1',
|
|
'/additional_testing_path/ios-simulator',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator',
|
|
'/additional_testing_path/ios-add-ios15-wk1',
|
|
'/mock-checkout/LayoutTests/platform/ios-15-wk1',
|
|
'/additional_testing_path/ios-add-ios15',
|
|
'/mock-checkout/LayoutTests/platform/ios-15',
|
|
'/additional_testing_path/ios-wk1',
|
|
'/mock-checkout/LayoutTests/platform/ios-wk1',
|
|
'/additional_testing_path/ios',
|
|
'/mock-checkout/LayoutTests/platform/ios',
|
|
])
|
|
|
|
def test_layout_test_searchpath_without_apple_additions(self):
|
|
search_path = self.make_port(port_name='ios-simulator-wk2', os_version=Version(15)).default_baseline_search_path()
|
|
|
|
self.assertEqual(search_path, [
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-15-wk2',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-15',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-wk2',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator',
|
|
'/mock-checkout/LayoutTests/platform/ios-15-wk2',
|
|
'/mock-checkout/LayoutTests/platform/ios-15',
|
|
'/mock-checkout/LayoutTests/platform/ios-wk2',
|
|
'/mock-checkout/LayoutTests/platform/ios',
|
|
'/mock-checkout/LayoutTests/platform/wk2',
|
|
])
|
|
|
|
def test_layout_searchpath_wih_device_type(self):
|
|
search_path = self.make_port(port_name='ios-simulator-wk2', os_version=Version(15)).default_baseline_search_path(DeviceType.from_string('iPhone SE'))
|
|
|
|
self.assertEqual(search_path, [
|
|
'/mock-checkout/LayoutTests/platform/iphone-se-simulator-15-wk2',
|
|
'/mock-checkout/LayoutTests/platform/iphone-se-simulator-15',
|
|
'/mock-checkout/LayoutTests/platform/iphone-se-simulator-wk2',
|
|
'/mock-checkout/LayoutTests/platform/iphone-se-simulator',
|
|
'/mock-checkout/LayoutTests/platform/iphone-simulator-15-wk2',
|
|
'/mock-checkout/LayoutTests/platform/iphone-simulator-15',
|
|
'/mock-checkout/LayoutTests/platform/iphone-simulator-wk2',
|
|
'/mock-checkout/LayoutTests/platform/iphone-simulator',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-15-wk2',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-15',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator-wk2',
|
|
'/mock-checkout/LayoutTests/platform/ios-simulator',
|
|
'/mock-checkout/LayoutTests/platform/iphone-se-15-wk2',
|
|
'/mock-checkout/LayoutTests/platform/iphone-se-15',
|
|
'/mock-checkout/LayoutTests/platform/iphone-se-wk2',
|
|
'/mock-checkout/LayoutTests/platform/iphone-se',
|
|
'/mock-checkout/LayoutTests/platform/iphone-15-wk2',
|
|
'/mock-checkout/LayoutTests/platform/iphone-15',
|
|
'/mock-checkout/LayoutTests/platform/iphone-wk2',
|
|
'/mock-checkout/LayoutTests/platform/iphone',
|
|
'/mock-checkout/LayoutTests/platform/ios-15-wk2',
|
|
'/mock-checkout/LayoutTests/platform/ios-15',
|
|
'/mock-checkout/LayoutTests/platform/ios-wk2',
|
|
'/mock-checkout/LayoutTests/platform/ios',
|
|
'/mock-checkout/LayoutTests/platform/wk2',
|
|
])
|
|
|
|
def test_max_child_processes(self):
|
|
port = self.make_port()
|
|
self.assertEqual(port.max_child_processes(DeviceType.from_string('Apple Watch')), 0)
|
|
|
|
def test_default_upload_configuration(self):
|
|
clear_cached_configuration()
|
|
port = self.make_port()
|
|
configuration = port.configuration_for_upload()
|
|
self.assertEqual(configuration['architecture'], port.architecture())
|
|
self.assertEqual(configuration['is_simulator'], True)
|
|
self.assertEqual(configuration['platform'], 'ios')
|
|
self.assertEqual(configuration['style'], 'release')
|
|
self.assertEqual(configuration['version_name'], 'iOS {}'.format(port.device_version()))
|