#!/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()