Home | History | Annotate | Download | only in tools
      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 
     19 import os
     20 import shutil
     21 import tempfile
     22 import unittest
     23 
     24 import auto_gen_test_config
     25 
     26 TEST_MODULE = 'TestModule'
     27 
     28 MANIFEST_INVALID = """<?xml version="1.0" encoding="utf-8"?>
     29 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
     30 </manifest>
     31 """
     32 
     33 MANIFEST_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 
     42 MANIFEST_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 
     52 EXPECTED_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 
     80 EXPECTED_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 
    108 TOOLS_DIR = os.path.dirname(os.path.dirname(__file__))
    109 EMPTY_TEST_CONFIG = os.path.join(
    110     TOOLS_DIR, '..', 'core', 'empty_test_config.xml')
    111 INSTRUMENTATION_TEST_CONFIG_TEMPLATE = os.path.join(
    112     TOOLS_DIR, '..', 'core', 'instrumentation_test_config_template.xml')
    113 
    114 
    115 class 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 
    172 if __name__ == '__main__':
    173   unittest.main()
    174