1#!/usr/bin/env python 2# 3# Copyright 2017, The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17"""Unittests for auto_gen_test_config.""" 18 19import os 20import shutil 21import tempfile 22import unittest 23 24import auto_gen_test_config 25 26TEST_MODULE = 'TestModule' 27 28MANIFEST_INVALID = """<?xml version="1.0" encoding="utf-8"?> 29<manifest xmlns:android="http://schemas.android.com/apk/res/android"> 30</manifest> 31""" 32 33MANIFEST_JUNIT_TEST = """<?xml version="1.0" encoding="utf-8"?> 34<manifest xmlns:android="http://schemas.android.com/apk/res/android" 35 package="com.android.my.tests.x"> 36 <instrumentation 37 android:name="androidx.test.runner.AndroidJUnitRunner" 38 android:targetPackage="com.android.my.tests" /> 39</manifest> 40""" 41 42MANIFEST_INSTRUMENTATION_TEST = """<?xml version="1.0" encoding="utf-8"?> 43<manifest xmlns:android="http://schemas.android.com/apk/res/android" 44 package="com.android.my.tests.x"> 45 <instrumentation 46 android:name="android.test.InstrumentationTestRunner" 47 android:targetPackage="com.android.my.tests" 48 android:label="My Tests" /> 49</manifest> 50""" 51 52EXPECTED_JUNIT_TEST_CONFIG = """<?xml version="1.0" encoding="utf-8"?> 53<!-- Copyright (C) 2017 The Android Open Source Project 54 55 Licensed under the Apache License, Version 2.0 (the "License"); 56 you may not use this file except in compliance with the License. 57 You may obtain a copy of the License at 58 59 http://www.apache.org/licenses/LICENSE-2.0 60 61 Unless required by applicable law or agreed to in writing, software 62 distributed under the License is distributed on an "AS IS" BASIS, 63 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 64 See the License for the specific language governing permissions and 65 limitations under the License. 66--> 67<!-- This test config file is auto-generated. --> 68<configuration description="Runs TestModule."> 69 <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller"> 70 <option name="test-file-name" value="TestModule.apk" /> 71 </target_preparer> 72 73 <test class="com.android.tradefed.testtype.AndroidJUnitTest" > 74 <option name="package" value="com.android.my.tests.x" /> 75 <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> 76 </test> 77</configuration> 78""" 79 80EXPECTED_INSTRUMENTATION_TEST_CONFIG = """<?xml version="1.0" encoding="utf-8"?> 81<!-- Copyright (C) 2017 The Android Open Source Project 82 83 Licensed under the Apache License, Version 2.0 (the "License"); 84 you may not use this file except in compliance with the License. 85 You may obtain a copy of the License at 86 87 http://www.apache.org/licenses/LICENSE-2.0 88 89 Unless required by applicable law or agreed to in writing, software 90 distributed under the License is distributed on an "AS IS" BASIS, 91 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 92 See the License for the specific language governing permissions and 93 limitations under the License. 94--> 95<!-- This test config file is auto-generated. --> 96<configuration description="Runs My Tests."> 97 <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller"> 98 <option name="test-file-name" value="TestModule.apk" /> 99 </target_preparer> 100 101 <test class="com.android.tradefed.testtype.InstrumentationTest" > 102 <option name="package" value="com.android.my.tests.x" /> 103 <option name="runner" value="android.test.InstrumentationTestRunner" /> 104 </test> 105</configuration> 106""" 107 108TOOLS_DIR = os.path.dirname(os.path.dirname(__file__)) 109EMPTY_TEST_CONFIG = os.path.join( 110 TOOLS_DIR, '..', 'core', 'empty_test_config.xml') 111INSTRUMENTATION_TEST_CONFIG_TEMPLATE = os.path.join( 112 TOOLS_DIR, '..', 'core', 'instrumentation_test_config_template.xml') 113 114 115class AutoGenTestConfigUnittests(unittest.TestCase): 116 """Unittests for auto_gen_test_config.""" 117 118 def setUp(self): 119 """Setup directory for test.""" 120 self.test_dir = tempfile.mkdtemp() 121 self.config_file = os.path.join(self.test_dir, TEST_MODULE + '.config') 122 self.manifest_file = os.path.join(self.test_dir, 'AndroidManifest.xml') 123 124 def tearDown(self): 125 """Cleanup the test directory.""" 126 shutil.rmtree(self.test_dir, ignore_errors=True) 127 128 def testInvalidManifest(self): 129 """An empty test config should be generated if AndroidManifest is invalid. 130 """ 131 with open(self.manifest_file, 'w') as f: 132 f.write(MANIFEST_INVALID) 133 134 argv = [self.config_file, 135 self.manifest_file, 136 EMPTY_TEST_CONFIG, 137 INSTRUMENTATION_TEST_CONFIG_TEMPLATE] 138 auto_gen_test_config.main(argv) 139 with open(self.config_file) as config_file: 140 with open(EMPTY_TEST_CONFIG) as empty_config: 141 self.assertEqual(config_file.read(), empty_config.read()) 142 143 def testCreateJUnitTestConfig(self): 144 """Test creating test config for AndroidJUnitTest. 145 """ 146 with open(self.manifest_file, 'w') as f: 147 f.write(MANIFEST_JUNIT_TEST) 148 149 argv = [self.config_file, 150 self.manifest_file, 151 EMPTY_TEST_CONFIG, 152 INSTRUMENTATION_TEST_CONFIG_TEMPLATE] 153 auto_gen_test_config.main(argv) 154 with open(self.config_file) as config_file: 155 self.assertEqual(config_file.read(), EXPECTED_JUNIT_TEST_CONFIG) 156 157 def testCreateInstrumentationTestConfig(self): 158 """Test creating test config for InstrumentationTest. 159 """ 160 with open(self.manifest_file, 'w') as f: 161 f.write(MANIFEST_INSTRUMENTATION_TEST) 162 163 argv = [self.config_file, 164 self.manifest_file, 165 EMPTY_TEST_CONFIG, 166 INSTRUMENTATION_TEST_CONFIG_TEMPLATE] 167 auto_gen_test_config.main(argv) 168 with open(self.config_file) as config_file: 169 self.assertEqual( 170 config_file.read(), EXPECTED_INSTRUMENTATION_TEST_CONFIG) 171 172if __name__ == '__main__': 173 unittest.main() 174