Use simctl instead of LayoutTestRelay
[WebKit.git] / Tools / Scripts / webkitpy / port / ios_unittest.py
1 # Copyright (C) 2014-2016 Apple Inc. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions
5 # are met:
6 # 1.  Redistributions of source code must retain the above copyright
7 #     notice, this list of conditions and the following disclaimer.
8 # 2.  Redistributions in binary form must reproduce the above copyright
9 #     notice, this list of conditions and the following disclaimer in the
10 #     documentation and/or other materials provided with the distribution.
11 #
12 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
13 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
16 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
18 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
19 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
20 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
21 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22
23 import time
24
25 from webkitpy.port.ios import IOSSimulatorPort
26 from webkitpy.port import darwin_testcase
27 from webkitpy.common.system.filesystem_mock import MockFileSystem
28 from webkitpy.common.system.outputcapture import OutputCapture
29 from webkitpy.tool.mocktool import MockOptions
30 from webkitpy.common.system.executive_mock import MockExecutive, MockExecutive2, MockProcess, ScriptError
31 from webkitpy.common.system.systemhost_mock import MockSystemHost
32
33
34 class iosTest(darwin_testcase.DarwinTest):
35     os_name = 'ios-simulator'
36     os_version = ''
37     port_name = 'ios-simulator'
38     port_maker = IOSSimulatorPort
39     is_simulator = True
40
41     def make_port(self, host=None, port_name=None, options=None, os_name=None, os_version=None, **kwargs):
42         port = super(iosTest, self).make_port(host=host, port_name=port_name, options=options, os_name=os_name, s_version=os_version, kwargs=kwargs)
43         port.set_option('child_processes', 1)
44         return port
45
46     def test_setup_environ_for_server(self):
47         port = self.make_port(options=MockOptions(leaks=True, guard_malloc=True))
48         env = port.setup_environ_for_server(port.driver_name())
49         self.assertEqual(env['MallocStackLogging'], '1')
50         self.assertEqual(env['MallocScribble'], '1')
51         self.assertEqual(env['DYLD_INSERT_LIBRARIES'], '/usr/lib/libgmalloc.dylib')
52
53     def test_operating_system(self):
54         self.assertEqual('ios-simulator', self.make_port().operating_system())
55
56     def test_get_crash_log(self):
57         # Mac crash logs are tested elsewhere, so here we just make sure we don't crash.
58         def fake_time_cb():
59             times = [0, 20, 40]
60             return lambda: times.pop(0)
61         port = self.make_port(port_name='ios-simulator')
62         port._get_crash_log('DumpRenderTree', 1234, None, None, time.time(), wait_for_log=False)
63
64     def test_32bit(self):
65         port = self.make_port(options=MockOptions(architecture='x86'))
66
67         def run_script(script, args=None, env=None):
68             self.args = args
69
70         port._run_script = run_script
71         self.assertEqual(port.architecture(), 'x86')
72         port._build_driver()
73         self.assertEqual(self.args, ['ARCHS=i386', '--sdk', 'iphonesimulator'])
74
75     def test_64bit(self):
76         # Apple Mac port is 64-bit by default
77         port = self.make_port()
78         self.assertEqual(port.architecture(), 'x86_64')
79
80         def run_script(script, args=None, env=None):
81             self.args = args
82
83         port._run_script = run_script
84         port._build_driver()
85         self.assertEqual(self.args, ['--sdk', 'iphonesimulator'])
86
87     def test_sdk_name(self):
88         port = self.make_port()
89         self.assertEqual(port.SDK, 'iphonesimulator')
90
91     def test_xcrun(self):
92         def throwing_run_command(args):
93             print args
94             raise ScriptError("MOCK script error")
95
96         port = self.make_port()
97         port._executive = MockExecutive2(run_command_fn=throwing_run_command)
98         expected_stdout = "['xcrun', '--sdk', 'iphonesimulator', '-find', 'test']\n"
99         OutputCapture().assert_outputs(self, port.xcrun_find, args=['test', 'falling'], expected_stdout=expected_stdout)