blob: 51a8583f2e43b184f6910239d9063c600b67665e [file] [log] [blame]
Dan Shiefb892d2017-12-06 15:57:31 -08001#!/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"?>
Dan Shi9a501682017-12-22 13:32:48 -080034<manifest xmlns:android="http://schemas.android.com/apk/res/android"
35 package="com.android.my.tests.x">
Dan Shiefb892d2017-12-06 15:57:31 -080036 <instrumentation
Brett Chabot49183d32018-12-13 19:06:34 -080037 android:name="androidx.test.runner.AndroidJUnitRunner"
Dan Shiefb892d2017-12-06 15:57:31 -080038 android:targetPackage="com.android.my.tests" />
39</manifest>
40"""
41
42MANIFEST_INSTRUMENTATION_TEST = """<?xml version="1.0" encoding="utf-8"?>
Dan Shi9a501682017-12-22 13:32:48 -080043<manifest xmlns:android="http://schemas.android.com/apk/res/android"
44 package="com.android.my.tests.x">
Dan Shiefb892d2017-12-06 15:57:31 -080045 <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" >
Dan Shi9a501682017-12-22 13:32:48 -080074 <option name="package" value="com.android.my.tests.x" />
Brett Chabot49183d32018-12-13 19:06:34 -080075 <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
Dan Shiefb892d2017-12-06 15:57:31 -080076 </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" >
Dan Shi9a501682017-12-22 13:32:48 -0800102 <option name="package" value="com.android.my.tests.x" />
Dan Shiefb892d2017-12-06 15:57:31 -0800103 <option name="runner" value="android.test.InstrumentationTestRunner" />
104 </test>
105</configuration>
106"""
107
Dan Shi9a501682017-12-22 13:32:48 -0800108TOOLS_DIR = os.path.dirname(os.path.dirname(__file__))
109EMPTY_TEST_CONFIG = os.path.join(
110 TOOLS_DIR, '..', 'core', 'empty_test_config.xml')
Dan Shiefb892d2017-12-06 15:57:31 -0800111INSTRUMENTATION_TEST_CONFIG_TEMPLATE = os.path.join(
Dan Shi9a501682017-12-22 13:32:48 -0800112 TOOLS_DIR, '..', 'core', 'instrumentation_test_config_template.xml')
Dan Shiefb892d2017-12-06 15:57:31 -0800113
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):
Dan Shi96068b72018-02-21 11:31:06 -0800158 """Test creating test config for InstrumentationTest.
Dan Shiefb892d2017-12-06 15:57:31 -0800159 """
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()