| #!/usr/bin/env python3 |
| # |
| # Copyright 2019 - The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| |
| """Unittests for ide_common_util.""" |
| |
| import os |
| import unittest |
| |
| from unittest import mock |
| |
| from aidegen import aidegen_main |
| from aidegen import constant |
| from aidegen import unittest_constants |
| from aidegen.lib import ide_common_util |
| from aidegen.lib import ide_util |
| from aidegen.lib import project_config |
| |
| |
| # pylint: disable=protected-access |
| class IdeUtilCommonUnittests(unittest.TestCase): |
| """Unit tests for ide_util.py.""" |
| |
| _TEST_PRJ_PATH1 = '' |
| _TEST_PRJ_PATH2 = '' |
| _TEST_PRJ_PATH3 = '' |
| _TEST_PRJ_PATH4 = '' |
| |
| def setUp(self): |
| """Prepare the testdata related path.""" |
| IdeUtilCommonUnittests._TEST_PRJ_PATH1 = os.path.join( |
| unittest_constants.TEST_DATA_PATH, 'android_facet.iml') |
| IdeUtilCommonUnittests._TEST_PRJ_PATH2 = os.path.join( |
| unittest_constants.TEST_DATA_PATH, 'project/test.java') |
| test_path = unittest_constants.TEST_DATA_PATH |
| IdeUtilCommonUnittests._TEST_PRJ_PATH3 = test_path |
| IdeUtilCommonUnittests._TEST_PRJ_PATH4 = os.path.join( |
| unittest_constants.TEST_DATA_PATH, '.idea') |
| |
| def tearDown(self): |
| """Clear the testdata related path.""" |
| IdeUtilCommonUnittests._TEST_PRJ_PATH1 = '' |
| IdeUtilCommonUnittests._TEST_PRJ_PATH2 = '' |
| IdeUtilCommonUnittests._TEST_PRJ_PATH3 = '' |
| IdeUtilCommonUnittests._TEST_PRJ_PATH4 = '' |
| |
| def test_is_intellij_project(self): |
| """Test _is_intellij_project.""" |
| self.assertFalse( |
| ide_common_util.is_intellij_project( |
| IdeUtilCommonUnittests._TEST_PRJ_PATH2)) |
| self.assertTrue( |
| ide_common_util.is_intellij_project( |
| IdeUtilCommonUnittests._TEST_PRJ_PATH1)) |
| self.assertTrue( |
| ide_common_util.is_intellij_project( |
| IdeUtilCommonUnittests._TEST_PRJ_PATH3)) |
| self.assertFalse( |
| ide_common_util.is_intellij_project( |
| IdeUtilCommonUnittests._TEST_PRJ_PATH4)) |
| |
| @mock.patch('glob.glob', return_value=unittest_constants.IDEA_SH_FIND_NONE) |
| def test_get_intellij_sh_none(self, mock_glob): |
| """Test with the cmd return none, test result should be None.""" |
| mock_glob.return_value = unittest_constants.IDEA_SH_FIND_NONE |
| args = aidegen_main._parse_args(['tradefed']) |
| project_config.ProjectConfig(args) |
| self.assertEqual( |
| None, |
| ide_common_util.get_intellij_version_path( |
| ide_util.IdeLinuxIntelliJ()._ls_ce_path)) |
| self.assertEqual( |
| None, |
| ide_common_util.get_intellij_version_path( |
| ide_util.IdeLinuxIntelliJ()._ls_ue_path)) |
| |
| @mock.patch('builtins.input') |
| @mock.patch('glob.glob', return_value=unittest_constants.IDEA_SH_FIND) |
| def test_ask_preference(self, mock_glob, mock_input): |
| """Ask users' preference, the result should be equal to test data.""" |
| mock_glob.return_value = unittest_constants.IDEA_SH_FIND |
| mock_input.return_value = '1' |
| self.assertEqual( |
| ide_common_util.ask_preference(unittest_constants.IDEA_SH_FIND, |
| constant.IDE_INTELLIJ), |
| unittest_constants.IDEA_SH_FIND[0]) |
| mock_input.return_value = '2' |
| self.assertEqual( |
| ide_common_util.ask_preference(unittest_constants.IDEA_SH_FIND, |
| constant.IDE_INTELLIJ), |
| unittest_constants.IDEA_SH_FIND[1]) |
| |
| def test_get_run_ide_cmd(self): |
| """Test get_run_ide_cmd.""" |
| test_script_path = 'a/b/c/d.sh' |
| test_project_path = 'xyz/.idea' |
| test_result = ' '.join([ |
| constant.NOHUP, test_script_path, test_project_path, |
| constant.IGNORE_STD_OUT_ERR_CMD, '&' |
| ]) |
| self.assertEqual(test_result, ide_common_util.get_run_ide_cmd( |
| test_script_path, test_project_path)) |
| folk_new_process = False |
| test_result = ' '.join([ |
| constant.NOHUP, test_script_path, test_project_path, |
| constant.IGNORE_STD_OUT_ERR_CMD, '' |
| ]) |
| self.assertEqual(test_result, ide_common_util.get_run_ide_cmd( |
| test_script_path, test_project_path, folk_new_process)) |
| |
| @mock.patch('builtins.sorted') |
| @mock.patch('glob.glob') |
| def test_get_scripts_from_file_path(self, mock_list, mock_sort): |
| """Test _get_scripts_from_file_path.""" |
| test_file = 'a/b/c/d.e' |
| ide_common_util._get_scripts_from_file_path(test_file, 'd.e') |
| mock_list.return_value = [test_file] |
| self.assertTrue(mock_sort.called) |
| mock_list.return_value = None |
| self.assertEqual(ide_common_util._get_scripts_from_file_path( |
| test_file, 'd.e'), None) |
| |
| @mock.patch('builtins.sorted') |
| @mock.patch('builtins.list') |
| def test_get_scripts_from_dir_path(self, mock_list, mock_sort): |
| """Test get_scripts_from_dir_path.""" |
| test_path = 'a/b/c/d.e' |
| mock_list.return_value = ['a', 'b', 'c'] |
| ide_common_util.get_scripts_from_dir_path(test_path, 'd.e') |
| self.assertTrue(mock_sort.called) |
| mock_list.return_value = [] |
| self.assertEqual(ide_common_util.get_scripts_from_dir_path( |
| test_path, 'd.e'), None) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |