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