| #!/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 = """<?xml version="1.0" encoding="utf-8"?> |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
| </manifest> |
| """ |
| |
| MANIFEST_JUNIT_TEST = """<?xml version="1.0" encoding="utf-8"?> |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
| package="com.android.my.tests.x"> |
| <instrumentation |
| android:name="androidx.test.runner.AndroidJUnitRunner" |
| android:targetPackage="com.android.my.tests" /> |
| </manifest> |
| """ |
| |
| MANIFEST_INSTRUMENTATION_TEST = """<?xml version="1.0" encoding="utf-8"?> |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
| package="com.android.my.tests.x"> |
| <instrumentation |
| android:name="android.test.InstrumentationTestRunner" |
| android:targetPackage="com.android.my.tests" |
| android:label="My Tests" /> |
| </manifest> |
| """ |
| |
| EXPECTED_JUNIT_TEST_CONFIG = """<?xml version="1.0" encoding="utf-8"?> |
| <!-- Copyright (C) 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. |
| --> |
| <!-- This test config file is auto-generated. --> |
| <configuration description="Runs TestModule."> |
| <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller"> |
| <option name="test-file-name" value="TestModule.apk" /> |
| </target_preparer> |
| |
| <test class="com.android.tradefed.testtype.AndroidJUnitTest" > |
| <option name="package" value="com.android.my.tests.x" /> |
| <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> |
| </test> |
| </configuration> |
| """ |
| |
| EXPECTED_INSTRUMENTATION_TEST_CONFIG = """<?xml version="1.0" encoding="utf-8"?> |
| <!-- Copyright (C) 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. |
| --> |
| <!-- This test config file is auto-generated. --> |
| <configuration description="Runs My Tests."> |
| <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller"> |
| <option name="test-file-name" value="TestModule.apk" /> |
| </target_preparer> |
| |
| <test class="com.android.tradefed.testtype.InstrumentationTest" > |
| <option name="package" value="com.android.my.tests.x" /> |
| <option name="runner" value="android.test.InstrumentationTestRunner" /> |
| </test> |
| </configuration> |
| """ |
| |
| TOOLS_DIR = os.path.dirname(os.path.dirname(__file__)) |
| EMPTY_TEST_CONFIG = os.path.join( |
| TOOLS_DIR, '..', 'core', 'empty_test_config.xml') |
| INSTRUMENTATION_TEST_CONFIG_TEMPLATE = os.path.join( |
| TOOLS_DIR, '..', 'core', 'instrumentation_test_config_template.xml') |
| |
| |
| 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') |
| |
| 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, |
| EMPTY_TEST_CONFIG, |
| INSTRUMENTATION_TEST_CONFIG_TEMPLATE] |
| auto_gen_test_config.main(argv) |
| with open(self.config_file) as config_file: |
| with open(EMPTY_TEST_CONFIG) 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, |
| EMPTY_TEST_CONFIG, |
| INSTRUMENTATION_TEST_CONFIG_TEMPLATE] |
| 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, |
| EMPTY_TEST_CONFIG, |
| INSTRUMENTATION_TEST_CONFIG_TEMPLATE] |
| 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() |