1*c2e18aaaSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*c2e18aaaSAndroid Build Coastguard Worker# 3*c2e18aaaSAndroid Build Coastguard Worker# Copyright 2019, 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 aidegen_main.""" 18*c2e18aaaSAndroid Build Coastguard Worker 19*c2e18aaaSAndroid Build Coastguard Workerfrom __future__ import print_function 20*c2e18aaaSAndroid Build Coastguard Worker 21*c2e18aaaSAndroid Build Coastguard Workerimport os 22*c2e18aaaSAndroid Build Coastguard Workerimport sys 23*c2e18aaaSAndroid Build Coastguard Workerimport unittest 24*c2e18aaaSAndroid Build Coastguard Workerfrom unittest import mock 25*c2e18aaaSAndroid Build Coastguard Worker 26*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen import aidegen_main 27*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen import constant 28*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen import unittest_constants 29*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import aidegen_metrics 30*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import common_util 31*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import eclipse_project_file_gen 32*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import errors 33*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import ide_util 34*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import module_info 35*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import native_util 36*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import native_module_info 37*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import native_project_info 38*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import project_config 39*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import project_file_gen 40*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import project_info 41*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.vscode import vscode_workspace_file_gen 42*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.vscode import vscode_native_project_file_gen 43*c2e18aaaSAndroid Build Coastguard Worker 44*c2e18aaaSAndroid Build Coastguard Worker 45*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable=protected-access 46*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable=too-many-arguments 47*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable=too-many-statements 48*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable=too-many-locals 49*c2e18aaaSAndroid Build Coastguard Workerclass AidegenMainUnittests(unittest.TestCase): 50*c2e18aaaSAndroid Build Coastguard Worker """Unit tests for aidegen_main.py""" 51*c2e18aaaSAndroid Build Coastguard Worker 52*c2e18aaaSAndroid Build Coastguard Worker def _init_project_config(self, args): 53*c2e18aaaSAndroid Build Coastguard Worker """Initialize project configurations.""" 54*c2e18aaaSAndroid Build Coastguard Worker self.assertIsNotNone(args) 55*c2e18aaaSAndroid Build Coastguard Worker config = project_config.ProjectConfig(args) 56*c2e18aaaSAndroid Build Coastguard Worker config.init_environment() 57*c2e18aaaSAndroid Build Coastguard Worker 58*c2e18aaaSAndroid Build Coastguard Worker def test_parse_args(self): 59*c2e18aaaSAndroid Build Coastguard Worker """Test _parse_args with different conditions.""" 60*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args([]) 61*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.targets, ['']) 62*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.ide[0], 'u') 63*c2e18aaaSAndroid Build Coastguard Worker target = 'tradefed' 64*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args([target]) 65*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.targets, [target]) 66*c2e18aaaSAndroid Build Coastguard Worker depth = '2' 67*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-d', depth]) 68*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.depth, int(depth)) 69*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-v']) 70*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(args.verbose) 71*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-v']) 72*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(args.verbose) 73*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-i', 's']) 74*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.ide[0], 's') 75*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-i', 'e']) 76*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.ide[0], 'e') 77*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-p', unittest_constants.TEST_MODULE]) 78*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.ide_installed_path, 79*c2e18aaaSAndroid Build Coastguard Worker unittest_constants.TEST_MODULE) 80*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-n']) 81*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(args.no_launch) 82*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-r']) 83*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(args.config_reset) 84*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-s']) 85*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(args.skip_build) 86*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.exclude_paths, None) 87*c2e18aaaSAndroid Build Coastguard Worker excludes = 'path/to/a', 'path/to/b' 88*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['-e', excludes]) 89*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(args.exclude_paths, [excludes]) 90*c2e18aaaSAndroid Build Coastguard Worker 91*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_config.ProjectConfig, 'init_environment') 92*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_config, 'ProjectConfig') 93*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_file_gen.ProjectFileGenerator, 94*c2e18aaaSAndroid Build Coastguard Worker 'generate_ide_project_files') 95*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(eclipse_project_file_gen.EclipseConf, 96*c2e18aaaSAndroid Build Coastguard Worker 'generate_ide_project_files') 97*c2e18aaaSAndroid Build Coastguard Worker def test_generate_project_files(self, mock_eclipse, mock_ide, mock_config, 98*c2e18aaaSAndroid Build Coastguard Worker mock_init): 99*c2e18aaaSAndroid Build Coastguard Worker """Test _generate_project_files with different conditions.""" 100*c2e18aaaSAndroid Build Coastguard Worker projects = ['module_a', 'module_v'] 101*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args([projects, '-i', 'e']) 102*c2e18aaaSAndroid Build Coastguard Worker mock_init.return_value = None 103*c2e18aaaSAndroid Build Coastguard Worker self._init_project_config(args) 104*c2e18aaaSAndroid Build Coastguard Worker mock_config.ide_name = constant.IDE_ECLIPSE 105*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._generate_project_files(projects) 106*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_eclipse.called_with(projects)) 107*c2e18aaaSAndroid Build Coastguard Worker mock_config.ide_name = constant.IDE_ANDROID_STUDIO 108*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._generate_project_files(projects) 109*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_ide.called_with(projects)) 110*c2e18aaaSAndroid Build Coastguard Worker mock_config.ide_name = constant.IDE_INTELLIJ 111*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._generate_project_files(projects) 112*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_ide.called_with(projects)) 113*c2e18aaaSAndroid Build Coastguard Worker 114*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, 'main_with_message') 115*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, 'main_without_message') 116*c2e18aaaSAndroid Build Coastguard Worker def test_main(self, mock_without, mock_with): 117*c2e18aaaSAndroid Build Coastguard Worker """Test main with conditions.""" 118*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.main(['-s']) 119*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(mock_without.call_count, 1) 120*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.main(['']) 121*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual(mock_with.call_count, 1) 122*c2e18aaaSAndroid Build Coastguard Worker 123*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_metrics, 'starts_asuite_metrics') 124*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_config, 'is_whole_android_tree') 125*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_metrics, 'ends_asuite_metrics') 126*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, 'main_with_message') 127*c2e18aaaSAndroid Build Coastguard Worker def test_main_with_normal(self, mock_main, mock_ends_metrics, 128*c2e18aaaSAndroid Build Coastguard Worker mock_is_whole_tree, mock_starts_metrics): 129*c2e18aaaSAndroid Build Coastguard Worker """Test main with normal conditions.""" 130*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.main(['-h']) 131*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_main.called) 132*c2e18aaaSAndroid Build Coastguard Worker mock_is_whole_tree.return_value = True 133*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.main(['']) 134*c2e18aaaSAndroid Build Coastguard Worker mock_starts_metrics.assert_called_with([constant.ANDROID_TREE]) 135*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_ends_metrics.called) 136*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.main(['-n']) 137*c2e18aaaSAndroid Build Coastguard Worker mock_ends_metrics.assert_called_with(constant.EXIT_CODE_NORMAL) 138*c2e18aaaSAndroid Build Coastguard Worker 139*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_metrics, 'ends_asuite_metrics') 140*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, 'main_with_message') 141*c2e18aaaSAndroid Build Coastguard Worker def test_main_with_build_fail_errors(self, mock_main, mock_ends_metrics): 142*c2e18aaaSAndroid Build Coastguard Worker """Test main with raising build failure error conditions.""" 143*c2e18aaaSAndroid Build Coastguard Worker mock_main.side_effect = errors.BuildFailureError 144*c2e18aaaSAndroid Build Coastguard Worker with self.assertRaises(errors.BuildFailureError): 145*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.main(['']) 146*c2e18aaaSAndroid Build Coastguard Worker _, exc_value, exc_traceback = sys.exc_info() 147*c2e18aaaSAndroid Build Coastguard Worker msg = str(exc_value) 148*c2e18aaaSAndroid Build Coastguard Worker mock_ends_metrics.assert_called_with( 149*c2e18aaaSAndroid Build Coastguard Worker constant.EXIT_CODE_AIDEGEN_EXCEPTION, exc_traceback, msg) 150*c2e18aaaSAndroid Build Coastguard Worker 151*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_metrics, 'ends_asuite_metrics') 152*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, 'main_with_message') 153*c2e18aaaSAndroid Build Coastguard Worker def test_main_with_io_errors(self, mock_main, mock_ends_metrics): 154*c2e18aaaSAndroid Build Coastguard Worker """Test main with raising IO error conditions.""" 155*c2e18aaaSAndroid Build Coastguard Worker mock_main.side_effect = IOError 156*c2e18aaaSAndroid Build Coastguard Worker with self.assertRaises(IOError): 157*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.main(['']) 158*c2e18aaaSAndroid Build Coastguard Worker _, exc_value, exc_traceback = sys.exc_info() 159*c2e18aaaSAndroid Build Coastguard Worker msg = str(exc_value) 160*c2e18aaaSAndroid Build Coastguard Worker mock_ends_metrics.assert_called_with(constant.EXIT_CODE_EXCEPTION, 161*c2e18aaaSAndroid Build Coastguard Worker exc_traceback, msg) 162*c2e18aaaSAndroid Build Coastguard Worker 163*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide') 164*c2e18aaaSAndroid Build Coastguard Worker def test_main_with_wrong_ide_path(self, mock_launch_ide): 165*c2e18aaaSAndroid Build Coastguard Worker """Test main function with wrong ide path.""" 166*c2e18aaaSAndroid Build Coastguard Worker target = 'libui' 167*c2e18aaaSAndroid Build Coastguard Worker args = [target, '-p', '/opt/abc/bin/idea.sh'] 168*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.main(args) 169*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_launch_ide.called) 170*c2e18aaaSAndroid Build Coastguard Worker 171*c2e18aaaSAndroid Build Coastguard Worker def test_get_targets_from_args(self): 172*c2e18aaaSAndroid Build Coastguard Worker """Test get targets from different arguments.""" 173*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 174*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._get_targets_from_args([''], True), []) 175*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 176*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._get_targets_from_args(['.'], False), ['.']) 177*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 178*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._get_targets_from_args([''], False), ['.']) 179*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 180*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._get_targets_from_args(['.'], True), []) 181*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 182*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._get_targets_from_args(['test'], False), ['test']) 183*c2e18aaaSAndroid Build Coastguard Worker 184*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide') 185*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util, 'get_ide_util_instance') 186*c2e18aaaSAndroid Build Coastguard Worker def test_launch_native_projects_without_ide_object( 187*c2e18aaaSAndroid Build Coastguard Worker self, mock_get_ide, mock_launch_ide): 188*c2e18aaaSAndroid Build Coastguard Worker """Test _launch_native_projects function without ide object.""" 189*c2e18aaaSAndroid Build Coastguard Worker target = 'libui' 190*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args([target, '-i', 'e']) 191*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_native_projects(None, args, []) 192*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_get_ide.called) 193*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_launch_ide.called) 194*c2e18aaaSAndroid Build Coastguard Worker 195*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide') 196*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util, 'get_ide_util_instance') 197*c2e18aaaSAndroid Build Coastguard Worker def test_launch_native_projects_with_ide_object( 198*c2e18aaaSAndroid Build Coastguard Worker self, mock_get_ide, mock_launch_ide): 199*c2e18aaaSAndroid Build Coastguard Worker """Test _launch_native_projects function without ide object.""" 200*c2e18aaaSAndroid Build Coastguard Worker target = 'libui' 201*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args([target, '-i', 'e']) 202*c2e18aaaSAndroid Build Coastguard Worker ide_util_obj = 'some_obj' 203*c2e18aaaSAndroid Build Coastguard Worker mock_get_ide.return_value = None 204*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_native_projects(ide_util_obj, args, []) 205*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_ide.called_with('c')) 206*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_launch_ide.called) 207*c2e18aaaSAndroid Build Coastguard Worker mock_get_ide.reset_mock() 208*c2e18aaaSAndroid Build Coastguard Worker mock_launch_ide.reset_mock() 209*c2e18aaaSAndroid Build Coastguard Worker args.ide = ['j'] 210*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_native_projects(ide_util_obj, args, []) 211*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_ide.called_with('c')) 212*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_launch_ide.called) 213*c2e18aaaSAndroid Build Coastguard Worker mock_get_ide.reset_mock() 214*c2e18aaaSAndroid Build Coastguard Worker mock_launch_ide.reset_mock() 215*c2e18aaaSAndroid Build Coastguard Worker mock_get_ide.return_value = 'some_native_obj' 216*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_native_projects(ide_util_obj, args, []) 217*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_ide.called_with('c')) 218*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_launch_ide.called) 219*c2e18aaaSAndroid Build Coastguard Worker mock_get_ide.reset_mock() 220*c2e18aaaSAndroid Build Coastguard Worker mock_launch_ide.reset_mock() 221*c2e18aaaSAndroid Build Coastguard Worker args.ide = ['e'] 222*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_native_projects(ide_util_obj, args, []) 223*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_ide.called_with('c')) 224*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_launch_ide.called) 225*c2e18aaaSAndroid Build Coastguard Worker mock_get_ide.reset_mock() 226*c2e18aaaSAndroid Build Coastguard Worker mock_launch_ide.reset_mock() 227*c2e18aaaSAndroid Build Coastguard Worker args.ide = ['s'] 228*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_native_projects(ide_util_obj, args, []) 229*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_get_ide.called) 230*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_launch_ide.called) 231*c2e18aaaSAndroid Build Coastguard Worker 232*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('builtins.print') 233*c2e18aaaSAndroid Build Coastguard Worker def test_launch_ide(self, mock_print): 234*c2e18aaaSAndroid Build Coastguard Worker """Test _launch_ide function with config parameter.""" 235*c2e18aaaSAndroid Build Coastguard Worker mock_ide_util = mock.MagicMock() 236*c2e18aaaSAndroid Build Coastguard Worker mock_ide_util.launch_ide.return_value = None 237*c2e18aaaSAndroid Build Coastguard Worker mock_ide_util.config_ide.return_value = None 238*c2e18aaaSAndroid Build Coastguard Worker launch_path = '/test/launch/ide/method' 239*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide(mock_ide_util, launch_path) 240*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_ide_util.config_ide.called) 241*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_ide_util.launch_ide.called) 242*c2e18aaaSAndroid Build Coastguard Worker mock_print.return_value = None 243*c2e18aaaSAndroid Build Coastguard Worker 244*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_config.ProjectConfig, 'init_environment') 245*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('builtins.print') 246*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_vscode') 247*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_native_projects') 248*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(native_util, 'generate_clion_projects') 249*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(native_project_info.NativeProjectInfo, 250*c2e18aaaSAndroid Build Coastguard Worker 'generate_projects') 251*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_create_and_launch_java_projects') 252*c2e18aaaSAndroid Build Coastguard Worker def test_launch_ide_by_module_contents(self, mock_j, mock_c_prj, mock_genc, 253*c2e18aaaSAndroid Build Coastguard Worker mock_c, mock_vs, mock_print, 254*c2e18aaaSAndroid Build Coastguard Worker mock_init): 255*c2e18aaaSAndroid Build Coastguard Worker """Test _launch_ide_by_module_contents with different conditions.""" 256*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['', '-i', 's']) 257*c2e18aaaSAndroid Build Coastguard Worker mock_init.return_value = None 258*c2e18aaaSAndroid Build Coastguard Worker self._init_project_config(args) 259*c2e18aaaSAndroid Build Coastguard Worker ide_obj = 'ide_obj' 260*c2e18aaaSAndroid Build Coastguard Worker test_all = False 261*c2e18aaaSAndroid Build Coastguard Worker lang = constant.C_CPP 262*c2e18aaaSAndroid Build Coastguard Worker java_targets = {constant.JAVA: ['a', 'b', 'c'], 263*c2e18aaaSAndroid Build Coastguard Worker constant.C_CPP: None, constant.RUST: None} 264*c2e18aaaSAndroid Build Coastguard Worker 265*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 266*c2e18aaaSAndroid Build Coastguard Worker java_targets, test_all) 267*c2e18aaaSAndroid Build Coastguard Worker 268*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 269*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_print.called) 270*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_j.called) 271*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c_prj.called) 272*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_genc.called) 273*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c.called) 274*c2e18aaaSAndroid Build Coastguard Worker 275*c2e18aaaSAndroid Build Coastguard Worker lang = constant.JAVA 276*c2e18aaaSAndroid Build Coastguard Worker none_targets = {constant.JAVA: None, 277*c2e18aaaSAndroid Build Coastguard Worker constant.C_CPP: None, 278*c2e18aaaSAndroid Build Coastguard Worker constant.RUST: None} 279*c2e18aaaSAndroid Build Coastguard Worker 280*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 281*c2e18aaaSAndroid Build Coastguard Worker none_targets) 282*c2e18aaaSAndroid Build Coastguard Worker 283*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 284*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_print.called) 285*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_j.called) 286*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c_prj.called) 287*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_genc.called) 288*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c.called) 289*c2e18aaaSAndroid Build Coastguard Worker 290*c2e18aaaSAndroid Build Coastguard Worker c_targets = {constant.JAVA: None, 291*c2e18aaaSAndroid Build Coastguard Worker constant.C_CPP: ['1', '2', '3'], 292*c2e18aaaSAndroid Build Coastguard Worker constant.RUST: None} 293*c2e18aaaSAndroid Build Coastguard Worker 294*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 295*c2e18aaaSAndroid Build Coastguard Worker c_targets, False) 296*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 297*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_print.called) 298*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_j.called) 299*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c_prj.called) 300*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_genc.called) 301*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c.called) 302*c2e18aaaSAndroid Build Coastguard Worker 303*c2e18aaaSAndroid Build Coastguard Worker test_all = True 304*c2e18aaaSAndroid Build Coastguard Worker 305*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 306*c2e18aaaSAndroid Build Coastguard Worker none_targets, test_all) 307*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_vs.called) 308*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_j.called) 309*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_genc.called) 310*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c.called) 311*c2e18aaaSAndroid Build Coastguard Worker mock_vs.reset_mock() 312*c2e18aaaSAndroid Build Coastguard Worker 313*c2e18aaaSAndroid Build Coastguard Worker lang_targets = {constant.JAVA: ['a', 'b', 'c'], 314*c2e18aaaSAndroid Build Coastguard Worker constant.C_CPP: ['1', '2', '3'], 315*c2e18aaaSAndroid Build Coastguard Worker constant.RUST: None} 316*c2e18aaaSAndroid Build Coastguard Worker 317*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 318*c2e18aaaSAndroid Build Coastguard Worker lang_targets) 319*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 320*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_j.called) 321*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_genc.called) 322*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c.called) 323*c2e18aaaSAndroid Build Coastguard Worker 324*c2e18aaaSAndroid Build Coastguard Worker mock_vs.reset_mock() 325*c2e18aaaSAndroid Build Coastguard Worker mock_c.reset_mock() 326*c2e18aaaSAndroid Build Coastguard Worker mock_genc.reset_mock() 327*c2e18aaaSAndroid Build Coastguard Worker mock_j.reset_mock() 328*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['', '-l', 'c']) 329*c2e18aaaSAndroid Build Coastguard Worker mock_init.return_value = None 330*c2e18aaaSAndroid Build Coastguard Worker self._init_project_config(args) 331*c2e18aaaSAndroid Build Coastguard Worker lang = constant.C_CPP 332*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 333*c2e18aaaSAndroid Build Coastguard Worker lang_targets) 334*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_c_prj.called) 335*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 336*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_genc.called) 337*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_c.called) 338*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_j.called) 339*c2e18aaaSAndroid Build Coastguard Worker 340*c2e18aaaSAndroid Build Coastguard Worker mock_vs.reset_mock() 341*c2e18aaaSAndroid Build Coastguard Worker mock_c.reset_mock() 342*c2e18aaaSAndroid Build Coastguard Worker mock_genc.reset_mock() 343*c2e18aaaSAndroid Build Coastguard Worker mock_j.reset_mock() 344*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 345*c2e18aaaSAndroid Build Coastguard Worker c_targets) 346*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 347*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_genc.called) 348*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_c.called) 349*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_j.called) 350*c2e18aaaSAndroid Build Coastguard Worker 351*c2e18aaaSAndroid Build Coastguard Worker mock_vs.reset_mock() 352*c2e18aaaSAndroid Build Coastguard Worker mock_c.reset_mock() 353*c2e18aaaSAndroid Build Coastguard Worker mock_genc.reset_mock() 354*c2e18aaaSAndroid Build Coastguard Worker mock_j.reset_mock() 355*c2e18aaaSAndroid Build Coastguard Worker lang = constant.JAVA 356*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 357*c2e18aaaSAndroid Build Coastguard Worker java_targets) 358*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 359*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_j.called) 360*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c.called) 361*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_genc.called) 362*c2e18aaaSAndroid Build Coastguard Worker 363*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['frameworks/base', '-i', 'c']) 364*c2e18aaaSAndroid Build Coastguard Worker mock_vs.reset_mock() 365*c2e18aaaSAndroid Build Coastguard Worker mock_c.reset_mock() 366*c2e18aaaSAndroid Build Coastguard Worker mock_genc.reset_mock() 367*c2e18aaaSAndroid Build Coastguard Worker mock_c_prj.reset_mock() 368*c2e18aaaSAndroid Build Coastguard Worker mock_j.reset_mock() 369*c2e18aaaSAndroid Build Coastguard Worker lang = constant.C_CPP 370*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, ide_obj, lang, 371*c2e18aaaSAndroid Build Coastguard Worker lang_targets) 372*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 373*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_j.called) 374*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_c.called) 375*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_c_prj.called) 376*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_genc.called) 377*c2e18aaaSAndroid Build Coastguard Worker 378*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args(['frameworks/base']) 379*c2e18aaaSAndroid Build Coastguard Worker mock_vs.reset_mock() 380*c2e18aaaSAndroid Build Coastguard Worker mock_c.reset_mock() 381*c2e18aaaSAndroid Build Coastguard Worker mock_genc.reset_mock() 382*c2e18aaaSAndroid Build Coastguard Worker mock_c_prj.reset_mock() 383*c2e18aaaSAndroid Build Coastguard Worker mock_j.reset_mock() 384*c2e18aaaSAndroid Build Coastguard Worker os.environ[constant.AIDEGEN_TEST_MODE] = 'true' 385*c2e18aaaSAndroid Build Coastguard Worker lang = constant.JAVA 386*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_ide_by_module_contents(args, None, lang, 387*c2e18aaaSAndroid Build Coastguard Worker lang_targets) 388*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_vs.called) 389*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_j.called) 390*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c.called) 391*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_c_prj.called) 392*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_genc.called) 393*c2e18aaaSAndroid Build Coastguard Worker del os.environ[constant.AIDEGEN_TEST_MODE] 394*c2e18aaaSAndroid Build Coastguard Worker 395*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide') 396*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_generate_project_files') 397*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_info.ProjectInfo, 'multi_projects_locate_source') 398*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_info.ProjectInfo, 'generate_projects') 399*c2e18aaaSAndroid Build Coastguard Worker def test_create_and_launch_java_projects(self, mock_prj, mock_compile, 400*c2e18aaaSAndroid Build Coastguard Worker mock_gen_file, mock_launch): 401*c2e18aaaSAndroid Build Coastguard Worker """Test _create_and_launch_java_projects.""" 402*c2e18aaaSAndroid Build Coastguard Worker ide_obj = 'test_ide' 403*c2e18aaaSAndroid Build Coastguard Worker target = ['a', 'b'] 404*c2e18aaaSAndroid Build Coastguard Worker mock_prj_list = mock.MagicMock() 405*c2e18aaaSAndroid Build Coastguard Worker mock_prj_list.project_absolute_path = 'test_path' 406*c2e18aaaSAndroid Build Coastguard Worker prj = [mock_prj_list] 407*c2e18aaaSAndroid Build Coastguard Worker mock_prj.return_value = prj 408*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._create_and_launch_java_projects(ide_obj, target) 409*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_prj.called_with(target)) 410*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_compile.called_with(prj)) 411*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_file.called_with(prj)) 412*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_launch.called_with(ide_obj)) 413*c2e18aaaSAndroid Build Coastguard Worker mock_launch.reset_mock() 414*c2e18aaaSAndroid Build Coastguard Worker 415*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._create_and_launch_java_projects(None, target) 416*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_launch.called) 417*c2e18aaaSAndroid Build Coastguard Worker 418*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide') 419*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(vscode_workspace_file_gen, 420*c2e18aaaSAndroid Build Coastguard Worker 'generate_code_workspace_file') 421*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'get_related_paths') 422*c2e18aaaSAndroid Build Coastguard Worker def test_launch_vscode_without_ide_object( 423*c2e18aaaSAndroid Build Coastguard Worker self, mock_get_rel, mock_gen_code, mock_launch_ide): 424*c2e18aaaSAndroid Build Coastguard Worker """Test _launch_vscode function without ide object.""" 425*c2e18aaaSAndroid Build Coastguard Worker mock_get_rel.return_value = 'rel', 'abs' 426*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_vscode(None, mock.Mock(), ['Settings'], [], []) 427*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_rel.called) 428*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_code.called) 429*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_launch_ide.called) 430*c2e18aaaSAndroid Build Coastguard Worker 431*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide') 432*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(vscode_workspace_file_gen, 433*c2e18aaaSAndroid Build Coastguard Worker 'generate_code_workspace_file') 434*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'get_related_paths') 435*c2e18aaaSAndroid Build Coastguard Worker def test_launch_vscode_with_ide_object( 436*c2e18aaaSAndroid Build Coastguard Worker self, mock_get_rel, mock_gen_code, mock_get_ide): 437*c2e18aaaSAndroid Build Coastguard Worker """Test _launch_vscode function with ide object.""" 438*c2e18aaaSAndroid Build Coastguard Worker mock_get_rel.return_value = 'rel', 'abs' 439*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_vscode( 440*c2e18aaaSAndroid Build Coastguard Worker mock.Mock(), mock.Mock(), ['Settings'], [], []) 441*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_rel.called) 442*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_code.called) 443*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_ide.called) 444*c2e18aaaSAndroid Build Coastguard Worker 445*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_vscode') 446*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide') 447*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(vscode_workspace_file_gen, 448*c2e18aaaSAndroid Build Coastguard Worker 'generate_code_workspace_file') 449*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'get_related_paths') 450*c2e18aaaSAndroid Build Coastguard Worker def test_launch_vscode_with_both_languages( 451*c2e18aaaSAndroid Build Coastguard Worker self, mock_get_rel, mock_gen_code, mock_get_ide, mock_vscode): 452*c2e18aaaSAndroid Build Coastguard Worker """Test _launch_vscode function without ide object.""" 453*c2e18aaaSAndroid Build Coastguard Worker mock_get_rel.return_value = 'rel', 'abs' 454*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_vscode(None, mock.Mock(), ['Settings'], [], True) 455*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_get_rel.called) 456*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_gen_code.called) 457*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_get_ide.called) 458*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_vscode.called) 459*c2e18aaaSAndroid Build Coastguard Worker 460*c2e18aaaSAndroid Build Coastguard Worker @mock.patch('builtins.print') 461*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide') 462*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(vscode_workspace_file_gen, 463*c2e18aaaSAndroid Build Coastguard Worker 'generate_code_workspace_file') 464*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'get_android_root_dir') 465*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_get_rust_project_paths') 466*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_get_cc_project_paths') 467*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_get_java_project_paths') 468*c2e18aaaSAndroid Build Coastguard Worker def test_launch_vscode_with_logic(self, mock_get_java, mock_get_cc, 469*c2e18aaaSAndroid Build Coastguard Worker mock_get_rust, mock_get_root, mock_gen, 470*c2e18aaaSAndroid Build Coastguard Worker mock_launch, mock_print): 471*c2e18aaaSAndroid Build Coastguard Worker """Test _launch_vscode with the logic tests.""" 472*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_vscode(None, mock.Mock(), [], [], []) 473*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_get_java.called) 474*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_get_cc.called) 475*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_get_rust.called) 476*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_get_root.called) 477*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_gen.called) 478*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_launch.called) 479*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_print.called) 480*c2e18aaaSAndroid Build Coastguard Worker 481*c2e18aaaSAndroid Build Coastguard Worker mock_get_java.mock_reset() 482*c2e18aaaSAndroid Build Coastguard Worker mock_get_cc.mock_reset() 483*c2e18aaaSAndroid Build Coastguard Worker mock_get_rust.mock_reset() 484*c2e18aaaSAndroid Build Coastguard Worker mock_get_root.mock_reset() 485*c2e18aaaSAndroid Build Coastguard Worker mock_gen.mock_reset() 486*c2e18aaaSAndroid Build Coastguard Worker mock_launch.mock_reset() 487*c2e18aaaSAndroid Build Coastguard Worker mock_print.mock_reset() 488*c2e18aaaSAndroid Build Coastguard Worker 489*c2e18aaaSAndroid Build Coastguard Worker aidegen_main._launch_vscode( 490*c2e18aaaSAndroid Build Coastguard Worker mock.Mock(), mock.Mock(), ['Java'], ['CC'], ['Rust']) 491*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_java.called) 492*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_cc.called) 493*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_rust.called) 494*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_root.called) 495*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen.called) 496*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_launch.called) 497*c2e18aaaSAndroid Build Coastguard Worker 498*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'get_related_paths') 499*c2e18aaaSAndroid Build Coastguard Worker def test_get_java_project_paths(self, mock_get_related): 500*c2e18aaaSAndroid Build Coastguard Worker """Test _get_java_project_paths with conditions.""" 501*c2e18aaaSAndroid Build Coastguard Worker abs_path = 'a/b/c/d' 502*c2e18aaaSAndroid Build Coastguard Worker rel_path = 'c/d' 503*c2e18aaaSAndroid Build Coastguard Worker mock_get_related.return_value = rel_path, abs_path 504*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 505*c2e18aaaSAndroid Build Coastguard Worker [abs_path], aidegen_main._get_java_project_paths( 506*c2e18aaaSAndroid Build Coastguard Worker ['Java'], mock.Mock())) 507*c2e18aaaSAndroid Build Coastguard Worker mock_get_related.return_value = None, None 508*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 509*c2e18aaaSAndroid Build Coastguard Worker [], aidegen_main._get_java_project_paths(['Java'], mock.Mock())) 510*c2e18aaaSAndroid Build Coastguard Worker 511*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object( 512*c2e18aaaSAndroid Build Coastguard Worker vscode_native_project_file_gen.VSCodeNativeProjectFileGenerator, 513*c2e18aaaSAndroid Build Coastguard Worker 'generate_c_cpp_properties_json_file') 514*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object( 515*c2e18aaaSAndroid Build Coastguard Worker vscode_native_project_file_gen, 'VSCodeNativeProjectFileGenerator') 516*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(common_util, 'get_related_paths') 517*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object( 518*c2e18aaaSAndroid Build Coastguard Worker native_project_info.NativeProjectInfo, 'generate_projects') 519*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(native_module_info, 'NativeModuleInfo') 520*c2e18aaaSAndroid Build Coastguard Worker def test_get_cc_project_paths(self, mock_mod_info, mock_gen, mock_get_rel, 521*c2e18aaaSAndroid Build Coastguard Worker mock_gen_vs, mock_gen_vs_file): 522*c2e18aaaSAndroid Build Coastguard Worker """Test _get_cc_project_paths with conditions.""" 523*c2e18aaaSAndroid Build Coastguard Worker mock_get_rel.return_value = None, None 524*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual([], aidegen_main._get_cc_project_paths(['Java'])) 525*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_mod_info.called) 526*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen.called) 527*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_rel.called) 528*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_gen_vs.called) 529*c2e18aaaSAndroid Build Coastguard Worker self.assertFalse(mock_gen_vs_file.called) 530*c2e18aaaSAndroid Build Coastguard Worker 531*c2e18aaaSAndroid Build Coastguard Worker mock_mod_info.mock_reset() 532*c2e18aaaSAndroid Build Coastguard Worker mock_gen.mock_reset() 533*c2e18aaaSAndroid Build Coastguard Worker mock_get_rel.mock_reset() 534*c2e18aaaSAndroid Build Coastguard Worker mock_gen_vs.mock_reset() 535*c2e18aaaSAndroid Build Coastguard Worker mock_gen_vs_file.mock_reset() 536*c2e18aaaSAndroid Build Coastguard Worker 537*c2e18aaaSAndroid Build Coastguard Worker abs_path = 'a/b/c/d' 538*c2e18aaaSAndroid Build Coastguard Worker rel_path = 'c/d' 539*c2e18aaaSAndroid Build Coastguard Worker mock_get_rel.return_value = rel_path, abs_path 540*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual([abs_path], aidegen_main._get_cc_project_paths(['CC'])) 541*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_mod_info.called) 542*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen.called) 543*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_rel.called) 544*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_gen_vs.called) 545*c2e18aaaSAndroid Build Coastguard Worker 546*c2e18aaaSAndroid Build Coastguard Worker def test_get_rust_project_paths(self): 547*c2e18aaaSAndroid Build Coastguard Worker """Test _get_rust_project_paths with conditions.""" 548*c2e18aaaSAndroid Build Coastguard Worker abs_path = 'a/b/c/d' 549*c2e18aaaSAndroid Build Coastguard Worker rel_path = 'c/d' 550*c2e18aaaSAndroid Build Coastguard Worker root = 'a/b' 551*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 552*c2e18aaaSAndroid Build Coastguard Worker [abs_path], aidegen_main._get_rust_project_paths([abs_path], root)) 553*c2e18aaaSAndroid Build Coastguard Worker self.assertEqual( 554*c2e18aaaSAndroid Build Coastguard Worker [abs_path], aidegen_main._get_rust_project_paths([rel_path], root)) 555*c2e18aaaSAndroid Build Coastguard Worker 556*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(aidegen_main, '_launch_ide_by_module_contents') 557*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(native_util, 'get_java_cc_and_rust_projects') 558*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(native_module_info, 'NativeModuleInfo') 559*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(module_info, 'AidegenModuleInfo') 560*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(ide_util, 'get_ide_util_instance') 561*c2e18aaaSAndroid Build Coastguard Worker @mock.patch.object(project_config, 'ProjectConfig') 562*c2e18aaaSAndroid Build Coastguard Worker def test_aidegen_main(self, mock_config, mock_get_ide, mock_mod_info, 563*c2e18aaaSAndroid Build Coastguard Worker mock_native, mock_get_project, mock_launch_ide): 564*c2e18aaaSAndroid Build Coastguard Worker """Test aidegen_main function with conditions.""" 565*c2e18aaaSAndroid Build Coastguard Worker target = 'Settings' 566*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args([target, '-i', 'v']) 567*c2e18aaaSAndroid Build Coastguard Worker config = mock.Mock() 568*c2e18aaaSAndroid Build Coastguard Worker config.targets = [target] 569*c2e18aaaSAndroid Build Coastguard Worker config.ide_name = constant.IDE_VSCODE 570*c2e18aaaSAndroid Build Coastguard Worker mock_config.return_value = config 571*c2e18aaaSAndroid Build Coastguard Worker ide = mock.Mock() 572*c2e18aaaSAndroid Build Coastguard Worker mock_get_ide.return_value = ide 573*c2e18aaaSAndroid Build Coastguard Worker mock_get_project.return_value = config.targets, [], [] 574*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.aidegen_main(args) 575*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_config.called) 576*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_ide.called) 577*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_mod_info.called) 578*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_native.called) 579*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_project.called) 580*c2e18aaaSAndroid Build Coastguard Worker mock_launch_ide.assert_called_with( 581*c2e18aaaSAndroid Build Coastguard Worker args, ide, constant.JAVA, 582*c2e18aaaSAndroid Build Coastguard Worker {constant.JAVA: [target], constant.C_CPP: [], constant.RUST: []}, 583*c2e18aaaSAndroid Build Coastguard Worker True) 584*c2e18aaaSAndroid Build Coastguard Worker 585*c2e18aaaSAndroid Build Coastguard Worker mock_config.mock_reset() 586*c2e18aaaSAndroid Build Coastguard Worker mock_get_ide.mock_reset() 587*c2e18aaaSAndroid Build Coastguard Worker mock_mod_info.mock_reset() 588*c2e18aaaSAndroid Build Coastguard Worker mock_native.mock_reset() 589*c2e18aaaSAndroid Build Coastguard Worker mock_get_project.mock_reset() 590*c2e18aaaSAndroid Build Coastguard Worker mock_launch_ide.mock_reset() 591*c2e18aaaSAndroid Build Coastguard Worker 592*c2e18aaaSAndroid Build Coastguard Worker args = aidegen_main._parse_args([target]) 593*c2e18aaaSAndroid Build Coastguard Worker config.ide_name = constant.IDE_INTELLIJ 594*c2e18aaaSAndroid Build Coastguard Worker aidegen_main.aidegen_main(args) 595*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_config.called) 596*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_ide.called) 597*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_mod_info.called) 598*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_native.called) 599*c2e18aaaSAndroid Build Coastguard Worker self.assertTrue(mock_get_project.called) 600*c2e18aaaSAndroid Build Coastguard Worker mock_launch_ide.assert_called_with( 601*c2e18aaaSAndroid Build Coastguard Worker args, ide, constant.JAVA, 602*c2e18aaaSAndroid Build Coastguard Worker {constant.JAVA: [target], constant.C_CPP: [], constant.RUST: []}, 603*c2e18aaaSAndroid Build Coastguard Worker False) 604*c2e18aaaSAndroid Build Coastguard Worker 605*c2e18aaaSAndroid Build Coastguard Worker 606*c2e18aaaSAndroid Build Coastguard Workerif __name__ == '__main__': 607*c2e18aaaSAndroid Build Coastguard Worker unittest.main() 608