#!/usr/bin/env python3 # # Copyright 2018, 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 source_locator.""" import os import unittest from unittest import mock from aidegen import constant from aidegen.lib import project_info from aidegen.lib.project_info import ProjectInfo import aidegen.unittest_constants as uc _MODULE_INFO = { 'm1': {'class': ['JAVA_LIBRARIES'], 'dependencies': ['m2', 'm6'], 'path': ['m1']}, 'm2': {'class': ['JAVA_LIBRARIES'], 'dependencies': ['m3', 'm4']}, 'm3': {'class': ['JAVA_LIBRARIES'], 'dependencies': []}, 'm4': {'class': ['JAVA_LIBRARIES'], 'dependencies': ['m6']}, 'm5': {'class': ['JAVA_LIBRARIES'], 'dependencies': []}, 'm6': {'class': ['JAVA_LIBRARIES'], 'dependencies': ['m2']}, } _EXPECT_DEPENDENT_MODULES = { 'm1': {'class': ['JAVA_LIBRARIES'], 'dependencies': ['m2', 'm6'], 'path': ['m1'], 'depth': 0}, 'm2': {'class': ['JAVA_LIBRARIES'], 'dependencies': ['m3', 'm4'], 'depth': 1}, 'm3': {'class': ['JAVA_LIBRARIES'], 'dependencies': [], 'depth': 2}, 'm4': {'class': ['JAVA_LIBRARIES'], 'dependencies': ['m6'], 'depth': 2}, 'm6': {'class': ['JAVA_LIBRARIES'], 'dependencies': ['m2'], 'depth': 1}, } # pylint: disable=protected-access # pylint: disable=invalid-name class ProjectInfoUnittests(unittest.TestCase): """Unit tests for project_info.py""" def setUp(self): """Initialize arguments for ProjectInfo.""" self.args = mock.MagicMock() self.args.module_name = 'm1' self.args.project_path = '' @mock.patch('atest.module_info.ModuleInfo') def test_get_dep_modules(self, mock_module_info): """Test get_dep_modules recursively find dependent modules.""" mock_module_info.is_module.return_value = True mock_module_info.get_paths.return_value = ['m1'] mock_module_info.get_module_names.return_value = ['m1'] proj_info = project_info.ProjectInfo(mock_module_info, self.args.module_name) proj_info.modules_info = _MODULE_INFO proj_info.dep_modules = proj_info.get_dep_modules() self.assertEqual(proj_info.dep_modules, _EXPECT_DEPENDENT_MODULES) def test_is_a_target_module(self): """Test _is_a_target_module with different conditions.""" self.assertEqual(ProjectInfo._is_a_target_module({}), False) self.assertEqual(ProjectInfo._is_a_target_module({'path': ''}), False) self.assertEqual(ProjectInfo._is_a_target_module({'class': ''}), False) self.assertEqual( ProjectInfo._is_a_target_module({ 'class': ['APPS'] }), True) self.assertEqual( ProjectInfo._is_a_target_module({ 'class': ['JAVA_LIBRARIES'] }), True) self.assertEqual( ProjectInfo._is_a_target_module({ 'class': ['ROBOLECTRIC'] }), True) def test_is_a_robolectric_module(self): """Test _is_a_robolectric_module with different conditions.""" self.assertEqual(ProjectInfo._is_a_robolectric_module({}), False) self.assertEqual( ProjectInfo._is_a_robolectric_module({ 'path': [uc.TEST_PATH] }), False) self.assertEqual( ProjectInfo._is_a_robolectric_module({ 'path': ['path/robotests'] }), True) self.assertEqual( ProjectInfo._is_a_robolectric_module({ 'path': ['path/robolectric'] }), True) self.assertEqual( ProjectInfo._is_a_robolectric_module({ 'path': ['robotests/robolectric'] }), True) def test_get_target_name(self): """Test _get_target_name with different conditions.""" constant.ANDROID_ROOT_PATH = uc.TEST_DATA_PATH self.assertEqual( ProjectInfo._get_target_name(uc.TEST_MODULE, uc.TEST_DATA_PATH), os.path.basename(uc.TEST_DATA_PATH)) self.assertEqual( ProjectInfo._get_target_name(uc.TEST_MODULE, uc.TEST_PATH), uc.TEST_MODULE) if __name__ == '__main__': unittest.main()