#!/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 module_info.""" import os import unittest from unittest import mock from aidegen.lib import common_util from aidegen.lib import module_info from aidegen.lib import module_info_util # pylint: disable=protected-access class AidegenModuleInfoUnittests(unittest.TestCase): """Unit tests for module_info.py""" def test_is_target_module(self): """Test is_target_module with different conditions.""" self.assertFalse(module_info.AidegenModuleInfo.is_target_module({})) self.assertFalse(module_info.AidegenModuleInfo.is_target_module( {'path': ''})) self.assertFalse(module_info.AidegenModuleInfo.is_target_module( {'class': ''})) self.assertTrue(module_info.AidegenModuleInfo.is_target_module( {'class': ['APPS']})) self.assertTrue( module_info.AidegenModuleInfo.is_target_module( {'class': ['JAVA_LIBRARIES']})) self.assertTrue( module_info.AidegenModuleInfo.is_target_module( {'class': ['ROBOLECTRIC']})) def test_is_project_path_relative_module(self): """Test is_project_path_relative_module handling.""" mod_info = {'class': ['APPS']} self.assertFalse( module_info.AidegenModuleInfo.is_project_path_relative_module( mod_info, '')) mod_info = {'class': ['APPS'], 'path': []} self.assertFalse( module_info.AidegenModuleInfo.is_project_path_relative_module( mod_info, '')) mod_info = {'class': ['APPS'], 'path': ['path_to_a']} self.assertTrue( module_info.AidegenModuleInfo.is_project_path_relative_module( mod_info, '')) self.assertFalse( module_info.AidegenModuleInfo.is_project_path_relative_module( mod_info, 'test')) mod_info = {'path': ['path_to_a']} self.assertFalse( module_info.AidegenModuleInfo.is_project_path_relative_module( mod_info, 'test')) self.assertFalse( module_info.AidegenModuleInfo.is_project_path_relative_module( mod_info, 'path_to_a')) mod_info = {'class': ['APPS'], 'path': ['test/path_to_a']} self.assertTrue( module_info.AidegenModuleInfo.is_project_path_relative_module( mod_info, 'test')) self.assertFalse( module_info.AidegenModuleInfo.is_project_path_relative_module( mod_info, 'tes')) @mock.patch.object(common_util, 'dump_json_dict') @mock.patch('logging.debug') @mock.patch.object(module_info_util, 'generate_merged_module_info') @mock.patch.object(os.path, 'isfile') @mock.patch('os.remove') def test_discover_mod_file_and_target(self, mock_remove, mock_is_file, mock_generate, mock_log, mock_dump): """Test _discover_mod_file_and_target with conditions.""" # Test not force build case. mock_generate.return_value = None force_build = False mock_is_file.return_value = True module_info.AidegenModuleInfo._discover_mod_file_and_target(force_build) self.assertFalse(mock_remove.called) self.assertFalse(mock_log.called) self.assertTrue(mock_generate.called) self.assertTrue(mock_dump.called) # Test force_build case. force_build = True self.assertTrue(mock_is_file.called) mock_is_file.return_value = False module_info.AidegenModuleInfo._discover_mod_file_and_target(force_build) self.assertFalse(mock_remove.called) self.assertTrue(mock_log.called) self.assertTrue(mock_dump.called) mock_is_file.return_value = True module_info.AidegenModuleInfo._discover_mod_file_and_target(force_build) self.assertTrue(mock_remove.called) self.assertTrue(mock_dump.called) @mock.patch.object(module_info.AidegenModuleInfo, '_discover_mod_file_and_target') def test_load_module_info_file(self, mock_discover): """Test _load_module_info_file with conditions.""" json_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'test_data/out/soong/merged_module_info.json') # Test file exist case. module_file = json_path module_info.AidegenModuleInfo._load_module_info_file(self, module_file) self.assertFalse(mock_discover.called) if __name__ == '__main__': unittest.main()