1#!/usr/bin/env python 2# 3# Copyright (C) 2018 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"""Unit tests for Hidden API list generation.""" 17import unittest 18from generate_hiddenapi_lists import * # pylint: disable=wildcard-import,unused-wildcard-import 19 20 21class TestHiddenapiListGeneration(unittest.TestCase): 22 def test_filter_apis(self): 23 # Initialize flags so that A and B are put on the allow list and 24 # C, D, E are left unassigned. Try filtering for the unassigned ones. 25 flags = FlagsDict() 26 flags.parse_and_merge_csv( 27 ['A,' + FLAG_SDK, 'B,' + FLAG_SDK, 'C', 'D', 'E'] 28 ) 29 filter_set = flags.filter_apis(lambda api, flags: not flags) 30 self.assertTrue(isinstance(filter_set, set)) 31 self.assertEqual(filter_set, set(['C', 'D', 'E'])) 32 33 def test_get_valid_subset_of_unassigned_keys(self): 34 # Create flags where only A is unassigned. 35 flags = FlagsDict() 36 flags.parse_and_merge_csv(['A,' + FLAG_SDK, 'B', 'C']) 37 flags.assign_flag(FLAG_UNSUPPORTED, set(['C'])) 38 self.assertEqual( 39 flags.generate_csv(), 40 ['A,' + FLAG_SDK, 'B', 'C,' + FLAG_UNSUPPORTED], 41 ) 42 43 # Check three things: 44 # (1) B is selected as valid unassigned 45 # (2) A is not selected because it is assigned to the allow list 46 # (3) D is not selected because it is not a valid key 47 self.assertEqual( 48 flags.get_valid_subset_of_unassigned_apis(set(['A', 'B', 'D'])), 49 set(['B']), 50 ) 51 52 def test_parse_and_merge_csv(self): 53 flags = FlagsDict() 54 55 # Test empty CSV entry. 56 self.assertEqual(flags.generate_csv(), []) 57 58 # Test new additions. 59 flags.parse_and_merge_csv( 60 [ 61 'A,' + FLAG_UNSUPPORTED, 62 'B,' + FLAG_BLOCKED + ',' + FLAG_MAX_TARGET_O, 63 'C,' + FLAG_SDK + ',' + FLAG_SYSTEM_API, 64 'D,' + FLAG_UNSUPPORTED + ',' + FLAG_TEST_API, 65 'E,' + FLAG_BLOCKED + ',' + FLAG_TEST_API, 66 ] 67 ) 68 self.assertEqual( 69 flags.generate_csv(), 70 [ 71 'A,' + FLAG_UNSUPPORTED, 72 'B,' + FLAG_BLOCKED + "," + FLAG_MAX_TARGET_O, 73 'C,' + FLAG_SDK + ',' + FLAG_SYSTEM_API, 74 'D,' + FLAG_TEST_API + ',' + FLAG_UNSUPPORTED, 75 'E,' + FLAG_BLOCKED + ',' + FLAG_TEST_API, 76 ], 77 ) 78 79 # Test unknown flag. 80 with self.assertRaises(AssertionError): 81 flags.parse_and_merge_csv(['Z,foo']) 82 83 def test_assign_flag(self): 84 flags = FlagsDict() 85 flags.parse_and_merge_csv(['A,' + FLAG_SDK, 'B']) 86 87 # Test new additions. 88 flags.assign_flag(FLAG_UNSUPPORTED, set(['A', 'B'])) 89 self.assertEqual( 90 flags.generate_csv(), 91 ['A,' + FLAG_SDK + "," + FLAG_UNSUPPORTED, 'B,' + FLAG_UNSUPPORTED], 92 ) 93 94 # Test invalid API signature. 95 with self.assertRaises(AssertionError): 96 flags.assign_flag(FLAG_SDK, set(['C'])) 97 98 # Test invalid flag. 99 with self.assertRaises(AssertionError): 100 flags.assign_flag('foo', set(['A'])) 101 102 def test_extract_package(self): 103 signature = 'Lcom/foo/bar/Baz;->method1()Lcom/bar/Baz;' 104 expected_package = 'com.foo.bar' 105 self.assertEqual(extract_package(signature), expected_package) 106 107 signature = 'Lcom/foo1/bar/MyClass;->method2()V' 108 expected_package = 'com.foo1.bar' 109 self.assertEqual(extract_package(signature), expected_package) 110 111 signature = 'Lcom/foo_bar/baz/MyClass;->method3()V' 112 expected_package = 'com.foo_bar.baz' 113 self.assertEqual(extract_package(signature), expected_package) 114 115 116if __name__ == '__main__': 117 unittest.main(verbosity=2) 118