You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
8.0 KiB
209 lines
8.0 KiB
#!/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 IML class."""
|
|
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import unittest
|
|
from unittest import mock
|
|
|
|
from aidegen import templates
|
|
from aidegen.lib import common_util
|
|
from aidegen.idea import iml
|
|
from atest import module_info
|
|
|
|
|
|
# pylint: disable=protected-access
|
|
class IMLGenUnittests(unittest.TestCase):
|
|
"""Unit tests for IMLGenerator class."""
|
|
|
|
_TEST_DIR = None
|
|
|
|
def setUp(self):
|
|
"""Prepare the testdata related path."""
|
|
IMLGenUnittests._TEST_DIR = tempfile.mkdtemp()
|
|
module = {
|
|
'module_name': 'test',
|
|
'iml_name': 'test_iml',
|
|
'path': ['a/b'],
|
|
'srcs': ['a/b/src'],
|
|
'tests': ['a/b/tests'],
|
|
'srcjars': ['x/y.srcjar'],
|
|
'jars': ['s.jar'],
|
|
'dependencies': ['m1']
|
|
}
|
|
with mock.patch.object(common_util, 'get_android_root_dir') as obj:
|
|
obj.return_value = IMLGenUnittests._TEST_DIR
|
|
self.iml = iml.IMLGenerator(module)
|
|
|
|
def tearDown(self):
|
|
"""Clear the testdata related path."""
|
|
self.iml = None
|
|
shutil.rmtree(IMLGenUnittests._TEST_DIR)
|
|
|
|
def test_init(self):
|
|
"""Test initialize the attributes."""
|
|
self.assertEqual(self.iml._mod_info['module_name'], 'test')
|
|
|
|
@mock.patch.object(common_util, 'get_android_root_dir')
|
|
def test_iml_path(self, mock_root_path):
|
|
"""Test iml_path."""
|
|
mock_root_path.return_value = IMLGenUnittests._TEST_DIR
|
|
iml_path = os.path.join(IMLGenUnittests._TEST_DIR, 'a/b/test_iml.iml')
|
|
self.assertEqual(self.iml.iml_path, iml_path)
|
|
|
|
@mock.patch.object(common_util, 'get_android_root_dir')
|
|
def test_create(self, mock_root_path):
|
|
"""Test create."""
|
|
mock_root_path.return_value = IMLGenUnittests._TEST_DIR
|
|
module_path = os.path.join(IMLGenUnittests._TEST_DIR, 'a/b')
|
|
src_path = os.path.join(IMLGenUnittests._TEST_DIR, 'a/b/src')
|
|
test_path = os.path.join(IMLGenUnittests._TEST_DIR, 'a/b/tests')
|
|
srcjar_path = os.path.join(IMLGenUnittests._TEST_DIR, 'x/y.srcjar')
|
|
jar_path = os.path.join(IMLGenUnittests._TEST_DIR, 's.jar')
|
|
expected = """<?xml version="1.0" encoding="UTF-8"?>
|
|
<module type="JAVA_MODULE" version="4">
|
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
<exclude-output />
|
|
<content url="file://{MODULE_PATH}">
|
|
<sourceFolder url="file://{SRC_PATH}" isTestSource="false" />
|
|
<sourceFolder url="file://{TEST_PATH}" isTestSource="true" />
|
|
</content>
|
|
<orderEntry type="sourceFolder" forTests="false" />
|
|
<content url="jar://{SRCJAR}!/">
|
|
<sourceFolder url="jar://{SRCJAR}!/" isTestSource="False" />
|
|
</content>
|
|
<orderEntry type="module" module-name="m1" />
|
|
<orderEntry type="module-library" exported="">
|
|
<library>
|
|
<CLASSES>
|
|
<root url="jar://{JAR}!/" />
|
|
</CLASSES>
|
|
<JAVADOC />
|
|
<SOURCES />
|
|
</library>
|
|
</orderEntry>
|
|
<orderEntry type="inheritedJdk" />
|
|
</component>
|
|
</module>
|
|
""".format(MODULE_PATH=module_path,
|
|
SRC_PATH=src_path,
|
|
TEST_PATH=test_path,
|
|
SRCJAR=srcjar_path,
|
|
JAR=jar_path)
|
|
self.iml.create({'srcs': True, 'srcjars': True, 'dependencies': True,
|
|
'jars': True})
|
|
gen_iml = os.path.join(IMLGenUnittests._TEST_DIR,
|
|
self.iml._mod_info['path'][0],
|
|
self.iml._mod_info['iml_name'] + '.iml')
|
|
result = common_util.read_file_content(gen_iml)
|
|
self.assertEqual(result, expected)
|
|
|
|
@mock.patch.object(common_util, 'get_android_root_dir')
|
|
def test_gen_dep_sources(self, mock_root_path):
|
|
"""Test _generate_dep_srcs."""
|
|
mock_root_path.return_value = IMLGenUnittests._TEST_DIR
|
|
src_path = os.path.join(IMLGenUnittests._TEST_DIR, 'a/b/src')
|
|
test_path = os.path.join(IMLGenUnittests._TEST_DIR, 'a/b/tests')
|
|
expected = """<?xml version="1.0" encoding="UTF-8"?>
|
|
<module type="JAVA_MODULE" version="4">
|
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
<exclude-output />
|
|
<content url="file://{SRC_PATH}">
|
|
<sourceFolder url="file://{SRC_PATH}" isTestSource="false" />
|
|
</content>
|
|
<content url="file://{TEST_PATH}">
|
|
<sourceFolder url="file://{TEST_PATH}" isTestSource="true" />
|
|
</content>
|
|
<orderEntry type="sourceFolder" forTests="false" />
|
|
<orderEntry type="inheritedJdk" />
|
|
</component>
|
|
</module>
|
|
""".format(SRC_PATH=src_path,
|
|
TEST_PATH=test_path)
|
|
self.iml.create({'dep_srcs': True})
|
|
gen_iml = os.path.join(IMLGenUnittests._TEST_DIR,
|
|
self.iml._mod_info['path'][0],
|
|
self.iml._mod_info['iml_name'] + '.iml')
|
|
result = common_util.read_file_content(gen_iml)
|
|
self.assertEqual(result, expected)
|
|
|
|
@mock.patch.object(iml.IMLGenerator, '_create_iml')
|
|
@mock.patch.object(iml.IMLGenerator, '_generate_dependencies')
|
|
@mock.patch.object(iml.IMLGenerator, '_generate_srcjars')
|
|
def test_skip_create_iml(self, mock_gen_srcjars, mock_gen_dep,
|
|
mock_create_iml):
|
|
"""Test skipping create_iml."""
|
|
self.iml.create({'srcjars': False, 'dependencies': False})
|
|
self.assertFalse(mock_gen_srcjars.called)
|
|
self.assertFalse(mock_gen_dep.called)
|
|
self.assertFalse(mock_create_iml.called)
|
|
|
|
@mock.patch('os.path.exists')
|
|
def test_generate_facet(self, mock_exists):
|
|
"""Test _generate_facet."""
|
|
mock_exists.return_value = False
|
|
self.iml._generate_facet()
|
|
self.assertEqual(self.iml._facet, '')
|
|
mock_exists.return_value = True
|
|
self.iml._generate_facet()
|
|
self.assertEqual(self.iml._facet, templates.FACET)
|
|
|
|
def test_get_uniq_iml_name(self):
|
|
"""Test the unique name cache mechanism.
|
|
|
|
By using the path data in module info json as input, if the count of
|
|
name data set is the same as sub folder path count, then it means
|
|
there's no duplicated name, the test PASS.
|
|
"""
|
|
# Add following test path
|
|
test_paths = {
|
|
'cts/tests/tests/app',
|
|
'cts/tests/app',
|
|
'cts/tests/app/app1/../app',
|
|
'cts/tests/app/app2/../app',
|
|
'cts/tests/app/app3/../app',
|
|
'frameworks/base/tests/xxxxxxxxxxxx/base',
|
|
'frameworks/base',
|
|
'external/xxxxx-xxx/robolectric',
|
|
'external/robolectric',
|
|
}
|
|
mod_info = module_info.ModuleInfo()
|
|
test_paths.update(mod_info._get_path_to_module_info(
|
|
mod_info.name_to_module_info).keys())
|
|
print('\n{} {}.'.format('Test_paths length:', len(test_paths)))
|
|
|
|
path_list = []
|
|
for path in test_paths:
|
|
path_list.append(path)
|
|
print('{} {}.'.format('path list with length:', len(path_list)))
|
|
|
|
names = [iml.IMLGenerator.get_unique_iml_name(f)
|
|
for f in path_list]
|
|
print('{} {}.'.format('Names list with length:', len(names)))
|
|
self.assertEqual(len(names), len(path_list))
|
|
dic = {}
|
|
for i, path in enumerate(path_list):
|
|
dic[names[i]] = path
|
|
print('{} {}.'.format('The size of name set is:', len(dic)))
|
|
self.assertEqual(len(dic), len(path_list))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|