1*c2e18aaaSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*c2e18aaaSAndroid Build Coastguard Worker# 3*c2e18aaaSAndroid Build Coastguard Worker# Copyright 2018 - 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 18*c2e18aaaSAndroid Build Coastguard Worker"""Unittests for ide_util.""" 19*c2e18aaaSAndroid Build Coastguard Worker 20*c2e18aaaSAndroid Build Coastguard Workerimport os 21*c2e18aaaSAndroid Build Coastguard Workerimport shutil 22*c2e18aaaSAndroid Build Coastguard Workerimport subprocess 23*c2e18aaaSAndroid Build Coastguard Workerimport tempfile 24*c2e18aaaSAndroid Build Coastguard Workerimport unittest 25*c2e18aaaSAndroid Build Coastguard Worker 26*c2e18aaaSAndroid Build Coastguard Workerfrom unittest import mock 27*c2e18aaaSAndroid Build Coastguard Workerfrom xml.etree import ElementTree 28*c2e18aaaSAndroid Build Coastguard Worker 29*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen import aidegen_main 30*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen import unittest_constants 31*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import android_dev_os 32*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import common_util 33*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import config 34*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import errors 35*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import ide_common_util 36*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import ide_util 37*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import project_config 38*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import project_file_gen 39*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.sdk import jdk_table 40*c2e18aaaSAndroid Build Coastguard Worker 41*c2e18aaaSAndroid Build Coastguard Worker 42*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable=protected-access 43*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable-msg=too-many-arguments 44*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable-msg=unused-argument 45*c2e18aaaSAndroid Build Coastguard Workerclass IdeUtilUnittests(unittest.TestCase): 46*c2e18aaaSAndroid Build Coastguard Worker """Unit tests for ide_util.py.""" 47*c2e18aaaSAndroid Build Coastguard Worker 48*c2e18aaaSAndroid Build Coastguard Worker _TEST_PRJ_PATH1 = '' 49*c2e18aaaSAndroid Build Coastguard Worker _TEST_PRJ_PATH2 = '' 50*c2e18aaaSAndroid Build Coastguard Worker _TEST_PRJ_PATH3 = '' 51*c2e18aaaSAndroid Build Coastguard Worker _TEST_PRJ_PATH4 = '' 52*c2e18aaaSAndroid Build Coastguard Worker _MODULE_XML_SAMPLE = '' 53*c2e18aaaSAndroid Build Coastguard Worker _TEST_DIR = None 54*c2e18aaaSAndroid Build Coastguard Worker _TEST_XML_CONTENT = """\ 55*c2e18aaaSAndroid Build Coastguard Worker<application> 56*c2e18aaaSAndroid Build Coastguard Worker <component name="FileTypeManager" version="17"> 57*c2e18aaaSAndroid Build Coastguard Worker <extensionMap> 58*c2e18aaaSAndroid Build Coastguard Worker <mapping ext="pi" type="Python"/> 59*c2e18aaaSAndroid Build Coastguard Worker </extensionMap> 60*c2e18aaaSAndroid Build Coastguard Worker </component> 61*c2e18aaaSAndroid Build Coastguard Worker</application>""" 62*c2e18aaaSAndroid Build Coastguard Worker _TEST_XML_CONTENT_2 = """\ 63*c2e18aaaSAndroid Build Coastguard Worker<application> 64*c2e18aaaSAndroid Build Coastguard Worker <component name="FileTypeManager" version="17"> 65*c2e18aaaSAndroid Build Coastguard Worker <extensionMap> 66*c2e18aaaSAndroid Build Coastguard Worker <mapping ext="pi" type="Python"/> 67*c2e18aaaSAndroid Build Coastguard Worker <mapping pattern="test" type="a"/> 68*c2e18aaaSAndroid Build Coastguard Worker <mapping pattern="TEST_MAPPING" type="a"/> 69*c2e18aaaSAndroid Build Coastguard Worker </extensionMap> 70*c2e18aaaSAndroid Build Coastguard Worker </component> 71*c2e18aaaSAndroid Build Coastguard Worker</application>""" 72*c2e18aaaSAndroid Build Coastguard Worker 73*c2e18aaaSAndroid Build Coastguard Worker def setUp(self): 74*c2e18aaaSAndroid Build Coastguard Worker """Prepare the testdata related path.""" 75*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_PRJ_PATH1 = os.path.join( 76*c2e18aaaSAndroid Build Coastguard Worker unittest_constants.TEST_DATA_PATH, 'android_facet.iml') 77*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_PRJ_PATH2 = os.path.join( 78*c2e18aaaSAndroid Build Coastguard Worker unittest_constants.TEST_DATA_PATH, 'project/test.java') 79*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_PRJ_PATH3 = unittest_constants.TEST_DATA_PATH 80*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_PRJ_PATH4 = os.path.join( 81*c2e18aaaSAndroid Build Coastguard Worker unittest_constants.TEST_DATA_PATH, '.idea') 82*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._MODULE_XML_SAMPLE = os.path.join( 83*c2e18aaaSAndroid Build Coastguard Worker unittest_constants.TEST_DATA_PATH, 'modules.xml') 84*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_DIR = tempfile.mkdtemp() 85*c2e18aaaSAndroid Build Coastguard Worker 86*c2e18aaaSAndroid Build Coastguard Worker def tearDown(self): 87*c2e18aaaSAndroid Build Coastguard Worker """Clear the testdata related path.""" 88*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_PRJ_PATH1 = '' 89*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_PRJ_PATH2 = '' 90*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_PRJ_PATH3 = '' 91*c2e18aaaSAndroid Build Coastguard Worker IdeUtilUnittests._TEST_PRJ_PATH4 = '' 92*c2e18aaaSAndroid Build Coastguard Worker shutil.rmtree(IdeUtilUnittests._TEST_DIR) 93*c2e18aaaSAndroid Build Coastguard Worker 94*c2e18aaaSAndroid Build Coastguard Worker @unittest.skip('Skip to use real command to launch IDEA.') 95*c2e18aaaSAndroid Build Coastguard Worker def test_run_intellij_sh_in_linux(self): 96*c2e18aaaSAndroid Build Coastguard Worker """Follow the target behavior, with sh to show UI, else raise err.""" 97*c2e18aaaSAndroid Build Coastguard Worker sh_path = ide_util.IdeLinuxIntelliJ()._get_script_from_system() 98*c2e18aaaSAndroid Build Coastguard Worker if sh_path: 99*c2e18aaaSAndroid Build Coastguard Worker ide_util_obj = ide_util.IdeUtil() 100*c2e18aaaSAndroid Build Coastguard Worker ide_util_obj.config_ide(IdeUtilUnittests._TEST_PRJ_PATH1) 101*c2e18aaaSAndroid Build Coastguard Worker ide_util_obj.launch_ide() 102*c2e18aaaSAndroid Build Coastguard Worker else: 103*c2e18aaaSAndroid Build Coastguard Worker self.assertRaises(subprocess.CalledProcessError) 104*c2e18aaaSAndroid Build Coastguard Worker 105*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util, '_get_linux_ide') 106*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util, '_get_mac_ide') 107*c2e18aaaSAndroid Build Coastguard Worker def test_get_ide(self, mock_mac, mock_linux): 108*c2e18aaaSAndroid Build Coastguard Worker """Test if _get_ide calls the correct respective functions.""" 109*c2e18aaaSAndroid Build Coastguard Worker ide_util._get_ide(None, 'j', False, is_mac=True) 110*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_mac.called) 111*c2e18aaaSAndroid Build Coastguard Worker ide_util._get_ide(None, 'j', False, is_mac=False) 112*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_linux.called) 113*c2e18aaaSAndroid Build Coastguard Worker 114*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeBase, '_get_user_preference') 115*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'set_preferred_version') 116*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeEclipse, '_get_script_from_system') 117*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_get_preferred_version') 118*c2e18aaaSAndroid Build Coastguard Worker def test_get_mac_and_linux_ide(self, mock_preference, mock_path, mock_cfg, 119*c2e18aaaSAndroid Build Coastguard Worker mock_version): 120*c2e18aaaSAndroid Build Coastguard Worker """Test if _get_mac_ide and _get_linux_ide return correct IDE class.""" 121*c2e18aaaSAndroid Build Coastguard Worker mock_preference.return_value = None 122*c2e18aaaSAndroid Build Coastguard Worker mock_path.return_value = 'path' 123*c2e18aaaSAndroid Build Coastguard Worker mock_cfg.return_value = None 124*c2e18aaaSAndroid Build Coastguard Worker mock_version.return_value = 'default' 125*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance(ide_util._get_mac_ide(), ide_util.IdeMacIntelliJ) 126*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance(ide_util._get_mac_ide(None, 's'), 127*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeMacStudio) 128*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance(ide_util._get_mac_ide(None, 'e'), 129*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeMacEclipse) 130*c2e18aaaSAndroid Build Coastguard Worker 131*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance(ide_util._get_mac_ide(None, 'c'), 132*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeMacCLion) 133*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance(ide_util._get_linux_ide(), 134*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeLinuxIntelliJ) 135*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance( 136*c2e18aaaSAndroid Build Coastguard Worker ide_util._get_linux_ide(None, 's'), ide_util.IdeLinuxStudio) 137*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance( 138*c2e18aaaSAndroid Build Coastguard Worker ide_util._get_linux_ide(None, 'e'), ide_util.IdeLinuxEclipse) 139*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance( 140*c2e18aaaSAndroid Build Coastguard Worker ide_util._get_linux_ide(None, 'c'), ide_util.IdeLinuxCLion) 141*c2e18aaaSAndroid Build Coastguard Worker 142*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_set_installed_path') 143*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'get_script_from_input_path') 144*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_get_script_from_system') 145*c2e18aaaSAndroid Build Coastguard Worker def test_init_ideintellij(self, mock_sys, mock_input, mock_set): 146*c2e18aaaSAndroid Build Coastguard Worker """Test IdeIntelliJ's __init__ method.""" 147*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeLinuxIntelliJ() 148*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_sys.called) 149*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeMacIntelliJ() 150*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_sys.called) 151*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeLinuxIntelliJ('some_path') 152*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_input.called) 153*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_set.called) 154*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeMacIntelliJ('some_path') 155*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_input.called) 156*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_set.called) 157*c2e18aaaSAndroid Build Coastguard Worker 158*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_get_preferred_version') 159*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_get_config_root_paths') 160*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeBase, 'apply_optional_config') 161*c2e18aaaSAndroid Build Coastguard Worker def test_config_ide(self, mock_config, mock_paths, mock_preference): 162*c2e18aaaSAndroid Build Coastguard Worker """Test IDEA, IdeUtil.config_ide won't call base none implement api.""" 163*c2e18aaaSAndroid Build Coastguard Worker # Mock SDkConfig flow to not generate real jdk config file. 164*c2e18aaaSAndroid Build Coastguard Worker mock_preference.return_value = None 165*c2e18aaaSAndroid Build Coastguard Worker module_path = os.path.join(self._TEST_DIR, 'test') 166*c2e18aaaSAndroid Build Coastguard Worker idea_path = os.path.join(module_path, '.idea') 167*c2e18aaaSAndroid Build Coastguard Worker os.makedirs(idea_path) 168*c2e18aaaSAndroid Build Coastguard Worker shutil.copy(IdeUtilUnittests._MODULE_XML_SAMPLE, idea_path) 169*c2e18aaaSAndroid Build Coastguard Worker util_obj = ide_util.IdeUtil() 170*c2e18aaaSAndroid Build Coastguard Worker util_obj.config_ide(module_path) 171*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_config.called) 172*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_paths.called) 173*c2e18aaaSAndroid Build Coastguard Worker 174*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_setup_ide') 175*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'set_preferred_version') 176*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile') 177*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(os.path, 'realpath') 178*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'get_script_from_input_path') 179*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'get_script_from_internal_path') 180*c2e18aaaSAndroid Build Coastguard Worker def test_get_linux_config_1(self, mock_path, mock_path2, mock_path3, 181*c2e18aaaSAndroid Build Coastguard Worker mock_is_file, mock_cfg, mock_setup_ide): 182*c2e18aaaSAndroid Build Coastguard Worker """Test to get unique config path for linux IDEA case.""" 183*c2e18aaaSAndroid Build Coastguard Worker if (not android_dev_os.AndroidDevOS.MAC == 184*c2e18aaaSAndroid Build Coastguard Worker android_dev_os.AndroidDevOS.get_os_type()): 185*c2e18aaaSAndroid Build Coastguard Worker mock_path.return_value = ['/opt/intellij-ce-2018.3/bin/idea.sh'] 186*c2e18aaaSAndroid Build Coastguard Worker mock_path2.return_value = ['/opt/intellij-ce-2018.3/bin/idea.sh'] 187*c2e18aaaSAndroid Build Coastguard Worker mock_path3.return_value = '/opt/intellij-ce-2018.3/bin/idea.sh' 188*c2e18aaaSAndroid Build Coastguard Worker mock_is_file.return_value = True 189*c2e18aaaSAndroid Build Coastguard Worker mock_cfg.return_value = None 190*c2e18aaaSAndroid Build Coastguard Worker mock_setup_ide.return_value = None 191*c2e18aaaSAndroid Build Coastguard Worker ide_obj = ide_util.IdeLinuxIntelliJ('default_path') 192*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(1, len(ide_obj._get_config_root_paths())) 193*c2e18aaaSAndroid Build Coastguard Worker else: 194*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue((android_dev_os.AndroidDevOS.MAC == 195*c2e18aaaSAndroid Build Coastguard Worker android_dev_os.AndroidDevOS.get_os_type())) 196*c2e18aaaSAndroid Build Coastguard Worker 197*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'set_preferred_version') 198*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('glob.glob') 199*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'get_script_from_input_path') 200*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'get_script_from_internal_path') 201*c2e18aaaSAndroid Build Coastguard Worker def test_get_linux_config_2(self, mock_path, mock_path_2, mock_filter, 202*c2e18aaaSAndroid Build Coastguard Worker mock_cfg): 203*c2e18aaaSAndroid Build Coastguard Worker """Test to get unique config path for linux IDEA case.""" 204*c2e18aaaSAndroid Build Coastguard Worker if (not android_dev_os.AndroidDevOS.MAC == 205*c2e18aaaSAndroid Build Coastguard Worker android_dev_os.AndroidDevOS.get_os_type()): 206*c2e18aaaSAndroid Build Coastguard Worker mock_path.return_value = ['/opt/intelliJ-ce-2018.3/bin/idea.sh'] 207*c2e18aaaSAndroid Build Coastguard Worker mock_path_2.return_value = ['/opt/intelliJ-ce-2018.3/bin/idea.sh'] 208*c2e18aaaSAndroid Build Coastguard Worker mock_cfg.return_value = None 209*c2e18aaaSAndroid Build Coastguard Worker ide_obj = ide_util.IdeLinuxIntelliJ() 210*c2e18aaaSAndroid Build Coastguard Worker mock_filter.called = False 211*c2e18aaaSAndroid Build Coastguard Worker ide_obj._get_config_root_paths() 212*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_filter.called) 213*c2e18aaaSAndroid Build Coastguard Worker else: 214*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue((android_dev_os.AndroidDevOS.MAC == 215*c2e18aaaSAndroid Build Coastguard Worker android_dev_os.AndroidDevOS.get_os_type())) 216*c2e18aaaSAndroid Build Coastguard Worker 217*c2e18aaaSAndroid Build Coastguard Worker def test_get_mac_config_root_paths(self): 218*c2e18aaaSAndroid Build Coastguard Worker """Return None if there's no install path.""" 219*c2e18aaaSAndroid Build Coastguard Worker if (android_dev_os.AndroidDevOS.MAC == 220*c2e18aaaSAndroid Build Coastguard Worker android_dev_os.AndroidDevOS.get_os_type()): 221*c2e18aaaSAndroid Build Coastguard Worker mac_ide = ide_util.IdeMacIntelliJ() 222*c2e18aaaSAndroid Build Coastguard Worker mac_ide._installed_path = None 223*c2e18aaaSAndroid Build Coastguard Worker self.assertIsNone(mac_ide._get_config_root_paths()) 224*c2e18aaaSAndroid Build Coastguard Worker else: 225*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse((android_dev_os.AndroidDevOS.MAC == 226*c2e18aaaSAndroid Build Coastguard Worker android_dev_os.AndroidDevOS.get_os_type())) 227*c2e18aaaSAndroid Build Coastguard Worker 228*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'set_preferred_version') 229*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('glob.glob') 230*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'get_script_from_input_path') 231*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'get_script_from_internal_path') 232*c2e18aaaSAndroid Build Coastguard Worker def test_get_linux_config_root(self, mock_path_1, mock_path_2, mock_filter, 233*c2e18aaaSAndroid Build Coastguard Worker mock_cfg): 234*c2e18aaaSAndroid Build Coastguard Worker """Test to go filter logic for self download case.""" 235*c2e18aaaSAndroid Build Coastguard Worker mock_path_1.return_value = ['/usr/tester/IDEA/IC2018.3.3/bin'] 236*c2e18aaaSAndroid Build Coastguard Worker mock_path_2.return_value = ['/usr/tester/IDEA/IC2018.3.3/bin'] 237*c2e18aaaSAndroid Build Coastguard Worker mock_cfg.return_value = None 238*c2e18aaaSAndroid Build Coastguard Worker ide_obj = ide_util.IdeLinuxIntelliJ() 239*c2e18aaaSAndroid Build Coastguard Worker mock_filter.reset() 240*c2e18aaaSAndroid Build Coastguard Worker ide_obj._get_config_root_paths() 241*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_filter.called) 242*c2e18aaaSAndroid Build Coastguard Worker 243*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeBase, '_add_test_mapping_file_type') 244*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.IdeaProperties, 'set_max_file_size') 245*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_file_gen, 'gen_enable_debugger_module') 246*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(jdk_table.JDKTableXML, 'config_jdk_table_xml') 247*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeBase, '_get_config_root_paths') 248*c2e18aaaSAndroid Build Coastguard Worker def test_apply_optional_config(self, mock_path, mock_config_xml, 249*c2e18aaaSAndroid Build Coastguard Worker mock_gen_debugger, mock_set_size, 250*c2e18aaaSAndroid Build Coastguard Worker mock_test_mapping): 251*c2e18aaaSAndroid Build Coastguard Worker """Test basic logic of apply_optional_config.""" 252*c2e18aaaSAndroid Build Coastguard Worker ide = ide_util.IdeBase() 253*c2e18aaaSAndroid Build Coastguard Worker ide._installed_path = None 254*c2e18aaaSAndroid Build Coastguard Worker ide.apply_optional_config() 255*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_path.called) 256*c2e18aaaSAndroid Build Coastguard Worker ide._installed_path = 'default_path' 257*c2e18aaaSAndroid Build Coastguard Worker ide.apply_optional_config() 258*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_path.called) 259*c2e18aaaSAndroid Build Coastguard Worker mock_path.return_value = [] 260*c2e18aaaSAndroid Build Coastguard Worker ide.apply_optional_config() 261*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_config_xml.called) 262*c2e18aaaSAndroid Build Coastguard Worker mock_path.return_value = ['a'] 263*c2e18aaaSAndroid Build Coastguard Worker mock_config_xml.return_value = False 264*c2e18aaaSAndroid Build Coastguard Worker ide.apply_optional_config() 265*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_gen_debugger.called) 266*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_set_size.called) 267*c2e18aaaSAndroid Build Coastguard Worker mock_config_xml.return_value = True 268*c2e18aaaSAndroid Build Coastguard Worker ide.apply_optional_config() 269*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(ide.config_folders, ['a']) 270*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_debugger.called) 271*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_set_size.called) 272*c2e18aaaSAndroid Build Coastguard Worker 273*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.path.isfile') 274*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ElementTree.ElementTree, 'write') 275*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'to_pretty_xml') 276*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'file_generate') 277*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ElementTree, 'parse') 278*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ElementTree.ElementTree, 'getroot') 279*c2e18aaaSAndroid Build Coastguard Worker def test_add_test_mapping_file_type(self, mock_root, mock_parse, 280*c2e18aaaSAndroid Build Coastguard Worker mock_file_gen, mock_pretty_xml, 281*c2e18aaaSAndroid Build Coastguard Worker mock_write, mock_isfile): 282*c2e18aaaSAndroid Build Coastguard Worker """Test basic logic of _add_test_mapping_file_type.""" 283*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.return_value = False 284*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_file_gen.called) 285*c2e18aaaSAndroid Build Coastguard Worker 286*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.return_value = True 287*c2e18aaaSAndroid Build Coastguard Worker mock_parse.return_value = None 288*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_file_gen.called) 289*c2e18aaaSAndroid Build Coastguard Worker 290*c2e18aaaSAndroid Build Coastguard Worker mock_parse.return_value = ElementTree.ElementTree() 291*c2e18aaaSAndroid Build Coastguard Worker mock_root.return_value = ElementTree.fromstring( 292*c2e18aaaSAndroid Build Coastguard Worker self._TEST_XML_CONTENT_2) 293*c2e18aaaSAndroid Build Coastguard Worker ide_obj = ide_util.IdeBase() 294*c2e18aaaSAndroid Build Coastguard Worker ide_obj._add_test_mapping_file_type('') 295*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_file_gen.called) 296*c2e18aaaSAndroid Build Coastguard Worker mock_root.return_value = ElementTree.fromstring(self._TEST_XML_CONTENT) 297*c2e18aaaSAndroid Build Coastguard Worker ide_obj._add_test_mapping_file_type('') 298*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_pretty_xml.called) 299*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_file_gen.called) 300*c2e18aaaSAndroid Build Coastguard Worker 301*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.path.realpath') 302*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.path.isfile') 303*c2e18aaaSAndroid Build Coastguard Worker def test_merge_symbolic_version(self, mock_isfile, mock_realpath): 304*c2e18aaaSAndroid Build Coastguard Worker """Test _merge_symbolic_version and _get_real_path.""" 305*c2e18aaaSAndroid Build Coastguard Worker symbolic_path = ide_util.IdeLinuxIntelliJ._SYMBOLIC_VERSIONS[0] 306*c2e18aaaSAndroid Build Coastguard Worker original_path = 'intellij-ce-2019.1/bin/idea.sh' 307*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.return_value = True 308*c2e18aaaSAndroid Build Coastguard Worker mock_realpath.return_value = original_path 309*c2e18aaaSAndroid Build Coastguard Worker ide_obj = ide_util.IdeLinuxIntelliJ('default_path') 310*c2e18aaaSAndroid Build Coastguard Worker merged_version = ide_obj._merge_symbolic_version( 311*c2e18aaaSAndroid Build Coastguard Worker [symbolic_path, original_path]) 312*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 313*c2e18aaaSAndroid Build Coastguard Worker merged_version[0], symbolic_path + ' -> ' + original_path) 314*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 315*c2e18aaaSAndroid Build Coastguard Worker ide_obj._get_real_path(merged_version[0]), symbolic_path) 316*c2e18aaaSAndroid Build Coastguard Worker 317*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'set_preferred_version') 318*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.path.isfile') 319*c2e18aaaSAndroid Build Coastguard Worker def test_get_application_path(self, mock_isfile, mock_cfg): 320*c2e18aaaSAndroid Build Coastguard Worker """Test _get_application_path.""" 321*c2e18aaaSAndroid Build Coastguard Worker mock_cfg.return_value = None 322*c2e18aaaSAndroid Build Coastguard Worker ide_obj = ide_util.IdeLinuxIntelliJ('default_path') 323*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.return_value = True 324*c2e18aaaSAndroid Build Coastguard Worker test_path = None 325*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(None, ide_obj._get_application_path(test_path)) 326*c2e18aaaSAndroid Build Coastguard Worker 327*c2e18aaaSAndroid Build Coastguard Worker test_path = 'a/b/c/d-e/f-gh/foo' 328*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(None, ide_obj._get_application_path(test_path)) 329*c2e18aaaSAndroid Build Coastguard Worker 330*c2e18aaaSAndroid Build Coastguard Worker test_path = 'a/b/c/d/intellij/foo' 331*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(None, ide_obj._get_application_path(test_path)) 332*c2e18aaaSAndroid Build Coastguard Worker 333*c2e18aaaSAndroid Build Coastguard Worker test_path = 'a/b/c/d/intellij-efg/foo' 334*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(None, ide_obj._get_application_path(test_path)) 335*c2e18aaaSAndroid Build Coastguard Worker 336*c2e18aaaSAndroid Build Coastguard Worker test_path = 'a/b/c/d/intellij-efg-hi/foo' 337*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(None, ide_obj._get_application_path(test_path)) 338*c2e18aaaSAndroid Build Coastguard Worker 339*c2e18aaaSAndroid Build Coastguard Worker test_path = 'a/b/c/d/intellij-ce-303/foo' 340*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual('.IdeaIC303', ide_obj._get_application_path(test_path)) 341*c2e18aaaSAndroid Build Coastguard Worker 342*c2e18aaaSAndroid Build Coastguard Worker test_path = 'a/b/c/d/intellij-ue-303/foo' 343*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual('.IntelliJIdea303', ide_obj._get_application_path( 344*c2e18aaaSAndroid Build Coastguard Worker test_path)) 345*c2e18aaaSAndroid Build Coastguard Worker 346*c2e18aaaSAndroid Build Coastguard Worker def test_get_ide_util_instance_with_no_launch(self): 347*c2e18aaaSAndroid Build Coastguard Worker """Test _get_ide_util_instance with no launch IDE.""" 348*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['tradefed', '-n']) 349*c2e18aaaSAndroid Build Coastguard Worker project_config.ProjectConfig(args) 350*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(ide_util.get_ide_util_instance(args), None) 351*c2e18aaaSAndroid Build Coastguard Worker 352*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'set_preferred_version') 353*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_get_preferred_version') 354*c2e18aaaSAndroid Build Coastguard Worker def test_get_ide_util_instance_with_success(self, mock_preference, 355*c2e18aaaSAndroid Build Coastguard Worker mock_cfg_write): 356*c2e18aaaSAndroid Build Coastguard Worker """Test _get_ide_util_instance with success.""" 357*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['tradefed']) 358*c2e18aaaSAndroid Build Coastguard Worker project_config.ProjectConfig(args) 359*c2e18aaaSAndroid Build Coastguard Worker mock_cfg_write.return_value = None 360*c2e18aaaSAndroid Build Coastguard Worker mock_preference.return_value = '1' 361*c2e18aaaSAndroid Build Coastguard Worker self.assertIsInstance( 362*c2e18aaaSAndroid Build Coastguard Worker ide_util.get_ide_util_instance(), ide_util.IdeUtil) 363*c2e18aaaSAndroid Build Coastguard Worker 364*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'set_preferred_version') 365*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_get_preferred_version') 366*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeUtil, 'is_ide_installed') 367*c2e18aaaSAndroid Build Coastguard Worker def test_get_ide_util_instance_with_failure( 368*c2e18aaaSAndroid Build Coastguard Worker self, mock_installed, mock_preference, mock_cfg_write): 369*c2e18aaaSAndroid Build Coastguard Worker """Test _get_ide_util_instance with failure.""" 370*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['tradefed']) 371*c2e18aaaSAndroid Build Coastguard Worker project_config.ProjectConfig(args) 372*c2e18aaaSAndroid Build Coastguard Worker mock_installed.return_value = False 373*c2e18aaaSAndroid Build Coastguard Worker mock_cfg_write.return_value = None 374*c2e18aaaSAndroid Build Coastguard Worker mock_preference.return_value = '1' 375*c2e18aaaSAndroid Build Coastguard Worker with self.assertRaises(errors.IDENotExistError): 376*c2e18aaaSAndroid Build Coastguard Worker ide_util.get_ide_util_instance() 377*c2e18aaaSAndroid Build Coastguard Worker 378*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'get_scripts_from_dir_path') 379*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, '_run_ide_sh') 380*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('logging.info') 381*c2e18aaaSAndroid Build Coastguard Worker def test_ide_base(self, mock_log, mock_run_ide, mock_run_path): 382*c2e18aaaSAndroid Build Coastguard Worker """Test ide_base class.""" 383*c2e18aaaSAndroid Build Coastguard Worker # Test raise NotImplementedError. 384*c2e18aaaSAndroid Build Coastguard Worker ide_base = ide_util.IdeBase() 385*c2e18aaaSAndroid Build Coastguard Worker with self.assertRaises(NotImplementedError): 386*c2e18aaaSAndroid Build Coastguard Worker ide_base._get_config_root_paths() 387*c2e18aaaSAndroid Build Coastguard Worker 388*c2e18aaaSAndroid Build Coastguard Worker # Test ide_name. 389*c2e18aaaSAndroid Build Coastguard Worker ide_base._ide_name = 'a' 390*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(ide_base.ide_name, 'a') 391*c2e18aaaSAndroid Build Coastguard Worker 392*c2e18aaaSAndroid Build Coastguard Worker # Test _get_ide_cmd. 393*c2e18aaaSAndroid Build Coastguard Worker ide_base._installed_path = '/a/b' 394*c2e18aaaSAndroid Build Coastguard Worker ide_base.project_abspath = '/x/y' 395*c2e18aaaSAndroid Build Coastguard Worker expected_result = 'nohup /a/b /x/y 2>/dev/null >&2 &' 396*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(ide_base._get_ide_cmd(), expected_result) 397*c2e18aaaSAndroid Build Coastguard Worker 398*c2e18aaaSAndroid Build Coastguard Worker # Test launch_ide. 399*c2e18aaaSAndroid Build Coastguard Worker mock_run_ide.return_value = True 400*c2e18aaaSAndroid Build Coastguard Worker ide_base.launch_ide() 401*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_log.called) 402*c2e18aaaSAndroid Build Coastguard Worker 403*c2e18aaaSAndroid Build Coastguard Worker # Test _get_ide_from_environment_paths. 404*c2e18aaaSAndroid Build Coastguard Worker mock_run_path.return_value = '/a/b/idea.sh' 405*c2e18aaaSAndroid Build Coastguard Worker ide_base._bin_file_name = 'idea.sh' 406*c2e18aaaSAndroid Build Coastguard Worker expected_path = '/a/b/idea.sh' 407*c2e18aaaSAndroid Build Coastguard Worker ide_path = ide_base._get_ide_from_environment_paths() 408*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(ide_path, expected_path) 409*c2e18aaaSAndroid Build Coastguard Worker 410*c2e18aaaSAndroid Build Coastguard Worker def test_ide_intellij(self): 411*c2e18aaaSAndroid Build Coastguard Worker """Test IdeIntelliJ class.""" 412*c2e18aaaSAndroid Build Coastguard Worker # Test raise NotImplementedError. 413*c2e18aaaSAndroid Build Coastguard Worker ide_intellij = ide_util.IdeIntelliJ() 414*c2e18aaaSAndroid Build Coastguard Worker with self.assertRaises(NotImplementedError): 415*c2e18aaaSAndroid Build Coastguard Worker ide_intellij._get_config_root_paths() 416*c2e18aaaSAndroid Build Coastguard Worker 417*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'set_preferred_version') 418*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'preferred_version') 419*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'ask_preference') 420*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.AidegenConfig, 'deprecated_intellij_version') 421*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeIntelliJ, '_get_all_versions') 422*c2e18aaaSAndroid Build Coastguard Worker def test_intellij_get_preferred_version(self, 423*c2e18aaaSAndroid Build Coastguard Worker mock_all_versions, 424*c2e18aaaSAndroid Build Coastguard Worker mock_deprecated_version, 425*c2e18aaaSAndroid Build Coastguard Worker mock_ask_preference, 426*c2e18aaaSAndroid Build Coastguard Worker mock_preference, 427*c2e18aaaSAndroid Build Coastguard Worker mock_write_cfg): 428*c2e18aaaSAndroid Build Coastguard Worker """Test _get_preferred_version for IdeIntelliJ class.""" 429*c2e18aaaSAndroid Build Coastguard Worker mock_write_cfg.return_value = None 430*c2e18aaaSAndroid Build Coastguard Worker ide_intellij = ide_util.IdeIntelliJ() 431*c2e18aaaSAndroid Build Coastguard Worker 432*c2e18aaaSAndroid Build Coastguard Worker # No IntelliJ version is installed. 433*c2e18aaaSAndroid Build Coastguard Worker mock_all_versions.return_value = ['/a/b', '/a/c'] 434*c2e18aaaSAndroid Build Coastguard Worker mock_deprecated_version.return_value = True 435*c2e18aaaSAndroid Build Coastguard Worker version = ide_intellij._get_preferred_version() 436*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(version, None) 437*c2e18aaaSAndroid Build Coastguard Worker 438*c2e18aaaSAndroid Build Coastguard Worker # Load default preferred version. 439*c2e18aaaSAndroid Build Coastguard Worker mock_all_versions.return_value = ['/a/b', '/a/c'] 440*c2e18aaaSAndroid Build Coastguard Worker mock_deprecated_version.return_value = False 441*c2e18aaaSAndroid Build Coastguard Worker ide_intellij._config_reset = False 442*c2e18aaaSAndroid Build Coastguard Worker expected_result = '/a/b' 443*c2e18aaaSAndroid Build Coastguard Worker mock_preference.return_value = '/a/b' 444*c2e18aaaSAndroid Build Coastguard Worker version = ide_intellij._get_preferred_version() 445*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(version, expected_result) 446*c2e18aaaSAndroid Build Coastguard Worker 447*c2e18aaaSAndroid Build Coastguard Worker # Asking user the preferred version. 448*c2e18aaaSAndroid Build Coastguard Worker mock_preference.reset() 449*c2e18aaaSAndroid Build Coastguard Worker mock_all_versions.return_value = ['/a/b', '/a/c'] 450*c2e18aaaSAndroid Build Coastguard Worker mock_deprecated_version.return_value = False 451*c2e18aaaSAndroid Build Coastguard Worker ide_intellij._config_reset = True 452*c2e18aaaSAndroid Build Coastguard Worker mock_ask_preference.return_value = '/a/b' 453*c2e18aaaSAndroid Build Coastguard Worker version = ide_intellij._get_preferred_version() 454*c2e18aaaSAndroid Build Coastguard Worker expected_result = '/a/b' 455*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(version, expected_result) 456*c2e18aaaSAndroid Build Coastguard Worker 457*c2e18aaaSAndroid Build Coastguard Worker mock_all_versions.return_value = ['/a/b', '/a/c'] 458*c2e18aaaSAndroid Build Coastguard Worker mock_ask_preference.return_value = None 459*c2e18aaaSAndroid Build Coastguard Worker expected_result = '/a/b' 460*c2e18aaaSAndroid Build Coastguard Worker mock_preference.return_value = '/a/b' 461*c2e18aaaSAndroid Build Coastguard Worker version = ide_intellij._get_preferred_version() 462*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(version, expected_result) 463*c2e18aaaSAndroid Build Coastguard Worker 464*c2e18aaaSAndroid Build Coastguard Worker # The all_versions list has only one version. 465*c2e18aaaSAndroid Build Coastguard Worker mock_all_versions.return_value = ['/a/b'] 466*c2e18aaaSAndroid Build Coastguard Worker mock_deprecated_version.return_value = False 467*c2e18aaaSAndroid Build Coastguard Worker version = ide_intellij._get_preferred_version() 468*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(version, '/a/b') 469*c2e18aaaSAndroid Build Coastguard Worker 470*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeBase, '_add_test_mapping_file_type') 471*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'ask_preference') 472*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(config.IdeaProperties, 'set_max_file_size') 473*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_file_gen, 'gen_enable_debugger_module') 474*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeStudio, '_get_config_root_paths') 475*c2e18aaaSAndroid Build Coastguard Worker def test_android_studio_class(self, mock_get_config_paths, 476*c2e18aaaSAndroid Build Coastguard Worker mock_gen_debugger, mock_set_size, mock_ask, 477*c2e18aaaSAndroid Build Coastguard Worker mock_add_file_type): 478*c2e18aaaSAndroid Build Coastguard Worker """Test IdeStudio.""" 479*c2e18aaaSAndroid Build Coastguard Worker mock_get_config_paths.return_value = ['path1', 'path2'] 480*c2e18aaaSAndroid Build Coastguard Worker mock_gen_debugger.return_value = True 481*c2e18aaaSAndroid Build Coastguard Worker mock_set_size.return_value = True 482*c2e18aaaSAndroid Build Coastguard Worker mock_ask.return_value = None 483*c2e18aaaSAndroid Build Coastguard Worker obj = ide_util.IdeStudio() 484*c2e18aaaSAndroid Build Coastguard Worker obj._installed_path = False 485*c2e18aaaSAndroid Build Coastguard Worker # Test the native IDE case. 486*c2e18aaaSAndroid Build Coastguard Worker obj.project_abspath = os.path.realpath(__file__) 487*c2e18aaaSAndroid Build Coastguard Worker obj.apply_optional_config() 488*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(obj.config_folders, []) 489*c2e18aaaSAndroid Build Coastguard Worker 490*c2e18aaaSAndroid Build Coastguard Worker # Test the java IDE case. 491*c2e18aaaSAndroid Build Coastguard Worker obj.project_abspath = IdeUtilUnittests._TEST_DIR 492*c2e18aaaSAndroid Build Coastguard Worker obj.apply_optional_config() 493*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(obj.config_folders, []) 494*c2e18aaaSAndroid Build Coastguard Worker 495*c2e18aaaSAndroid Build Coastguard Worker mock_get_config_paths.return_value = [] 496*c2e18aaaSAndroid Build Coastguard Worker self.assertIsNone(obj.apply_optional_config()) 497*c2e18aaaSAndroid Build Coastguard Worker 498*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'ask_preference') 499*c2e18aaaSAndroid Build Coastguard Worker def test_studio_get_config_root_paths(self, mock_ask): 500*c2e18aaaSAndroid Build Coastguard Worker """Test the method _get_config_root_paths of IdeStudio.""" 501*c2e18aaaSAndroid Build Coastguard Worker mock_ask.return_value = None 502*c2e18aaaSAndroid Build Coastguard Worker obj = ide_util.IdeStudio() 503*c2e18aaaSAndroid Build Coastguard Worker with self.assertRaises(NotImplementedError): 504*c2e18aaaSAndroid Build Coastguard Worker obj._get_config_root_paths() 505*c2e18aaaSAndroid Build Coastguard Worker 506*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeBase, 'apply_optional_config') 507*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isdir') 508*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(os.path, 'isfile') 509*c2e18aaaSAndroid Build Coastguard Worker def test_studio_optional_config_apply(self, mock_isfile, mock_isdir, 510*c2e18aaaSAndroid Build Coastguard Worker mock_base_implement): 511*c2e18aaaSAndroid Build Coastguard Worker """Test IdeStudio.apply_optional_config.""" 512*c2e18aaaSAndroid Build Coastguard Worker obj = ide_util.IdeStudio() 513*c2e18aaaSAndroid Build Coastguard Worker obj.project_abspath = None 514*c2e18aaaSAndroid Build Coastguard Worker # Test no project path case. 515*c2e18aaaSAndroid Build Coastguard Worker obj.apply_optional_config() 516*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_isfile.called) 517*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_isdir.called) 518*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_base_implement.called) 519*c2e18aaaSAndroid Build Coastguard Worker # Test the native IDE case. 520*c2e18aaaSAndroid Build Coastguard Worker obj.project_abspath = '/' 521*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.reset_mock() 522*c2e18aaaSAndroid Build Coastguard Worker mock_isdir.reset_mock() 523*c2e18aaaSAndroid Build Coastguard Worker mock_base_implement.reset_mock() 524*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.return_value = True 525*c2e18aaaSAndroid Build Coastguard Worker obj.apply_optional_config() 526*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_isfile.called) 527*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_isdir.called) 528*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_base_implement.called) 529*c2e18aaaSAndroid Build Coastguard Worker # Test the java IDE case. 530*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.reset_mock() 531*c2e18aaaSAndroid Build Coastguard Worker mock_isdir.reset_mock() 532*c2e18aaaSAndroid Build Coastguard Worker mock_base_implement.reset_mock() 533*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.return_value = False 534*c2e18aaaSAndroid Build Coastguard Worker mock_isdir.return_value = True 535*c2e18aaaSAndroid Build Coastguard Worker obj.apply_optional_config() 536*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_base_implement.called) 537*c2e18aaaSAndroid Build Coastguard Worker # Test neither case. 538*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.reset_mock() 539*c2e18aaaSAndroid Build Coastguard Worker mock_isdir.reset_mock() 540*c2e18aaaSAndroid Build Coastguard Worker mock_base_implement.reset_mock() 541*c2e18aaaSAndroid Build Coastguard Worker mock_isfile.return_value = False 542*c2e18aaaSAndroid Build Coastguard Worker mock_isdir.return_value = False 543*c2e18aaaSAndroid Build Coastguard Worker obj.apply_optional_config() 544*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_base_implement.called) 545*c2e18aaaSAndroid Build Coastguard Worker 546*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_common_util, 'ask_preference') 547*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.getenv') 548*c2e18aaaSAndroid Build Coastguard Worker def test_linux_android_studio_class(self, mock_get_home, mock_ask): 549*c2e18aaaSAndroid Build Coastguard Worker """Test the method _get_config_root_paths of IdeLinuxStudio.""" 550*c2e18aaaSAndroid Build Coastguard Worker mock_get_home.return_value = self._TEST_DIR 551*c2e18aaaSAndroid Build Coastguard Worker studio_config_dir1 = os.path.join(self._TEST_DIR, '.AndroidStudio3.0') 552*c2e18aaaSAndroid Build Coastguard Worker studio_config_dir2 = os.path.join(self._TEST_DIR, '.AndroidStudio3.1') 553*c2e18aaaSAndroid Build Coastguard Worker os.makedirs(studio_config_dir1) 554*c2e18aaaSAndroid Build Coastguard Worker os.makedirs(studio_config_dir2) 555*c2e18aaaSAndroid Build Coastguard Worker expected_result = [studio_config_dir1, studio_config_dir2] 556*c2e18aaaSAndroid Build Coastguard Worker mock_ask.return_value = None 557*c2e18aaaSAndroid Build Coastguard Worker obj = ide_util.IdeLinuxStudio() 558*c2e18aaaSAndroid Build Coastguard Worker config_paths = obj._get_config_root_paths() 559*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(sorted(config_paths), sorted(expected_result)) 560*c2e18aaaSAndroid Build Coastguard Worker 561*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.getenv') 562*c2e18aaaSAndroid Build Coastguard Worker def test_mac_android_studio_class(self, mock_get_home): 563*c2e18aaaSAndroid Build Coastguard Worker """Test the method _get_config_root_paths of IdeMacStudio.""" 564*c2e18aaaSAndroid Build Coastguard Worker mock_get_home.return_value = self._TEST_DIR 565*c2e18aaaSAndroid Build Coastguard Worker studio_config_dir1 = os.path.join(self._TEST_DIR, 'Library', 566*c2e18aaaSAndroid Build Coastguard Worker 'Preferences', 'AndroidStudio3.0') 567*c2e18aaaSAndroid Build Coastguard Worker studio_config_dir2 = os.path.join(self._TEST_DIR, 'Library', 568*c2e18aaaSAndroid Build Coastguard Worker 'Preferences', 'AndroidStudio3.1') 569*c2e18aaaSAndroid Build Coastguard Worker os.makedirs(studio_config_dir1) 570*c2e18aaaSAndroid Build Coastguard Worker os.makedirs(studio_config_dir2) 571*c2e18aaaSAndroid Build Coastguard Worker expected_result = [studio_config_dir1, studio_config_dir2] 572*c2e18aaaSAndroid Build Coastguard Worker 573*c2e18aaaSAndroid Build Coastguard Worker obj = ide_util.IdeMacStudio() 574*c2e18aaaSAndroid Build Coastguard Worker config_paths = obj._get_config_root_paths() 575*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(sorted(config_paths), sorted(expected_result)) 576*c2e18aaaSAndroid Build Coastguard Worker 577*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.access') 578*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('glob.glob') 579*c2e18aaaSAndroid Build Coastguard Worker def test_eclipse_get_script_from_system(self, mock_glob, mock_file_access): 580*c2e18aaaSAndroid Build Coastguard Worker """Test IdeEclipse _get_script_from_system method.""" 581*c2e18aaaSAndroid Build Coastguard Worker eclipse = ide_util.IdeEclipse() 582*c2e18aaaSAndroid Build Coastguard Worker 583*c2e18aaaSAndroid Build Coastguard Worker # Test no binary path in _get_script_from_system. 584*c2e18aaaSAndroid Build Coastguard Worker eclipse._bin_paths = [] 585*c2e18aaaSAndroid Build Coastguard Worker expected_result = None 586*c2e18aaaSAndroid Build Coastguard Worker test_result = eclipse._get_script_from_system() 587*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 588*c2e18aaaSAndroid Build Coastguard Worker 589*c2e18aaaSAndroid Build Coastguard Worker # Test get the matched binary from _get_script_from_system. 590*c2e18aaaSAndroid Build Coastguard Worker mock_glob.return_value = ['/a/b/eclipse'] 591*c2e18aaaSAndroid Build Coastguard Worker mock_file_access.return_value = True 592*c2e18aaaSAndroid Build Coastguard Worker eclipse._bin_paths = ['/a/b/eclipse'] 593*c2e18aaaSAndroid Build Coastguard Worker expected_result = '/a/b/eclipse' 594*c2e18aaaSAndroid Build Coastguard Worker test_result = eclipse._get_script_from_system() 595*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 596*c2e18aaaSAndroid Build Coastguard Worker 597*c2e18aaaSAndroid Build Coastguard Worker # Test no matched binary from _get_script_from_system. 598*c2e18aaaSAndroid Build Coastguard Worker mock_glob.return_value = [] 599*c2e18aaaSAndroid Build Coastguard Worker eclipse._bin_paths = ['/a/b/eclipse'] 600*c2e18aaaSAndroid Build Coastguard Worker expected_result = None 601*c2e18aaaSAndroid Build Coastguard Worker test_result = eclipse._get_script_from_system() 602*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 603*c2e18aaaSAndroid Build Coastguard Worker 604*c2e18aaaSAndroid Build Coastguard Worker # Test the matched binary cannot be executed. 605*c2e18aaaSAndroid Build Coastguard Worker mock_glob.return_value = ['/a/b/eclipse'] 606*c2e18aaaSAndroid Build Coastguard Worker mock_file_access.return_value = False 607*c2e18aaaSAndroid Build Coastguard Worker eclipse._bin_paths = ['/a/b/eclipse'] 608*c2e18aaaSAndroid Build Coastguard Worker expected_result = None 609*c2e18aaaSAndroid Build Coastguard Worker test_result = eclipse._get_script_from_system() 610*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 611*c2e18aaaSAndroid Build Coastguard Worker 612*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('builtins.input') 613*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.path.exists') 614*c2e18aaaSAndroid Build Coastguard Worker def test_eclipse_get_ide_cmd(self, mock_exists, mock_input): 615*c2e18aaaSAndroid Build Coastguard Worker """Test IdeEclipse _get_ide_cmd method.""" 616*c2e18aaaSAndroid Build Coastguard Worker # Test open the IDE with the default Eclipse workspace. 617*c2e18aaaSAndroid Build Coastguard Worker eclipse = ide_util.IdeEclipse() 618*c2e18aaaSAndroid Build Coastguard Worker eclipse.cmd = ['eclipse'] 619*c2e18aaaSAndroid Build Coastguard Worker mock_exists.return_value = True 620*c2e18aaaSAndroid Build Coastguard Worker expected_result = ('eclipse -data ' 621*c2e18aaaSAndroid Build Coastguard Worker '~/Documents/AIDEGen_Eclipse_workspace ' 622*c2e18aaaSAndroid Build Coastguard Worker '2>/dev/null >&2 &') 623*c2e18aaaSAndroid Build Coastguard Worker test_result = eclipse._get_ide_cmd() 624*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 625*c2e18aaaSAndroid Build Coastguard Worker 626*c2e18aaaSAndroid Build Coastguard Worker # Test running command without the default workspace. 627*c2e18aaaSAndroid Build Coastguard Worker eclipse.cmd = ['eclipse'] 628*c2e18aaaSAndroid Build Coastguard Worker mock_exists.return_value = False 629*c2e18aaaSAndroid Build Coastguard Worker mock_input.return_value = 'n' 630*c2e18aaaSAndroid Build Coastguard Worker expected_result = 'eclipse 2>/dev/null >&2 &' 631*c2e18aaaSAndroid Build Coastguard Worker test_result = eclipse._get_ide_cmd() 632*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, expected_result) 633*c2e18aaaSAndroid Build Coastguard Worker 634*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeUtil, 'is_ide_installed') 635*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_config.ProjectConfig, 'get_instance') 636*c2e18aaaSAndroid Build Coastguard Worker def test_get_ide_util_instance(self, mock_config, mock_ide_installed): 637*c2e18aaaSAndroid Build Coastguard Worker """Test get_ide_util_instance.""" 638*c2e18aaaSAndroid Build Coastguard Worker # Test is_launch_ide conditions. 639*c2e18aaaSAndroid Build Coastguard Worker mock_instance = mock_config.return_value 640*c2e18aaaSAndroid Build Coastguard Worker mock_instance.is_launch_ide = False 641*c2e18aaaSAndroid Build Coastguard Worker ide_util.get_ide_util_instance() 642*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_ide_installed.called) 643*c2e18aaaSAndroid Build Coastguard Worker mock_instance.is_launch_ide = True 644*c2e18aaaSAndroid Build Coastguard Worker ide_util.get_ide_util_instance() 645*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_ide_installed.called) 646*c2e18aaaSAndroid Build Coastguard Worker 647*c2e18aaaSAndroid Build Coastguard Worker # Test ide is not installed. 648*c2e18aaaSAndroid Build Coastguard Worker mock_ide_installed.return_value = False 649*c2e18aaaSAndroid Build Coastguard Worker with self.assertRaises(errors.IDENotExistError): 650*c2e18aaaSAndroid Build Coastguard Worker ide_util.get_ide_util_instance() 651*c2e18aaaSAndroid Build Coastguard Worker 652*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeLinuxVSCode, '_init_installed_path') 653*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeLinuxVSCode, '_get_possible_bin_paths') 654*c2e18aaaSAndroid Build Coastguard Worker def test_ide_linux_vscode(self, mock_get_pos, mock_init_inst): 655*c2e18aaaSAndroid Build Coastguard Worker """Test IdeLinuxVSCode class.""" 656*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeLinuxVSCode() 657*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_pos.called) 658*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_init_inst.called) 659*c2e18aaaSAndroid Build Coastguard Worker 660*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeMacVSCode, '_init_installed_path') 661*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util.IdeMacVSCode, '_get_possible_bin_paths') 662*c2e18aaaSAndroid Build Coastguard Worker def test_ide_mac_vscode(self, mock_get_pos, mock_init_inst): 663*c2e18aaaSAndroid Build Coastguard Worker """Test IdeMacVSCode class.""" 664*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeMacVSCode() 665*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_pos.called) 666*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_init_inst.called) 667*c2e18aaaSAndroid Build Coastguard Worker 668*c2e18aaaSAndroid Build Coastguard Worker def test_get_all_versions(self): 669*c2e18aaaSAndroid Build Coastguard Worker """Test _get_all_versions.""" 670*c2e18aaaSAndroid Build Coastguard Worker ide = ide_util.IdeIntelliJ() 671*c2e18aaaSAndroid Build Coastguard Worker test_result = ide._get_all_versions('a', 'b') 672*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(test_result, ['a', 'b']) 673*c2e18aaaSAndroid Build Coastguard Worker 674*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('logging.warning') 675*c2e18aaaSAndroid Build Coastguard Worker def test_get_ide_version(self, mock_warn): 676*c2e18aaaSAndroid Build Coastguard Worker """Test _get_ide_version with conditions.""" 677*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 678*c2e18aaaSAndroid Build Coastguard Worker None, ide_util.IdeIntelliJ._get_ide_version('intellij-efg-hi')) 679*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_warn.called) 680*c2e18aaaSAndroid Build Coastguard Worker mock_warn.reset_mock() 681*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 682*c2e18aaaSAndroid Build Coastguard Worker '2020.1', 683*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeIntelliJ._get_ide_version('intellij-ue-2020.1')) 684*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_warn.called) 685*c2e18aaaSAndroid Build Coastguard Worker mock_warn.reset_mock() 686*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 687*c2e18aaaSAndroid Build Coastguard Worker '303', ide_util.IdeIntelliJ._get_ide_version('intellij-ue-303')) 688*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_warn.called) 689*c2e18aaaSAndroid Build Coastguard Worker 690*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('os.path.join') 691*c2e18aaaSAndroid Build Coastguard Worker def test_get_config_dir(self, mock_join): 692*c2e18aaaSAndroid Build Coastguard Worker """Test _get_config_dir with conditions.""" 693*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'IntelliJ2020.1' 694*c2e18aaaSAndroid Build Coastguard Worker ide_version = '2020.1' 695*c2e18aaaSAndroid Build Coastguard Worker ide_util.IdeIntelliJ._get_config_dir(ide_version, config_folder_name) 696*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue( 697*c2e18aaaSAndroid Build Coastguard Worker mock_join.called_with( 698*c2e18aaaSAndroid Build Coastguard Worker os.getenv('HOME'), '.config', 'JetBrains', config_folder_name)) 699*c2e18aaaSAndroid Build Coastguard Worker mock_join.reset_mock() 700*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'IntelliJ2019.3' 701*c2e18aaaSAndroid Build Coastguard Worker ide_version = '2019.3' 702*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue( 703*c2e18aaaSAndroid Build Coastguard Worker mock_join.called_with( 704*c2e18aaaSAndroid Build Coastguard Worker os.getenv('HOME'), config_folder_name, 'config')) 705*c2e18aaaSAndroid Build Coastguard Worker mock_join.reset_mock() 706*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(None, ide_util.IdeIntelliJ._get_config_dir( 707*c2e18aaaSAndroid Build Coastguard Worker 'Not-a-float', config_folder_name)) 708*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_join.called) 709*c2e18aaaSAndroid Build Coastguard Worker 710*c2e18aaaSAndroid Build Coastguard Worker def test_get_config_folder_name(self): 711*c2e18aaaSAndroid Build Coastguard Worker """Test _get_config_folder_name with conditions.""" 712*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'intellij-ce-2019.3' 713*c2e18aaaSAndroid Build Coastguard Worker pre_folder = '.IdeaIC' 714*c2e18aaaSAndroid Build Coastguard Worker ide_version = '2019.3' 715*c2e18aaaSAndroid Build Coastguard Worker expected = ''.join([pre_folder, ide_version]) 716*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(expected, ide_util.IdeIntelliJ._get_config_folder_name( 717*c2e18aaaSAndroid Build Coastguard Worker config_folder_name)) 718*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'intellij-ue-2019.3' 719*c2e18aaaSAndroid Build Coastguard Worker pre_folder = '.IntelliJIdea' 720*c2e18aaaSAndroid Build Coastguard Worker expected = ''.join([pre_folder, ide_version]) 721*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(expected, ide_util.IdeIntelliJ._get_config_folder_name( 722*c2e18aaaSAndroid Build Coastguard Worker config_folder_name)) 723*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'intellij-ce-2020.1' 724*c2e18aaaSAndroid Build Coastguard Worker pre_folder = 'IdeaIC' 725*c2e18aaaSAndroid Build Coastguard Worker ide_version = '2020.1' 726*c2e18aaaSAndroid Build Coastguard Worker expected = ''.join([pre_folder, ide_version]) 727*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(expected, ide_util.IdeIntelliJ._get_config_folder_name( 728*c2e18aaaSAndroid Build Coastguard Worker config_folder_name)) 729*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'intellij-ue-2020.1' 730*c2e18aaaSAndroid Build Coastguard Worker pre_folder = 'IntelliJIdea' 731*c2e18aaaSAndroid Build Coastguard Worker expected = ''.join([pre_folder, ide_version]) 732*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(expected, ide_util.IdeIntelliJ._get_config_folder_name( 733*c2e18aaaSAndroid Build Coastguard Worker config_folder_name)) 734*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'intellij-ue-2020.1.4' 735*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(expected, ide_util.IdeIntelliJ._get_config_folder_name( 736*c2e18aaaSAndroid Build Coastguard Worker config_folder_name)) 737*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'intellij-unknown' 738*c2e18aaaSAndroid Build Coastguard Worker expected = None 739*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(expected, ide_util.IdeIntelliJ._get_config_folder_name( 740*c2e18aaaSAndroid Build Coastguard Worker config_folder_name)) 741*c2e18aaaSAndroid Build Coastguard Worker config_folder_name = 'intellij-ue-NotAFloat' 742*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(expected, ide_util.IdeIntelliJ._get_config_folder_name( 743*c2e18aaaSAndroid Build Coastguard Worker config_folder_name)) 744*c2e18aaaSAndroid Build Coastguard Worker 745*c2e18aaaSAndroid Build Coastguard Worker 746*c2e18aaaSAndroid Build Coastguard Workerif __name__ == '__main__': 747*c2e18aaaSAndroid Build Coastguard Worker unittest.main() 748