#!/usr/bin/env python3 # # Copyright 2020, 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 vscode_native_project_file_gen.""" import os import unittest from unittest import mock from aidegen.lib import common_util from aidegen.vscode import vscode_native_project_file_gen # pylint: disable=protected-access class VSCodeNativeProjectFileGenUnittests(unittest.TestCase): """Unit tests for vscode_native_project_file_gen.py""" @mock.patch.object(os, 'mkdir') @mock.patch.object(os.path, 'isdir') def test_init(self, mock_isdir, mock_mkdir): """Test initializing VSCodeNativeProjectFileGenerator.""" mod_dir = 'a/b/packages/apps/Settings' mock_isdir.return_value = True vscode_native_project_file_gen.VSCodeNativeProjectFileGenerator(mod_dir) self.assertFalse(mock_mkdir.called) mock_mkdir.mock_reset() mock_isdir.return_value = False vscode_native_project_file_gen.VSCodeNativeProjectFileGenerator(mod_dir) self.assertTrue(mock_mkdir.called) @mock.patch.object(os.path, 'isdir') @mock.patch.object(os.path, 'isfile') @mock.patch.object(common_util, 'get_android_root_dir') def test_create_c_cpp_properties_dict(self, mock_get_root, mock_isfile, mock_isdir): """Test _create_c_cpp_properties_dict with conditions.""" mock_get_root.return_value = '/root' mock_isdir.return_value = True includes = ['a/b/includes', 'c/d/includes'] mod_dir = 'a/b/shared/path/to/be/used2/multiarch' ccgen = vscode_native_project_file_gen.VSCodeNativeProjectFileGenerator( mod_dir) cc_mod_info = mock.Mock() cc_mod_info.get_module_includes.return_value = includes mock_isfile.return_value = True # Compiler path exists. data = ccgen._create_c_cpp_properties_dict(cc_mod_info, ['multiarch']) config = data[vscode_native_project_file_gen._CONFIG][0] self.assertCountEqual( ['/root/a/b/includes', '/root/c/d/includes'], config[vscode_native_project_file_gen._INC_PATH]) self.assertEqual( vscode_native_project_file_gen._COMPILER_PATH, config[vscode_native_project_file_gen._COMPILE_PATH]) mock_isfile.return_value = False # Compiler path doesn't exist. data = ccgen._create_c_cpp_properties_dict(cc_mod_info, ['multiarch']) config = data[vscode_native_project_file_gen._CONFIG][0] self.assertCountEqual( ['/root/a/b/includes', '/root/c/d/includes'], config[vscode_native_project_file_gen._INC_PATH]) self.assertEqual('', config[vscode_native_project_file_gen._COMPILE_PATH]) if __name__ == '__main__': unittest.main()