1*c2e18aaaSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*c2e18aaaSAndroid Build Coastguard Worker# 3*c2e18aaaSAndroid Build Coastguard Worker# Copyright 2020, The Android Open Source Project 4*c2e18aaaSAndroid Build Coastguard Worker# 5*c2e18aaaSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*c2e18aaaSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*c2e18aaaSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*c2e18aaaSAndroid Build Coastguard Worker# 9*c2e18aaaSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*c2e18aaaSAndroid Build Coastguard Worker# 11*c2e18aaaSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*c2e18aaaSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*c2e18aaaSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*c2e18aaaSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*c2e18aaaSAndroid Build Coastguard Worker# limitations under the License. 16*c2e18aaaSAndroid Build Coastguard Worker 17*c2e18aaaSAndroid Build Coastguard Worker"""Unittests for JDKTableXML class.""" 18*c2e18aaaSAndroid Build Coastguard Worker 19*c2e18aaaSAndroid Build Coastguard Workerimport os 20*c2e18aaaSAndroid Build Coastguard Workerimport shutil 21*c2e18aaaSAndroid Build Coastguard Workerimport tempfile 22*c2e18aaaSAndroid Build Coastguard Workerimport unittest 23*c2e18aaaSAndroid Build Coastguard Worker 24*c2e18aaaSAndroid Build Coastguard Workerfrom unittest import mock 25*c2e18aaaSAndroid Build Coastguard Workerfrom xml.etree import ElementTree 26*c2e18aaaSAndroid Build Coastguard Worker 27*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import aidegen_metrics 28*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import common_util 29*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import xml_util 30*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.sdk import android_sdk 31*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.sdk import jdk_table 32*c2e18aaaSAndroid Build Coastguard Worker 33*c2e18aaaSAndroid Build Coastguard Worker 34*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable=protected-access 35*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable=too-many-arguments 36*c2e18aaaSAndroid Build Coastguard Workerclass JDKTableXMLUnittests(unittest.TestCase): 37*c2e18aaaSAndroid Build Coastguard Worker """Unit tests for JDKTableXML class.""" 38*c2e18aaaSAndroid Build Coastguard Worker 39*c2e18aaaSAndroid Build Coastguard Worker _JDK_TABLE_XML = 'jdk.table.xml' 40*c2e18aaaSAndroid Build Coastguard Worker _CONFIG_FILE = '/path/to/jdk.table.xml' 41*c2e18aaaSAndroid Build Coastguard Worker _JDK_CONTENT = '<jdk />' 42*c2e18aaaSAndroid Build Coastguard Worker _JDK_PATH = '/path/to/JDK' 43*c2e18aaaSAndroid Build Coastguard Worker _DEFAULT_ANDROID_SDK_PATH = '/path/to/Android/SDK' 44*c2e18aaaSAndroid Build Coastguard Worker _TEST_DIR = None 45*c2e18aaaSAndroid Build Coastguard Worker 46*c2e18aaaSAndroid Build Coastguard Worker def setUp(self): 47*c2e18aaaSAndroid Build Coastguard Worker """Prepare the JDKTableXML class.""" 48*c2e18aaaSAndroid Build Coastguard Worker JDKTableXMLUnittests._TEST_DIR = tempfile.mkdtemp() 49*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml = jdk_table.JDKTableXML( 50*c2e18aaaSAndroid Build Coastguard Worker self._CONFIG_FILE, self._JDK_CONTENT, self._JDK_PATH, 51*c2e18aaaSAndroid Build Coastguard Worker self._DEFAULT_ANDROID_SDK_PATH) 52*c2e18aaaSAndroid Build Coastguard Worker 53*c2e18aaaSAndroid Build Coastguard Worker def tearDown(self): 54*c2e18aaaSAndroid Build Coastguard Worker """Clear the JDKTableXML class.""" 55*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml = None 56*c2e18aaaSAndroid Build Coastguard Worker shutil.rmtree(JDKTableXMLUnittests._TEST_DIR) 57*c2e18aaaSAndroid Build Coastguard Worker 58*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'file_generate') 59*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.path.exists') 60*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ElementTree, 'parse') 61*c2e18aaaSAndroid Build Coastguard Worker def test_init(self, mock_parse, mock_exists, mock_gen_file): 62*c2e18aaaSAndroid Build Coastguard Worker """Test initialize the attributes.""" 63*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(self.jdk_table_xml._platform_version, None) 64*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(self.jdk_table_xml._android_sdk_version, None) 65*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(self.jdk_table_xml._modify_config, False) 66*c2e18aaaSAndroid Build Coastguard Worker mock_exists.return_value = True 67*c2e18aaaSAndroid Build Coastguard Worker mock_parse.return_value = None 68*c2e18aaaSAndroid Build Coastguard Worker jdk_table.JDKTableXML(None, None, None, None) 69*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_parse.called) 70*c2e18aaaSAndroid Build Coastguard Worker mock_exists.return_value = False 71*c2e18aaaSAndroid Build Coastguard Worker jdk_table.JDKTableXML(None, None, None, None) 72*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_parse.called) 73*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_file.called) 74*c2e18aaaSAndroid Build Coastguard Worker 75*c2e18aaaSAndroid Build Coastguard Worker def test_android_sdk_version(self): 76*c2e18aaaSAndroid Build Coastguard Worker """Test android_sdk_version.""" 77*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(self.jdk_table_xml.android_sdk_version, None) 78*c2e18aaaSAndroid Build Coastguard Worker 79*c2e18aaaSAndroid Build Coastguard Worker def test_check_structure(self): 80*c2e18aaaSAndroid Build Coastguard Worker """Test _check_structure.""" 81*c2e18aaaSAndroid Build Coastguard Worker tmp_file = os.path.join(self._TEST_DIR, self._JDK_TABLE_XML) 82*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<application>\n</application>') 83*c2e18aaaSAndroid Build Coastguard Worker with open(tmp_file, 'w', encoding='utf-8') as tmp_jdk_xml: 84*c2e18aaaSAndroid Build Coastguard Worker tmp_jdk_xml.write(xml_str) 85*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.parse(tmp_file) 86*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._check_structure()) 87*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<application>\n' 88*c2e18aaaSAndroid Build Coastguard Worker ' <component>\n' 89*c2e18aaaSAndroid Build Coastguard Worker ' </component>\n' 90*c2e18aaaSAndroid Build Coastguard Worker '</application>') 91*c2e18aaaSAndroid Build Coastguard Worker with open(tmp_file, 'w', encoding='utf-8') as tmp_jdk_xml: 92*c2e18aaaSAndroid Build Coastguard Worker tmp_jdk_xml.write(xml_str) 93*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.parse(tmp_file) 94*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._check_structure()) 95*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<application>\n' 96*c2e18aaaSAndroid Build Coastguard Worker ' <component name="ProjectJdkTable">\n' 97*c2e18aaaSAndroid Build Coastguard Worker ' </component>\n' 98*c2e18aaaSAndroid Build Coastguard Worker '</application>') 99*c2e18aaaSAndroid Build Coastguard Worker with open(tmp_file, 'w', encoding='utf-8') as tmp_jdk_xml: 100*c2e18aaaSAndroid Build Coastguard Worker tmp_jdk_xml.write(xml_str) 101*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.parse(tmp_file) 102*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(self.jdk_table_xml._check_structure()) 103*c2e18aaaSAndroid Build Coastguard Worker 104*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(jdk_table.JDKTableXML, '_check_jdk21_in_xml') 105*c2e18aaaSAndroid Build Coastguard Worker def test_generate_jdk_config_string(self, mock_jdk_exists): 106*c2e18aaaSAndroid Build Coastguard Worker """Test _generate_jdk_config_string.""" 107*c2e18aaaSAndroid Build Coastguard Worker mock_jdk_exists.return_value = True 108*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._generate_jdk_config_string() 109*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._modify_config) 110*c2e18aaaSAndroid Build Coastguard Worker mock_jdk_exists.return_value = False 111*c2e18aaaSAndroid Build Coastguard Worker expected_result = (b'<application>\n' 112*c2e18aaaSAndroid Build Coastguard Worker b' <component name="ProjectJdkTable">\n' 113*c2e18aaaSAndroid Build Coastguard Worker b' <jdk />\n' 114*c2e18aaaSAndroid Build Coastguard Worker b' </component>\n' 115*c2e18aaaSAndroid Build Coastguard Worker b'</application>') 116*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._generate_jdk_config_string() 117*c2e18aaaSAndroid Build Coastguard Worker test_result = ElementTree.tostring(self.jdk_table_xml._xml.getroot()) 118*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(self.jdk_table_xml._modify_config) 119*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 120*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<application>\n' 121*c2e18aaaSAndroid Build Coastguard Worker ' <component name="ProjectJdkTable">\n' 122*c2e18aaaSAndroid Build Coastguard Worker ' <jdk>\n' 123*c2e18aaaSAndroid Build Coastguard Worker ' <name value="test" />\n' 124*c2e18aaaSAndroid Build Coastguard Worker ' <type value="JavaSDK" />\n' 125*c2e18aaaSAndroid Build Coastguard Worker ' </jdk>\n' 126*c2e18aaaSAndroid Build Coastguard Worker ' </component>\n' 127*c2e18aaaSAndroid Build Coastguard Worker '</application>') 128*c2e18aaaSAndroid Build Coastguard Worker expected_result = (b'<application>\n' 129*c2e18aaaSAndroid Build Coastguard Worker b' <component name="ProjectJdkTable">\n' 130*c2e18aaaSAndroid Build Coastguard Worker b' <jdk>\n' 131*c2e18aaaSAndroid Build Coastguard Worker b' <name value="test" />\n' 132*c2e18aaaSAndroid Build Coastguard Worker b' <type value="JavaSDK" />\n' 133*c2e18aaaSAndroid Build Coastguard Worker b' </jdk>\n' 134*c2e18aaaSAndroid Build Coastguard Worker b' <jdk />\n' 135*c2e18aaaSAndroid Build Coastguard Worker b' </component>\n' 136*c2e18aaaSAndroid Build Coastguard Worker b'</application>') 137*c2e18aaaSAndroid Build Coastguard Worker tmp_file = os.path.join(self._TEST_DIR, self._JDK_TABLE_XML) 138*c2e18aaaSAndroid Build Coastguard Worker with open(tmp_file, 'w', encoding='utf-8') as tmp_jdk_xml: 139*c2e18aaaSAndroid Build Coastguard Worker tmp_jdk_xml.write(xml_str) 140*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.parse(tmp_file) 141*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._generate_jdk_config_string() 142*c2e18aaaSAndroid Build Coastguard Worker test_result = ElementTree.tostring(self.jdk_table_xml._xml.getroot()) 143*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 144*c2e18aaaSAndroid Build Coastguard Worker 145*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(jdk_table.JDKTableXML, '_override_xml') 146*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ElementTree.ElementTree, 'write') 147*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.path.exists') 148*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(jdk_table.JDKTableXML, '_generate_sdk_config_string') 149*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(jdk_table.JDKTableXML, '_generate_jdk_config_string') 150*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(jdk_table.JDKTableXML, '_check_structure') 151*c2e18aaaSAndroid Build Coastguard Worker def test_config_jdk_table_xml(self, mock_check_structure, mock_gen_jdk, 152*c2e18aaaSAndroid Build Coastguard Worker mock_gen_sdk, mock_exist, mock_xml_write, 153*c2e18aaaSAndroid Build Coastguard Worker mock_override): 154*c2e18aaaSAndroid Build Coastguard Worker """Test config_jdk_table_xml.""" 155*c2e18aaaSAndroid Build Coastguard Worker mock_check_structure.return_value = True 156*c2e18aaaSAndroid Build Coastguard Worker mock_exist.return_value = True 157*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml.config_jdk_table_xml() 158*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_jdk.called) 159*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_sdk.called) 160*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._modify_config = False 161*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml.config_jdk_table_xml() 162*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_xml_write.called) 163*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._modify_config = True 164*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._android_sdk_version = 'test' 165*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml.config_jdk_table_xml() 166*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_xml_write.called) 167*c2e18aaaSAndroid Build Coastguard Worker mock_check_structure.return_value = False 168*c2e18aaaSAndroid Build Coastguard Worker mock_override.return_value = False 169*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml.config_jdk_table_xml()) 170*c2e18aaaSAndroid Build Coastguard Worker mock_check_structure.return_value = False 171*c2e18aaaSAndroid Build Coastguard Worker mock_override.return_value = True 172*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_jdk.called) 173*c2e18aaaSAndroid Build Coastguard Worker 174*c2e18aaaSAndroid Build Coastguard Worker def test_check_jdk21_in_xml(self): 175*c2e18aaaSAndroid Build Coastguard Worker """Test _check_jdk21_in_xml.""" 176*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<test><jdk><name value="JDK21" /><type value="JavaSDK" />' 177*c2e18aaaSAndroid Build Coastguard Worker '</jdk></test>') 178*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.fromstring(xml_str) 179*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(self.jdk_table_xml._check_jdk21_in_xml()) 180*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<test><jdk><name value="test" /><type value="JavaSDK" />' 181*c2e18aaaSAndroid Build Coastguard Worker '</jdk></test>') 182*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.fromstring(xml_str) 183*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._check_jdk21_in_xml()) 184*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<test><jdk><name value="test" /></jdk></test>') 185*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.fromstring(xml_str) 186*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._check_jdk21_in_xml()) 187*c2e18aaaSAndroid Build Coastguard Worker 188*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(android_sdk.AndroidSDK, 'is_android_sdk_path') 189*c2e18aaaSAndroid Build Coastguard Worker def test_check_android_sdk_in_xml(self, mock_is_android_sdk): 190*c2e18aaaSAndroid Build Coastguard Worker """Test _check_android_sdk_in_xml.""" 191*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._sdk._platform_mapping = { 192*c2e18aaaSAndroid Build Coastguard Worker 'android-29': { 193*c2e18aaaSAndroid Build Coastguard Worker 'api_level': 29, 194*c2e18aaaSAndroid Build Coastguard Worker 'code_name': '29', 195*c2e18aaaSAndroid Build Coastguard Worker }, 196*c2e18aaaSAndroid Build Coastguard Worker } 197*c2e18aaaSAndroid Build Coastguard Worker mock_is_android_sdk.return_value = True 198*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<test><jdk><name value="JDK21" /><type value="JavaSDK" />' 199*c2e18aaaSAndroid Build Coastguard Worker '</jdk></test>') 200*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.fromstring(xml_str) 201*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._check_android_sdk_in_xml()) 202*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<test><jdk><name value="Android SDK 29 platform" />' 203*c2e18aaaSAndroid Build Coastguard Worker '<type value="Android SDK" />' 204*c2e18aaaSAndroid Build Coastguard Worker '<additional jdk="JDK21" sdk="android-29" />' 205*c2e18aaaSAndroid Build Coastguard Worker '</jdk></test>') 206*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.fromstring(xml_str) 207*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._check_android_sdk_in_xml()) 208*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<test><jdk><name value="Android SDK 28 platform" />' 209*c2e18aaaSAndroid Build Coastguard Worker '<type value="Android SDK" />' 210*c2e18aaaSAndroid Build Coastguard Worker '<homePath value="/path/to/Android/SDK" />' 211*c2e18aaaSAndroid Build Coastguard Worker '<additional jdk="JDK21" sdk="android-28" />' 212*c2e18aaaSAndroid Build Coastguard Worker '</jdk></test>') 213*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.fromstring(xml_str) 214*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._check_android_sdk_in_xml()) 215*c2e18aaaSAndroid Build Coastguard Worker xml_str = ('<test><jdk><name value="Android SDK 29 platform" />' 216*c2e18aaaSAndroid Build Coastguard Worker '<type value="Android SDK" />' 217*c2e18aaaSAndroid Build Coastguard Worker '<homePath value="/path/to/Android/SDK" />' 218*c2e18aaaSAndroid Build Coastguard Worker '<additional jdk="JDK21" sdk="android-29" />' 219*c2e18aaaSAndroid Build Coastguard Worker '</jdk></test>') 220*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.fromstring(xml_str) 221*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(self.jdk_table_xml._check_android_sdk_in_xml()) 222*c2e18aaaSAndroid Build Coastguard Worker mock_is_android_sdk.return_value = False 223*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = ElementTree.fromstring(xml_str) 224*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._check_android_sdk_in_xml()) 225*c2e18aaaSAndroid Build Coastguard Worker 226*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_metrics, 'send_exception_metrics') 227*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(android_sdk.AndroidSDK, 'path_analysis') 228*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'read_file_content') 229*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(jdk_table.JDKTableXML, '_check_android_sdk_in_xml') 230*c2e18aaaSAndroid Build Coastguard Worker def test_generate_sdk_config_string(self, mock_sdk_in_xml, mock_read_file, 231*c2e18aaaSAndroid Build Coastguard Worker mock_path_analysis, mock_metrics): 232*c2e18aaaSAndroid Build Coastguard Worker """Test _generate_sdk_config_string.""" 233*c2e18aaaSAndroid Build Coastguard Worker mock_sdk_in_xml.return_value = True 234*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._generate_sdk_config_string() 235*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._modify_config) 236*c2e18aaaSAndroid Build Coastguard Worker mock_sdk_in_xml.return_value = False 237*c2e18aaaSAndroid Build Coastguard Worker mock_path_analysis.return_value = False 238*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._generate_sdk_config_string() 239*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_metrics.called) 240*c2e18aaaSAndroid Build Coastguard Worker mock_path_analysis.return_value = True 241*c2e18aaaSAndroid Build Coastguard Worker mock_read_file.return_value = '' 242*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._generate_sdk_config_string() 243*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(self.jdk_table_xml._modify_config) 244*c2e18aaaSAndroid Build Coastguard Worker 245*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_metrics, 'send_exception_metrics') 246*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('builtins.input') 247*c2e18aaaSAndroid Build Coastguard Worker def test_override_xml(self, mock_input, mock_metrics): 248*c2e18aaaSAndroid Build Coastguard Worker """Test _override_xml.""" 249*c2e18aaaSAndroid Build Coastguard Worker mock_input.side_effect = ['1', 'n'] 250*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(self.jdk_table_xml._override_xml()) 251*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(mock_input.call_count, 2) 252*c2e18aaaSAndroid Build Coastguard Worker mock_input.side_effect = ['n'] 253*c2e18aaaSAndroid Build Coastguard Worker result = self.jdk_table_xml._override_xml() 254*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(result) 255*c2e18aaaSAndroid Build Coastguard Worker mock_input.side_effect = ['y'] 256*c2e18aaaSAndroid Build Coastguard Worker expected_result = (b'<application>\n' 257*c2e18aaaSAndroid Build Coastguard Worker b' <component name="ProjectJdkTable">\n' 258*c2e18aaaSAndroid Build Coastguard Worker b' </component>\n' 259*c2e18aaaSAndroid Build Coastguard Worker b'</application>') 260*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._override_xml() 261*c2e18aaaSAndroid Build Coastguard Worker test_result = ElementTree.tostring(self.jdk_table_xml._xml.getroot()) 262*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 263*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_metrics.called) 264*c2e18aaaSAndroid Build Coastguard Worker 265*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(xml_util, 'parse_xml') 266*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_metrics, 'send_exception_metrics') 267*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('builtins.input') 268*c2e18aaaSAndroid Build Coastguard Worker def test_skip_send_metrics(self, mock_input, mock_metrics, mock_parse): 269*c2e18aaaSAndroid Build Coastguard Worker """Test _override_xml.""" 270*c2e18aaaSAndroid Build Coastguard Worker mock_input.side_effect = ['y'] 271*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._xml = None 272*c2e18aaaSAndroid Build Coastguard Worker self.jdk_table_xml._override_xml() 273*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_metrics.called) 274*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_parse.called) 275*c2e18aaaSAndroid Build Coastguard Worker 276*c2e18aaaSAndroid Build Coastguard Worker 277*c2e18aaaSAndroid Build Coastguard Workerif __name__ == '__main__': 278*c2e18aaaSAndroid Build Coastguard Worker unittest.main() 279