| # Copyright 2017 Google Inc. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| from __future__ import absolute_import |
| import unittest |
| |
| from utilities import util |
| import device_info |
| import mock |
| import step |
| |
| |
| class TestDeviceInfo(unittest.TestCase): |
| |
| @mock.patch('device_info._GetIDeviceInfoValue', autospec=True) |
| def testGetIOSDeviceInformation(self, mock_get_value): |
| """Tests creating a device_info object for iOS. |
| |
| Args: |
| mock_get_value: mock for device_info._GetIDeviceInfoValue |
| """ |
| test_name = 'device_name' |
| test_id = 'abc123' |
| test_version = '10' |
| for test_device_class in device_info.IOS_DEVICE_CLASSES: |
| mock_get_value.side_effect = [ |
| test_device_class, test_name, test_id, test_version |
| ] |
| info_object = device_info.GetIOSDeviceInformation(test_id) |
| self.assertEqual(info_object.device_class, |
| device_info.IOS_DEVICE_CLASSES[test_device_class]) |
| self.assertEqual(info_object.name, test_name) |
| self.assertEqual(info_object.id, test_id) |
| self.assertEqual(info_object.version, test_version) |
| |
| @mock.patch('device_info._GetADBDeviceInfoValue', autospec=True) |
| def testGetAndroidCPUInformation(self, mock_get_value): |
| device_id = 'ZX1G223BPN' |
| mock_get_value.side_effect = [ |
| 'hammerhead', |
| 'arm', |
| 'newname', |
| 'arm', |
| 'newname', |
| 'arm64', |
| 'newname', |
| 'notfoundarch', |
| 'newname', |
| 'x86', |
| 'newname', |
| 'x86_64', |
| ] |
| self.assertEqual(device_info.GetAndroidCPUInformation(device_id), 'arm') |
| self.assertEqual(device_info.GetAndroidCPUInformation(device_id), 'arm') |
| self.assertEqual(device_info.GetAndroidCPUInformation(device_id), 'arm_64') |
| self.assertEqual( |
| device_info.GetAndroidCPUInformation(device_id), 'notfoundarch') |
| self.assertEqual(device_info.GetAndroidCPUInformation(device_id), 'x86') |
| self.assertEqual(device_info.GetAndroidCPUInformation(device_id), 'x86_64') |
| |
| @mock.patch('device_info._GetADBDeviceInfoValue', autospec=True) |
| def testGetAndroidAPILevel(self, mock_get_value): |
| device_id = 'ZX1G223BPN' |
| mock_get_value.side_effect = [ |
| '23', |
| 'abc', |
| ] |
| self.assertEqual(device_info.GetAndroidAPILevel(device_id), 23) |
| self.assertEqual(device_info.GetAndroidAPILevel(device_id), 99) |
| |
| @mock.patch('device_info._GetADBDeviceInfoValue', autospec=True) |
| def testGetAndroidBuildType(self, mock_get_value): |
| device_id = 'ZX1G223BPN' |
| mock_get_value.side_effect = [ |
| 'user', |
| device_info.BUILD_TYPE_USERDEBUG, |
| ] |
| self.assertEqual(device_info.GetAndroidBuildType(device_id), 'user') |
| self.assertEqual(device_info.GetAndroidBuildType(device_id), 'userdebug') |
| |
| @mock.patch('device_info._GetADBDeviceInfoValue', autospec=True) |
| def testGetAndroidDeviceInformation(self, mock_get_value): |
| """Tests creating a device_info object for Android. |
| |
| Args: |
| mock_get_value: mock for device_info._GetIDeviceInfoValue |
| """ |
| test_name = 'device_name' |
| test_version = '10' |
| device_id = 'ZX1G223BPN' |
| build_type = 'userdebug' |
| mock_get_value.side_effect = [step.PHONE, test_name, test_version, |
| build_type] |
| info_object = device_info.GetAndroidDeviceInformation(device_id) |
| self.assertEqual(info_object.device_class, step.PHONE) |
| self.assertEqual(info_object.name, test_name) |
| self.assertEqual(info_object.id, device_id) |
| self.assertEqual(info_object.version, test_version) |
| self.assertEqual(info_object.build_type, build_type) |
| |
| mock_get_value.side_effect = [step.TABLET, test_name, test_version, |
| build_type] |
| info_object = device_info.GetAndroidDeviceInformation(device_id) |
| self.assertEqual(info_object.device_class, step.TABLET) |
| self.assertEqual(info_object.name, test_name) |
| self.assertEqual(info_object.id, device_id) |
| self.assertEqual(info_object.version, test_version) |
| self.assertEqual(info_object.build_type, build_type) |
| |
| mock_get_value.side_effect = [step.EMULATOR, test_name, test_version, |
| build_type] |
| info_object = device_info.GetAndroidDeviceInformation(device_id) |
| self.assertEqual(info_object.device_class, step.EMULATOR) |
| self.assertEqual(info_object.name, test_name) |
| self.assertEqual(info_object.id, device_id) |
| self.assertEqual(info_object.version, test_version) |
| self.assertEqual(info_object.build_type, build_type) |
| |
| @mock.patch('utilities.util.RunADBProcess', autospec=True) |
| @mock.patch('subprocess.check_output', autospec=True) |
| def testGetDeviceInfo(self, mock_subprocess, mock_path): |
| mock_path.return_value = 'test_adb' |
| device_id = 'ZX1G223BPN' |
| device_info._GetADBDeviceInfoValue('test_adb', device_id) |
| self.assertIn('test_adb', mock_path.call_args_list[0][0][0]) |
| device_info._GetIDeviceInfoValue('test_ios', device_id) |
| self.assertIn('test_ios', mock_subprocess.call_args_list[0][0][0]) |
| |
| @mock.patch('utilities.util.RunADBProcess', autospec=True) |
| @mock.patch('utilities.util.GetPackageVersion', autospec=True) |
| @mock.patch('device_info.GetAndroidAPILevel', autospec=True) |
| def testSystemWebviewInfo_NDevice(self, api_level_mock, |
| mock_get_package, mock_run_adb): |
| api_level_mock.return_value = 24 |
| mock_get_package.return_value = ['72.0.000.00'] |
| mock_run_adb.return_value = 'com.chrome.beta\n' |
| self.assertEqual({ |
| 'webview_provider_package': 'com.chrome.beta', |
| 'webview_provider_version': '72.0.000.00', |
| }, device_info.SystemWebviewInfo('device_id')) |
| |
| @mock.patch('utilities.util.GetPackageVersion', autospec=True) |
| @mock.patch('device_info.GetAndroidAPILevel', autospec=True) |
| def testSystemWebviewInfo_MDevice(self, api_level_mock, mock_get_package): |
| api_level_mock.return_value = 23 |
| mock_get_package.return_value = ['72.0.000.00'] |
| self.assertEqual({ |
| 'webview_provider_package': 'com.google.android.webview', |
| 'webview_provider_version': '72.0.000.00', |
| }, device_info.SystemWebviewInfo('device_id')) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |