blob: b6d5fa38e53a5401386de31c0b98863a1837c64a [file] [log] [blame]
Paul Duffin428c6512021-07-21 15:33:22 +01001#!/usr/bin/env python
2#
3# Copyright (C) 2021 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"""Unit tests for verify_overlaps_test.py."""
18import io
19import unittest
20
21from verify_overlaps import *
22
23class TestDetectOverlaps(unittest.TestCase):
24
25 def read_signature_csv_from_string_as_dict(self, csv):
26 with io.StringIO(csv) as f:
27 return read_signature_csv_from_stream_as_dict(f)
28
Paul Duffin67b9d612021-07-21 17:38:47 +010029 def extract_subset_from_monolithic_flags_as_dict_from_string(self, monolithic, patterns):
30 with io.StringIO(patterns) as f:
31 return extract_subset_from_monolithic_flags_as_dict_from_stream(monolithic, f)
32
Paul Duffin53a76072021-07-21 17:27:09 +010033 extractInput = '''
34Ljava/lang/Object;->hashCode()I,public-api,system-api,test-api
35Ljava/lang/Object;->toString()Ljava/lang/String;,blocked
36'''
37
38 def test_extract_subset(self):
39 monolithic = self.read_signature_csv_from_string_as_dict(TestDetectOverlaps.extractInput)
40 modular = self.read_signature_csv_from_string_as_dict('''
41Ljava/lang/Object;->hashCode()I,public-api,system-api,test-api
42''')
Paul Duffin67b9d612021-07-21 17:38:47 +010043
44 patterns = 'Ljava/lang/Object;->hashCode()I'
45
46 subset = self.extract_subset_from_monolithic_flags_as_dict_from_string(monolithic, patterns)
Paul Duffin53a76072021-07-21 17:27:09 +010047 expected = {
48 'Ljava/lang/Object;->hashCode()I': {
49 None: ['public-api', 'system-api', 'test-api'],
50 'signature': 'Ljava/lang/Object;->hashCode()I',
51 },
52 }
53 self.assertEqual(expected, subset)
54
Paul Duffin428c6512021-07-21 15:33:22 +010055 def test_match(self):
56 monolithic = self.read_signature_csv_from_string_as_dict('''
57Ljava/lang/Object;->hashCode()I,public-api,system-api,test-api
Paul Duffin428c6512021-07-21 15:33:22 +010058''')
59 modular = self.read_signature_csv_from_string_as_dict('''
60Ljava/lang/Object;->hashCode()I,public-api,system-api,test-api
61''')
62 mismatches = compare_signature_flags(monolithic, modular)
63 expected = []
64 self.assertEqual(expected, mismatches)
65
66 def test_mismatch_overlapping_flags(self):
67 monolithic = self.read_signature_csv_from_string_as_dict('''
68Ljava/lang/Object;->toString()Ljava/lang/String;,public-api
69''')
70 modular = self.read_signature_csv_from_string_as_dict('''
71Ljava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api
72''')
73 mismatches = compare_signature_flags(monolithic, modular)
74 expected = [
75 (
76 'Ljava/lang/Object;->toString()Ljava/lang/String;',
77 ['public-api', 'system-api', 'test-api'],
78 ['public-api'],
79 ),
80 ]
81 self.assertEqual(expected, mismatches)
82
83
84 def test_mismatch_monolithic_blocked(self):
85 monolithic = self.read_signature_csv_from_string_as_dict('''
Paul Duffin428c6512021-07-21 15:33:22 +010086Ljava/lang/Object;->toString()Ljava/lang/String;,blocked
87''')
88 modular = self.read_signature_csv_from_string_as_dict('''
89Ljava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api
90''')
91 mismatches = compare_signature_flags(monolithic, modular)
92 expected = [
93 (
94 'Ljava/lang/Object;->toString()Ljava/lang/String;',
95 ['public-api', 'system-api', 'test-api'],
96 ['blocked'],
97 ),
98 ]
99 self.assertEqual(expected, mismatches)
100
101 def test_mismatch_modular_blocked(self):
102 monolithic = self.read_signature_csv_from_string_as_dict('''
Paul Duffin428c6512021-07-21 15:33:22 +0100103Ljava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api
104''')
105 modular = self.read_signature_csv_from_string_as_dict('''
106Ljava/lang/Object;->toString()Ljava/lang/String;,blocked
107''')
108 mismatches = compare_signature_flags(monolithic, modular)
109 expected = [
110 (
111 'Ljava/lang/Object;->toString()Ljava/lang/String;',
112 ['blocked'],
113 ['public-api', 'system-api', 'test-api'],
114 ),
115 ]
116 self.assertEqual(expected, mismatches)
117
118 def test_missing_from_monolithic(self):
Paul Duffin53a76072021-07-21 17:27:09 +0100119 monolithic = self.read_signature_csv_from_string_as_dict('')
Paul Duffin428c6512021-07-21 15:33:22 +0100120 modular = self.read_signature_csv_from_string_as_dict('''
121Ljava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api
122''')
123 mismatches = compare_signature_flags(monolithic, modular)
124 expected = [
125 (
126 'Ljava/lang/Object;->toString()Ljava/lang/String;',
127 ['public-api', 'system-api', 'test-api'],
128 [],
129 ),
130 ]
131 self.assertEqual(expected, mismatches)
132
133 def test_missing_from_modular(self):
Paul Duffin428c6512021-07-21 15:33:22 +0100134 monolithic = self.read_signature_csv_from_string_as_dict('''
135Ljava/lang/Object;->hashCode()I,public-api,system-api,test-api
136''')
137 modular = {}
138 mismatches = compare_signature_flags(monolithic, modular)
Paul Duffin53a76072021-07-21 17:27:09 +0100139 expected = [
140 (
141 'Ljava/lang/Object;->hashCode()I',
142 [],
143 ['public-api', 'system-api', 'test-api'],
144 ),
145 ]
Paul Duffin428c6512021-07-21 15:33:22 +0100146 self.assertEqual(expected, mismatches)
147
148 def test_blocked_missing_from_modular(self):
Paul Duffin428c6512021-07-21 15:33:22 +0100149 monolithic = self.read_signature_csv_from_string_as_dict('''
150Ljava/lang/Object;->hashCode()I,blocked
151''')
152 modular = {}
153 mismatches = compare_signature_flags(monolithic, modular)
Paul Duffin53a76072021-07-21 17:27:09 +0100154 expected = [
155 (
156 'Ljava/lang/Object;->hashCode()I',
157 [],
158 ['blocked'],
159 ),
160 ]
Paul Duffin428c6512021-07-21 15:33:22 +0100161 self.assertEqual(expected, mismatches)
162
163if __name__ == '__main__':
164 unittest.main(verbosity=2)