xref: /aosp_15_r20/tools/asuite/aidegen/aidegen_main_unittest.py (revision c2e18aaa1096c836b086f94603d04f4eb9cf37f5)
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