blob: 4716241940b5c87913533b726a823b080aa44274 [file] [log] [blame]
David Brazdil8503b902018-08-30 13:35:03 +01001#!/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 *
19
20class TestHiddenapiListGeneration(unittest.TestCase):
21
22 def test_move_between_sets(self):
23 A = set([1, 2, 3, 4])
24 B = set([5, 6, 7, 8])
25 move_between_sets(set([2, 4]), A, B)
26 self.assertEqual(A, set([1, 3]))
27 self.assertEqual(B, set([2, 4, 5, 6, 7, 8]))
28
29 def test_move_between_sets_fail_not_superset(self):
30 A = set([1, 2, 3, 4])
31 B = set([5, 6, 7, 8])
32 with self.assertRaises(AssertionError) as ar:
33 move_between_sets(set([0, 2]), A, B)
34
35 def test_move_between_sets_fail_not_disjoint(self):
36 A = set([1, 2, 3, 4])
37 B = set([4, 5, 6, 7, 8])
38 with self.assertRaises(AssertionError) as ar:
39 move_between_sets(set([1, 4]), A, B)
40
David Brazdil4a55eeb2018-09-11 11:09:01 +010041 def test_get_package_name(self):
42 self.assertEqual(get_package_name("Ljava/lang/String;->clone()V"), "Ljava/lang/")
43
44 def test_get_package_name_fail_no_arrow(self):
45 with self.assertRaises(AssertionError) as ar:
46 get_package_name("Ljava/lang/String;-clone()V")
47 with self.assertRaises(AssertionError) as ar:
48 get_package_name("Ljava/lang/String;>clone()V")
49 with self.assertRaises(AssertionError) as ar:
50 get_package_name("Ljava/lang/String;__clone()V")
51
52 def test_get_package_name_fail_no_package(self):
53 with self.assertRaises(AssertionError) as ar:
54 get_package_name("LString;->clone()V")
55
56 def test_all_package_names(self):
57 self.assertEqual(all_package_names(), set())
58 self.assertEqual(all_package_names(set(["Lfoo/Bar;->baz()V"])), set(["Lfoo/"]))
59 self.assertEqual(
60 all_package_names(set(["Lfoo/Bar;->baz()V", "Lfoo/BarX;->bazx()I"])),
61 set(["Lfoo/"]))
62 self.assertEqual(
63 all_package_names(
64 set(["Lfoo/Bar;->baz()V"]),
65 set(["Lfoo/BarX;->bazx()I", "Labc/xyz/Mno;->ijk()J"])),
66 set(["Lfoo/", "Labc/xyz/"]))
67
David Brazdil8503b902018-08-30 13:35:03 +010068 def test_move_all(self):
69 src = set([ "abc", "xyz" ])
70 dst = set([ "def" ])
71 move_all(src, dst)
72 self.assertEqual(src, set())
73 self.assertEqual(dst, set([ "abc", "def", "xyz" ]))
74
David Brazdil4a55eeb2018-09-11 11:09:01 +010075 def test_move_from_packages(self):
76 src = set([ "Lfoo/bar/ClassA;->abc()J", # will be moved
77 "Lfoo/bar/ClassA;->def()J", # will be moved
78 "Lcom/pkg/example/ClassD;->ijk:J", # not moved: different package
79 "Lfoo/bar/xyz/ClassC;->xyz()Z" ]) # not moved: subpackage
80 dst = set()
81 packages = set([ "Lfoo/bar/" ])
82 move_from_packages(packages, src, dst)
83 self.assertEqual(
84 src, set([ "Lfoo/bar/xyz/ClassC;->xyz()Z", "Lcom/pkg/example/ClassD;->ijk:J" ]))
85 self.assertEqual(
86 dst, set([ "Lfoo/bar/ClassA;->abc()J", "Lfoo/bar/ClassA;->def()J" ]))
87
Paul Duffine9622a32018-09-20 11:03:40 +010088 def test_move_serialization(self):
89 # All the entries should be moved apart from the last one
90 src = set([ "Lfoo/bar/ClassA;->readObject(Ljava/io/ObjectInputStream;)V",
91 "Lfoo/bar/ClassA;->readObjectNoData()V",
92 "Lfoo/bar/ClassA;->readResolve()Ljava/lang/Object;",
93 "Lfoo/bar/ClassA;->serialVersionUID:J",
94 "Lfoo/bar/ClassA;->serialPersistentFields:[Ljava/io/ObjectStreamField;",
95 "Lfoo/bar/ClassA;->writeObject(Ljava/io/ObjectOutputStream;)V",
96 "Lfoo/bar/ClassA;->writeReplace()Ljava/lang/Object;",
97 # Should not be moved as signature does not match
98 "Lfoo/bar/ClassA;->readObject(Ljava/io/ObjectInputStream;)I"])
99 expectedToMove = len(src) - 1
100 dst = set()
101 packages = set([ "Lfoo/bar/" ])
102 move_serialization(src, dst)
103 self.assertEqual(len(src), 1)
104 self.assertEqual(len(dst), expectedToMove)
105
David Brazdil8503b902018-08-30 13:35:03 +0100106if __name__ == '__main__':
107 unittest.main()