blob: 8401cce0315a0f0492461f0d110ac93beb0fb994 [file] [log] [blame]
# Copyright 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittests for iossim_util.py."""
import mock
import unittest
import iossim_util
import test_runner
import test_runner_test
SIMULATORS_LIST = {
'devices': {
'com.apple.CoreSimulator.SimRuntime.iOS-11-4': [{
'isAvailable':
True,
'name':
'iPhone 5s 11.4 test simulator',
'deviceTypeIdentifier':
'com.apple.CoreSimulator.SimDeviceType.iPhone-5s',
'state':
'Shutdown',
'udid':
'E4E66320-177A-450A-9BA1-488D85B7278E'
}],
'com.apple.CoreSimulator.SimRuntime.iOS-13-2': [{
'isAvailable':
True,
'name':
'iPhone X 13.2.2 test simulator',
'deviceTypeIdentifier':
'com.apple.CoreSimulator.SimDeviceType.iPhone-X',
'state':
'Shutdown',
'udid':
'E4E66321-177A-450A-9BA1-488D85B7278E'
}, {
'isAvailable':
True,
'name':
'iPhone 11 13.2.2 test simulator',
'deviceTypeIdentifier':
'com.apple.CoreSimulator.SimDeviceType.iPhone-11',
'state':
'Shutdown',
'udid':
'A4E66321-177A-450A-9BA1-488D85B7278E'
}]
},
'devicetypes': [
{
'name': 'iPhone 5s',
'bundlePath': '/path/iPhone 4s/Content',
'identifier': 'com.apple.CoreSimulator.SimDeviceType.iPhone-5s'
},
{
'name': 'iPhone X',
'bundlePath': '/path/iPhone X/Content',
'identifier': 'com.apple.CoreSimulator.SimDeviceType.iPhone-X'
},
{
'name': 'iPhone 11',
'bundlePath': '/path/iPhone 11/Content',
'identifier': 'com.apple.CoreSimulator.SimDeviceType.iPhone-11'
},
],
'pairs': [],
'runtimes': [
{
"buildversion": "15F79",
"bundlePath": "/path/Runtimes/iOS 11.4.simruntime",
"identifier": "com.apple.CoreSimulator.SimRuntime.iOS-11-4",
"isAvailable": True,
"name": "iOS 11.4",
"version": "11.4"
},
{
"buildversion": "17A844",
"bundlePath": "/path/Runtimes/iOS 13.1.simruntime",
"identifier": "com.apple.CoreSimulator.SimRuntime.iOS-13-1",
"isAvailable": True,
"name": "iOS 13.1",
"version": "13.1"
},
{
"buildversion": "17B102",
"bundlePath": "/path/Runtimes/iOS.simruntime",
"identifier": "com.apple.CoreSimulator.SimRuntime.iOS-13-2",
"isAvailable": True,
"name": "iOS 13.2",
"version": "13.2.2"
},
]
}
@mock.patch.object(
iossim_util, 'get_simulator_list', return_value=SIMULATORS_LIST)
class GetiOSSimUtil(test_runner_test.TestCase):
"""Tests for iossim_util.py."""
def setUp(self):
super(GetiOSSimUtil, self).setUp()
def test_get_simulator_runtime_by_version(self, _):
"""Ensures correctness of filter."""
self.assertEqual(
'com.apple.CoreSimulator.SimRuntime.iOS-13-2',
iossim_util.get_simulator_runtime_by_version(
iossim_util.get_simulator_list(), '13.2.2'))
def test_get_simulator_runtime_by_version_not_found(self, _):
"""Ensures that SimulatorNotFoundError raises if no runtime."""
with self.assertRaises(test_runner.SimulatorNotFoundError) as context:
iossim_util.get_simulator_runtime_by_version(
iossim_util.get_simulator_list(), '13.2')
expected_message = ('Simulator does not exist: Not found '
'"13.2" SDK in runtimes')
self.assertTrue(expected_message in str(context.exception))
def test_get_simulator_device_type_by_platform(self, _):
"""Ensures correctness of filter."""
self.assertEqual(
'com.apple.CoreSimulator.SimDeviceType.iPhone-11',
iossim_util.get_simulator_device_type_by_platform(
iossim_util.get_simulator_list(), 'iPhone 11'))
def test_get_simulator_device_type_by_platform_not_found(self, _):
"""Ensures that SimulatorNotFoundError raises if no platform."""
with self.assertRaises(test_runner.SimulatorNotFoundError) as context:
iossim_util.get_simulator_device_type_by_platform(
iossim_util.get_simulator_list(), 'iPhone XI')
expected_message = ('Simulator does not exist: Not found device '
'"iPhone XI" in devicetypes')
self.assertTrue(expected_message in str(context.exception))
def test_get_simulator_runtime_by_device_udid(self, _):
"""Ensures correctness of filter."""
self.assertEqual(
'com.apple.CoreSimulator.SimRuntime.iOS-13-2',
iossim_util.get_simulator_runtime_by_device_udid(
'E4E66321-177A-450A-9BA1-488D85B7278E'))
def test_get_simulator_runtime_by_device_udid_not_found(self, _):
"""Ensures that SimulatorNotFoundError raises if no device with UDID."""
with self.assertRaises(test_runner.SimulatorNotFoundError) as context:
iossim_util.get_simulator_runtime_by_device_udid('non_existing_UDID')
expected_message = ('Simulator does not exist: Not found simulator with '
'"non_existing_UDID" UDID in devices')
self.assertTrue(expected_message in str(context.exception))
def test_get_simulator_udids_by_platform_and_version(self, _):
"""Ensures correctness of filter."""
self.assertEqual(['A4E66321-177A-450A-9BA1-488D85B7278E'],
iossim_util.get_simulator_udids_by_platform_and_version(
'iPhone 11', '13.2.2'))
def test_get_simulator_udids_by_platform_and_version_not_found(self, _):
"""Ensures that filter returns empty list if no device with version."""
self.assertEqual([],
iossim_util.get_simulator_udids_by_platform_and_version(
'iPhone 11', '13.1'))
@mock.patch('subprocess.check_output', autospec=True)
def test_create_device_by_platform_and_version(self, subprocess_mock, _):
"""Ensures that command is correct."""
subprocess_mock.return_value = 'NEW_UDID'
self.assertEqual(
'NEW_UDID',
iossim_util.create_device_by_platform_and_version(
'iPhone 11', '13.2.2'))
self.assertEqual([
'xcrun', 'simctl', 'create', 'iPhone 11 13.2.2 test simulator',
'com.apple.CoreSimulator.SimDeviceType.iPhone-11',
'com.apple.CoreSimulator.SimRuntime.iOS-13-2'
], subprocess_mock.call_args[0][0])
@mock.patch('subprocess.check_output', autospec=True)
def test_delete_simulator_by_udid(self, subprocess_mock, _):
"""Ensures that command is correct."""
iossim_util.delete_simulator_by_udid('UDID')
self.assertEqual(['xcrun', 'simctl', 'delete', 'UDID'],
subprocess_mock.call_args[0][0])
@mock.patch('subprocess.check_call', autospec=True)
def test_wipe_simulator_by_platform_and_version(self, subprocess_mock, _):
"""Ensures that command is correct."""
iossim_util.wipe_simulator_by_udid('A4E66321-177A-450A-9BA1-488D85B7278E')
self.assertEqual(
['xcrun', 'simctl', 'erase', 'A4E66321-177A-450A-9BA1-488D85B7278E'],
subprocess_mock.call_args[0][0])
@mock.patch('subprocess.check_output', autospec=True)
def test_get_home_directory(self, subprocess_mock, _):
"""Ensures that command is correct."""
subprocess_mock.return_value = 'HOME_DIRECTORY'
self.assertEqual('HOME_DIRECTORY',
iossim_util.get_home_directory('iPhone 11', '13.2.2'))
self.assertEqual([
'xcrun', 'simctl', 'getenv', 'A4E66321-177A-450A-9BA1-488D85B7278E',
'HOME'
], subprocess_mock.call_args[0][0])
@mock.patch.object(iossim_util, 'create_device_by_platform_and_version')
def test_no_new_sim_created_when_one_exists(self, mock_create, _):
"""Ensures no simulator is created when one in desired dimension exists."""
self.assertEqual('A4E66321-177A-450A-9BA1-488D85B7278E',
iossim_util.get_simulator('iPhone 11', '13.2.2'))
self.assertFalse(mock_create.called)
if __name__ == '__main__':
unittest.main()