#!/usr/bin/env python
#
# Copyright 2017, 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 auto_gen_test_config."""
import os
import shutil
import tempfile
import unittest
import auto_gen_test_config
TEST_MODULE = 'TestModule'
MANIFEST_INVALID = """
"""
XMLTREE_JUNIT_TEST = """N: android=http://schemas.android.com/apk/res/android (line=2)
E: manifest (line=2)
A: package="com.android.my.tests.x" (Raw: "com.android.my.tests.x")
E: instrumentation (line=9)
A: http://schemas.android.com/apk/res/android:label(0x01010001)="TestModule" (Raw: "TestModule")
A: http://schemas.android.com/apk/res/android:name(0x01010003)="androidx.test.runner.AndroidJUnitRunner" (Raw: "androidx.test.runner.AndroidJUnitRunner")
A: http://schemas.android.com/apk/res/android:targetPackage(0x01010021)="com.android.my.tests" (Raw: "com.android.my.tests")
"""
XMLTREE_INSTRUMENTATION_TEST = """N: android=http://schemas.android.com/apk/res/android (line=2)
E: manifest (line=2)
A: package="com.android.my.tests.x" (Raw: "com.android.my.tests.x")
E: instrumentation (line=9)
A: http://schemas.android.com/apk/res/android:label(0x01010001)="TestModule" (Raw: "TestModule")
A: http://schemas.android.com/apk/res/android:name(0x01010003)="android.test.InstrumentationTestRunner" (Raw: "android.test.InstrumentationTestRunner")
A: http://schemas.android.com/apk/res/android:targetPackage(0x01010021)="com.android.my.tests" (Raw: "com.android.my.tests")
"""
MANIFEST_JUNIT_TEST = """
"""
MANIFEST_INSTRUMENTATION_TEST = """
"""
EXPECTED_JUNIT_TEST_CONFIG = """
"""
EXPECTED_INSTRUMENTATION_TEST_CONFIG = """
"""
EMPTY_TEST_CONFIG_CONTENT = """
"""
INSTRUMENTATION_TEST_CONFIG_TEMPLATE_CONTENT = """
{EXTRA_CONFIGS}
"""
class AutoGenTestConfigUnittests(unittest.TestCase):
"""Unittests for auto_gen_test_config."""
def setUp(self):
"""Setup directory for test."""
self.test_dir = tempfile.mkdtemp()
self.config_file = os.path.join(self.test_dir, TEST_MODULE + '.config')
self.manifest_file = os.path.join(self.test_dir, 'AndroidManifest.xml')
self.xmltree_file = os.path.join(self.test_dir, TEST_MODULE + '.xmltree')
self.empty_test_config_file = os.path.join(self.test_dir, 'empty.config')
self.instrumentation_test_config_template_file = os.path.join(
self.test_dir, 'instrumentation.config')
with open(self.empty_test_config_file, 'w') as f:
f.write(EMPTY_TEST_CONFIG_CONTENT)
with open(self.instrumentation_test_config_template_file, 'w') as f:
f.write(INSTRUMENTATION_TEST_CONFIG_TEMPLATE_CONTENT)
def tearDown(self):
"""Cleanup the test directory."""
shutil.rmtree(self.test_dir, ignore_errors=True)
def testInvalidManifest(self):
"""An empty test config should be generated if AndroidManifest is invalid.
"""
with open(self.manifest_file, 'w') as f:
f.write(MANIFEST_INVALID)
argv = [self.config_file,
self.manifest_file,
self.empty_test_config_file,
self.instrumentation_test_config_template_file]
auto_gen_test_config.main(argv)
with open(self.config_file) as config_file:
with open(self.empty_test_config_file) as empty_config:
self.assertEqual(config_file.read(), empty_config.read())
def testCreateJUnitTestConfig(self):
"""Test creating test config for AndroidJUnitTest.
"""
with open(self.manifest_file, 'w') as f:
f.write(MANIFEST_JUNIT_TEST)
argv = [self.config_file,
self.manifest_file,
self.empty_test_config_file,
self.instrumentation_test_config_template_file]
auto_gen_test_config.main(argv)
with open(self.config_file) as config_file:
self.assertEqual(config_file.read(), EXPECTED_JUNIT_TEST_CONFIG)
def testCreateInstrumentationTestConfig(self):
"""Test creating test config for InstrumentationTest.
"""
with open(self.manifest_file, 'w') as f:
f.write(MANIFEST_INSTRUMENTATION_TEST)
argv = [self.config_file,
self.manifest_file,
self.empty_test_config_file,
self.instrumentation_test_config_template_file]
auto_gen_test_config.main(argv)
with open(self.config_file) as config_file:
self.assertEqual(
config_file.read(), EXPECTED_INSTRUMENTATION_TEST_CONFIG)
def testCreateJUnitTestConfigWithXMLTree(self):
"""Test creating test config for AndroidJUnitTest.
"""
with open(self.xmltree_file, 'w') as f:
f.write(XMLTREE_JUNIT_TEST)
argv = [self.config_file,
self.xmltree_file,
self.empty_test_config_file,
self.instrumentation_test_config_template_file]
auto_gen_test_config.main(argv)
with open(self.config_file) as config_file:
self.assertEqual(config_file.read(), EXPECTED_JUNIT_TEST_CONFIG)
def testCreateInstrumentationTestConfigWithXMLTree(self):
"""Test creating test config for InstrumentationTest.
"""
with open(self.xmltree_file, 'w') as f:
f.write(XMLTREE_INSTRUMENTATION_TEST)
argv = [self.config_file,
self.xmltree_file,
self.empty_test_config_file,
self.instrumentation_test_config_template_file]
auto_gen_test_config.main(argv)
with open(self.config_file) as config_file:
self.assertEqual(
config_file.read(), EXPECTED_INSTRUMENTATION_TEST_CONFIG)
if __name__ == '__main__':
unittest.main()