xref: /aosp_15_r20/tools/asuite/aidegen/lib/project_config_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 project_config."""
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 unittest
23*c2e18aaaSAndroid Build Coastguard Workerfrom unittest import mock
24*c2e18aaaSAndroid Build Coastguard Worker
25*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen import aidegen_main
26*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen import constant
27*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import errors
28*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen import unittest_constants
29*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import project_config
30*c2e18aaaSAndroid Build Coastguard Workerfrom aidegen.lib import common_util
31*c2e18aaaSAndroid Build Coastguard Worker
32*c2e18aaaSAndroid Build Coastguard Worker
33*c2e18aaaSAndroid Build Coastguard Worker# pylint: disable=protected-access
34*c2e18aaaSAndroid Build Coastguard Workerclass AidegenProjectConfigUnittests(unittest.TestCase):
35*c2e18aaaSAndroid Build Coastguard Worker    """Unit tests for project_config.py"""
36*c2e18aaaSAndroid Build Coastguard Worker
37*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch.object(os, 'getcwd')
38*c2e18aaaSAndroid Build Coastguard Worker    def test_is_whole_android_tree(self, mock_getcwd):
39*c2e18aaaSAndroid Build Coastguard Worker        """Test _is_whole_android_tree with different conditions."""
40*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(project_config.is_whole_android_tree(['a'], True))
41*c2e18aaaSAndroid Build Coastguard Worker        mock_getcwd.return_value = common_util.get_android_root_dir()
42*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(project_config.is_whole_android_tree([''], False))
43*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(project_config.is_whole_android_tree(['a'], False))
44*c2e18aaaSAndroid Build Coastguard Worker
45*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch.object(common_util, 'is_android_root')
46*c2e18aaaSAndroid Build Coastguard Worker    def test_check_whole_android_tree(self, mock_is_android_root):
47*c2e18aaaSAndroid Build Coastguard Worker        """Test _check_whole_android_tree with different conditions."""
48*c2e18aaaSAndroid Build Coastguard Worker        mock_is_android_root.return_value = True
49*c2e18aaaSAndroid Build Coastguard Worker        expected = [constant.WHOLE_ANDROID_TREE_TARGET]
50*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(
51*c2e18aaaSAndroid Build Coastguard Worker            expected, project_config._check_whole_android_tree([''], True))
52*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(
53*c2e18aaaSAndroid Build Coastguard Worker            expected, project_config._check_whole_android_tree([''], False))
54*c2e18aaaSAndroid Build Coastguard Worker        expected = constant.WHOLE_ANDROID_TREE_TARGET
55*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(
56*c2e18aaaSAndroid Build Coastguard Worker            expected, project_config._check_whole_android_tree(['a'], True)[0])
57*c2e18aaaSAndroid Build Coastguard Worker        expected = ['a']
58*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(
59*c2e18aaaSAndroid Build Coastguard Worker            expected, project_config._check_whole_android_tree(['a'], False))
60*c2e18aaaSAndroid Build Coastguard Worker
61*c2e18aaaSAndroid Build Coastguard Worker    def test_init_with_no_launch_ide(self):
62*c2e18aaaSAndroid Build Coastguard Worker        """Test __init__ method without launching IDE."""
63*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['a', '-n', '-s'])
64*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
65*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.ide_name, constant.IDE_UNDEFINED)
66*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config.is_launch_ide)
67*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.depth, 0)
68*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config.full_repo)
69*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(config.is_skip_build)
70*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.targets, ['a'])
71*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config.verbose)
72*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.ide_installed_path, None)
73*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config.config_reset)
74*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.exclude_paths, None)
75*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
76*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.ide_name, constant.IDE_UNDEFINED)
77*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config_obj.is_launch_ide)
78*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.depth, 0)
79*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config_obj.full_repo)
80*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(config_obj.is_skip_build)
81*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.targets, ['a'])
82*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config_obj.verbose)
83*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.ide_installed_path, None)
84*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config_obj.config_reset)
85*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.exclude_paths, None)
86*c2e18aaaSAndroid Build Coastguard Worker
87*c2e18aaaSAndroid Build Coastguard Worker    def test_init_with_diff_arguments(self):
88*c2e18aaaSAndroid Build Coastguard Worker        """Test __init__ method with different arguments."""
89*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args([])
90*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
91*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.ide_name, constant.IDE_UNDEFINED)
92*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.targets, [''])
93*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
94*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.targets, [''])
95*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.ide_name, constant.IDE_UNDEFINED)
96*c2e18aaaSAndroid Build Coastguard Worker        target = 'tradefed'
97*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args([target])
98*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
99*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.targets, [target])
100*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
101*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.targets, [target])
102*c2e18aaaSAndroid Build Coastguard Worker        depth = '2'
103*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-d', depth])
104*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
105*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.depth, int(depth))
106*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
107*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.depth, int(depth))
108*c2e18aaaSAndroid Build Coastguard Worker
109*c2e18aaaSAndroid Build Coastguard Worker    def test_init_with_other_arguments(self):
110*c2e18aaaSAndroid Build Coastguard Worker        """Test __init__ method with other arguments."""
111*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-v'])
112*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
113*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(config.verbose)
114*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
115*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(config_obj.verbose)
116*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-i', 's'])
117*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
118*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.ide_name, constant.IDE_ANDROID_STUDIO)
119*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
120*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.ide_name, constant.IDE_ANDROID_STUDIO)
121*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-i', 'e'])
122*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
123*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config.ide_name, constant.IDE_ECLIPSE)
124*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
125*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(config_obj.ide_name, constant.IDE_ECLIPSE)
126*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-p', unittest_constants.TEST_MODULE])
127*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
128*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(
129*c2e18aaaSAndroid Build Coastguard Worker            config.ide_installed_path, unittest_constants.TEST_MODULE)
130*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
131*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(
132*c2e18aaaSAndroid Build Coastguard Worker            config_obj.ide_installed_path, unittest_constants.TEST_MODULE)
133*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-n'])
134*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
135*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config.is_launch_ide)
136*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
137*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(config_obj.is_launch_ide)
138*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-r'])
139*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
140*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(config.config_reset)
141*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
142*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(config_obj.config_reset)
143*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-s'])
144*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
145*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(config.is_skip_build)
146*c2e18aaaSAndroid Build Coastguard Worker        config_obj = project_config.ProjectConfig.get_instance()
147*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(config_obj.is_skip_build)
148*c2e18aaaSAndroid Build Coastguard Worker
149*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch.object(common_util, 'get_related_paths')
150*c2e18aaaSAndroid Build Coastguard Worker    def test_transform_exclusive_paths(self, mock_get_rel):
151*c2e18aaaSAndroid Build Coastguard Worker        """Test _transform_exclusive_paths with conditions."""
152*c2e18aaaSAndroid Build Coastguard Worker        result = project_config._transform_exclusive_paths(mock.Mock(), [])
153*c2e18aaaSAndroid Build Coastguard Worker        self.assertFalse(mock_get_rel.called)
154*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual(None, result)
155*c2e18aaaSAndroid Build Coastguard Worker        rel_path = 'to/path'
156*c2e18aaaSAndroid Build Coastguard Worker        abs_path = 'a/b/to/path'
157*c2e18aaaSAndroid Build Coastguard Worker        mock_get_rel.reset_mock()
158*c2e18aaaSAndroid Build Coastguard Worker        mock_get_rel.return_value = rel_path, abs_path
159*c2e18aaaSAndroid Build Coastguard Worker        result = project_config._transform_exclusive_paths(
160*c2e18aaaSAndroid Build Coastguard Worker            mock.Mock(), [abs_path])
161*c2e18aaaSAndroid Build Coastguard Worker        self.assertEqual([rel_path], result)
162*c2e18aaaSAndroid Build Coastguard Worker
163*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch.object(project_config, '_check_whole_android_tree')
164*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch.object(project_config, '_transform_exclusive_paths')
165*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch.object(common_util, 'get_atest_module_info')
166*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch.object(project_config.ProjectConfig, '_show_skip_build_msg')
167*c2e18aaaSAndroid Build Coastguard Worker    def test_init_environment(self, mock_show_skip, mock_get_atest, mock_trans,
168*c2e18aaaSAndroid Build Coastguard Worker                              mock_check_whole):
169*c2e18aaaSAndroid Build Coastguard Worker        """Test init_environment method."""
170*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-v'])
171*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
172*c2e18aaaSAndroid Build Coastguard Worker        config.init_environment()
173*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(mock_show_skip.called)
174*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(mock_get_atest.called)
175*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(mock_trans.called)
176*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(mock_check_whole.called)
177*c2e18aaaSAndroid Build Coastguard Worker        mock_get_atest.mock_reset()
178*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-i', 'c'])
179*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
180*c2e18aaaSAndroid Build Coastguard Worker        config.init_environment()
181*c2e18aaaSAndroid Build Coastguard Worker        mock_get_atest.assert_called_with(None)
182*c2e18aaaSAndroid Build Coastguard Worker
183*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch('builtins.print')
184*c2e18aaaSAndroid Build Coastguard Worker    def test_show_skip_build_msg_with_skip(self, mock_print):
185*c2e18aaaSAndroid Build Coastguard Worker        """Test _show_skip_build_msg method with skip build."""
186*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(['-s'])
187*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
188*c2e18aaaSAndroid Build Coastguard Worker        config._show_skip_build_msg()
189*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(mock_print.called_with(
190*c2e18aaaSAndroid Build Coastguard Worker            '\n{} {}\n'.format(common_util.COLORED_INFO('Warning:'),
191*c2e18aaaSAndroid Build Coastguard Worker                               project_config._SKIP_BUILD_WARN)))
192*c2e18aaaSAndroid Build Coastguard Worker
193*c2e18aaaSAndroid Build Coastguard Worker    @mock.patch('builtins.print')
194*c2e18aaaSAndroid Build Coastguard Worker    def test_show_skip_build_msg_without_skip(self, mock_print):
195*c2e18aaaSAndroid Build Coastguard Worker        """Test _show_skip_build_msg method without skip build."""
196*c2e18aaaSAndroid Build Coastguard Worker        targets = ['Settings']
197*c2e18aaaSAndroid Build Coastguard Worker        args = aidegen_main._parse_args(targets)
198*c2e18aaaSAndroid Build Coastguard Worker        config = project_config.ProjectConfig(args)
199*c2e18aaaSAndroid Build Coastguard Worker        config._show_skip_build_msg()
200*c2e18aaaSAndroid Build Coastguard Worker        msg = project_config.SKIP_BUILD_INFO.format(common_util.COLORED_INFO(
201*c2e18aaaSAndroid Build Coastguard Worker            project_config._SKIP_BUILD_CMD.format(' '.join(config.targets))))
202*c2e18aaaSAndroid Build Coastguard Worker        self.assertTrue(mock_print.called_with(
203*c2e18aaaSAndroid Build Coastguard Worker            '\n{} {}\n'.format(common_util.COLORED_INFO('INFO:'), msg)))
204*c2e18aaaSAndroid Build Coastguard Worker
205*c2e18aaaSAndroid Build Coastguard Worker    def test_get_instance_without_instance(self):
206*c2e18aaaSAndroid Build Coastguard Worker        """Test get_instance method without initialize an instance."""
207*c2e18aaaSAndroid Build Coastguard Worker        project_config.ProjectConfig._instance = None
208*c2e18aaaSAndroid Build Coastguard Worker        with self.assertRaises(errors.InstanceNotExistError):
209*c2e18aaaSAndroid Build Coastguard Worker            project_config.ProjectConfig.get_instance()
210*c2e18aaaSAndroid Build Coastguard Worker
211*c2e18aaaSAndroid Build Coastguard Worker
212*c2e18aaaSAndroid Build Coastguard Workerif __name__ == '__main__':
213*c2e18aaaSAndroid Build Coastguard Worker    unittest.main()
214