1*333d2b36SAndroid Build Coastguard Worker#!/usr/bin/env python 2*333d2b36SAndroid Build Coastguard Worker# 3*333d2b36SAndroid Build Coastguard Worker# Copyright (C) 2021 The Android Open Source Project 4*333d2b36SAndroid Build Coastguard Worker# 5*333d2b36SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the 'License'); 6*333d2b36SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*333d2b36SAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*333d2b36SAndroid Build Coastguard Worker# 9*333d2b36SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*333d2b36SAndroid Build Coastguard Worker# 11*333d2b36SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*333d2b36SAndroid Build Coastguard Worker# distributed under the License is distributed on an 'AS IS' BASIS, 13*333d2b36SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*333d2b36SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*333d2b36SAndroid Build Coastguard Worker# limitations under the License. 16*333d2b36SAndroid Build Coastguard Worker"""Unit tests for verify_overlaps_test.py.""" 17*333d2b36SAndroid Build Coastguard Workerimport io 18*333d2b36SAndroid Build Coastguard Workerimport unittest 19*333d2b36SAndroid Build Coastguard Worker 20*333d2b36SAndroid Build Coastguard Workerimport verify_overlaps as vo 21*333d2b36SAndroid Build Coastguard Worker 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Workerclass TestDetectOverlaps(unittest.TestCase): 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Worker @staticmethod 26*333d2b36SAndroid Build Coastguard Worker def read_flag_trie_from_string(csvdata): 27*333d2b36SAndroid Build Coastguard Worker with io.StringIO(csvdata) as f: 28*333d2b36SAndroid Build Coastguard Worker return vo.read_flag_trie_from_stream(f) 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Worker @staticmethod 31*333d2b36SAndroid Build Coastguard Worker def read_signature_csv_from_string_as_dict(csvdata): 32*333d2b36SAndroid Build Coastguard Worker with io.StringIO(csvdata) as f: 33*333d2b36SAndroid Build Coastguard Worker return vo.read_signature_csv_from_stream_as_dict(f) 34*333d2b36SAndroid Build Coastguard Worker 35*333d2b36SAndroid Build Coastguard Worker @staticmethod 36*333d2b36SAndroid Build Coastguard Worker def extract_subset_from_monolithic_flags_as_dict_from_string( 37*333d2b36SAndroid Build Coastguard Worker monolithic, patterns): 38*333d2b36SAndroid Build Coastguard Worker with io.StringIO(patterns) as f: 39*333d2b36SAndroid Build Coastguard Worker return vo.extract_subset_from_monolithic_flags_as_dict_from_stream( 40*333d2b36SAndroid Build Coastguard Worker monolithic, f) 41*333d2b36SAndroid Build Coastguard Worker 42*333d2b36SAndroid Build Coastguard Worker extractInput = """ 43*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I,public-api,system-api,test-api 44*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,blocked 45*333d2b36SAndroid Build Coastguard WorkerLjava/util/zip/ZipFile;-><clinit>()V,blocked 46*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Character$UnicodeScript;->of(I)Ljava/lang/Character$UnicodeScript;,blocked 47*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Character;->serialVersionUID:J,sdk 48*333d2b36SAndroid Build Coastguard WorkerLjava/lang/ProcessBuilder$Redirect$1;-><init>()V,blocked 49*333d2b36SAndroid Build Coastguard Worker""" 50*333d2b36SAndroid Build Coastguard Worker 51*333d2b36SAndroid Build Coastguard Worker def test_extract_subset_signature(self): 52*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_flag_trie_from_string( 53*333d2b36SAndroid Build Coastguard Worker TestDetectOverlaps.extractInput) 54*333d2b36SAndroid Build Coastguard Worker 55*333d2b36SAndroid Build Coastguard Worker patterns = "Ljava/lang/Object;->hashCode()I" 56*333d2b36SAndroid Build Coastguard Worker 57*333d2b36SAndroid Build Coastguard Worker subset = self.extract_subset_from_monolithic_flags_as_dict_from_string( 58*333d2b36SAndroid Build Coastguard Worker monolithic, patterns) 59*333d2b36SAndroid Build Coastguard Worker expected = { 60*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->hashCode()I": { 61*333d2b36SAndroid Build Coastguard Worker None: ["public-api", "system-api", "test-api"], 62*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Object;->hashCode()I", 63*333d2b36SAndroid Build Coastguard Worker }, 64*333d2b36SAndroid Build Coastguard Worker } 65*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, subset) 66*333d2b36SAndroid Build Coastguard Worker 67*333d2b36SAndroid Build Coastguard Worker def test_extract_subset_class(self): 68*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_flag_trie_from_string( 69*333d2b36SAndroid Build Coastguard Worker TestDetectOverlaps.extractInput) 70*333d2b36SAndroid Build Coastguard Worker 71*333d2b36SAndroid Build Coastguard Worker patterns = "java/lang/Object" 72*333d2b36SAndroid Build Coastguard Worker 73*333d2b36SAndroid Build Coastguard Worker subset = self.extract_subset_from_monolithic_flags_as_dict_from_string( 74*333d2b36SAndroid Build Coastguard Worker monolithic, patterns) 75*333d2b36SAndroid Build Coastguard Worker expected = { 76*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->hashCode()I": { 77*333d2b36SAndroid Build Coastguard Worker None: ["public-api", "system-api", "test-api"], 78*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Object;->hashCode()I", 79*333d2b36SAndroid Build Coastguard Worker }, 80*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->toString()Ljava/lang/String;": { 81*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 82*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Object;->toString()Ljava/lang/String;", 83*333d2b36SAndroid Build Coastguard Worker }, 84*333d2b36SAndroid Build Coastguard Worker } 85*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, subset) 86*333d2b36SAndroid Build Coastguard Worker 87*333d2b36SAndroid Build Coastguard Worker def test_extract_subset_outer_class(self): 88*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_flag_trie_from_string( 89*333d2b36SAndroid Build Coastguard Worker TestDetectOverlaps.extractInput) 90*333d2b36SAndroid Build Coastguard Worker 91*333d2b36SAndroid Build Coastguard Worker patterns = "java/lang/Character" 92*333d2b36SAndroid Build Coastguard Worker 93*333d2b36SAndroid Build Coastguard Worker subset = self.extract_subset_from_monolithic_flags_as_dict_from_string( 94*333d2b36SAndroid Build Coastguard Worker monolithic, patterns) 95*333d2b36SAndroid Build Coastguard Worker expected = { 96*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Character$UnicodeScript;" 97*333d2b36SAndroid Build Coastguard Worker "->of(I)Ljava/lang/Character$UnicodeScript;": { 98*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 99*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Character$UnicodeScript;" 100*333d2b36SAndroid Build Coastguard Worker "->of(I)Ljava/lang/Character$UnicodeScript;", 101*333d2b36SAndroid Build Coastguard Worker }, 102*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Character;->serialVersionUID:J": { 103*333d2b36SAndroid Build Coastguard Worker None: ["sdk"], 104*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Character;->serialVersionUID:J", 105*333d2b36SAndroid Build Coastguard Worker }, 106*333d2b36SAndroid Build Coastguard Worker } 107*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, subset) 108*333d2b36SAndroid Build Coastguard Worker 109*333d2b36SAndroid Build Coastguard Worker def test_extract_subset_nested_class(self): 110*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_flag_trie_from_string( 111*333d2b36SAndroid Build Coastguard Worker TestDetectOverlaps.extractInput) 112*333d2b36SAndroid Build Coastguard Worker 113*333d2b36SAndroid Build Coastguard Worker patterns = "java/lang/Character$UnicodeScript" 114*333d2b36SAndroid Build Coastguard Worker 115*333d2b36SAndroid Build Coastguard Worker subset = self.extract_subset_from_monolithic_flags_as_dict_from_string( 116*333d2b36SAndroid Build Coastguard Worker monolithic, patterns) 117*333d2b36SAndroid Build Coastguard Worker expected = { 118*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Character$UnicodeScript;" 119*333d2b36SAndroid Build Coastguard Worker "->of(I)Ljava/lang/Character$UnicodeScript;": { 120*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 121*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Character$UnicodeScript;" 122*333d2b36SAndroid Build Coastguard Worker "->of(I)Ljava/lang/Character$UnicodeScript;", 123*333d2b36SAndroid Build Coastguard Worker }, 124*333d2b36SAndroid Build Coastguard Worker } 125*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, subset) 126*333d2b36SAndroid Build Coastguard Worker 127*333d2b36SAndroid Build Coastguard Worker def test_extract_subset_package(self): 128*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_flag_trie_from_string( 129*333d2b36SAndroid Build Coastguard Worker TestDetectOverlaps.extractInput) 130*333d2b36SAndroid Build Coastguard Worker 131*333d2b36SAndroid Build Coastguard Worker patterns = "java/lang/*" 132*333d2b36SAndroid Build Coastguard Worker 133*333d2b36SAndroid Build Coastguard Worker subset = self.extract_subset_from_monolithic_flags_as_dict_from_string( 134*333d2b36SAndroid Build Coastguard Worker monolithic, patterns) 135*333d2b36SAndroid Build Coastguard Worker expected = { 136*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Character$UnicodeScript;" 137*333d2b36SAndroid Build Coastguard Worker "->of(I)Ljava/lang/Character$UnicodeScript;": { 138*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 139*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Character$UnicodeScript;" 140*333d2b36SAndroid Build Coastguard Worker "->of(I)Ljava/lang/Character$UnicodeScript;", 141*333d2b36SAndroid Build Coastguard Worker }, 142*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Character;->serialVersionUID:J": { 143*333d2b36SAndroid Build Coastguard Worker None: ["sdk"], 144*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Character;->serialVersionUID:J", 145*333d2b36SAndroid Build Coastguard Worker }, 146*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->hashCode()I": { 147*333d2b36SAndroid Build Coastguard Worker None: ["public-api", "system-api", "test-api"], 148*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Object;->hashCode()I", 149*333d2b36SAndroid Build Coastguard Worker }, 150*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->toString()Ljava/lang/String;": { 151*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 152*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Object;->toString()Ljava/lang/String;", 153*333d2b36SAndroid Build Coastguard Worker }, 154*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/ProcessBuilder$Redirect$1;-><init>()V": { 155*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 156*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/ProcessBuilder$Redirect$1;-><init>()V", 157*333d2b36SAndroid Build Coastguard Worker }, 158*333d2b36SAndroid Build Coastguard Worker } 159*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, subset) 160*333d2b36SAndroid Build Coastguard Worker 161*333d2b36SAndroid Build Coastguard Worker def test_extract_subset_recursive_package(self): 162*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_flag_trie_from_string( 163*333d2b36SAndroid Build Coastguard Worker TestDetectOverlaps.extractInput) 164*333d2b36SAndroid Build Coastguard Worker 165*333d2b36SAndroid Build Coastguard Worker patterns = "java/**" 166*333d2b36SAndroid Build Coastguard Worker 167*333d2b36SAndroid Build Coastguard Worker subset = self.extract_subset_from_monolithic_flags_as_dict_from_string( 168*333d2b36SAndroid Build Coastguard Worker monolithic, patterns) 169*333d2b36SAndroid Build Coastguard Worker expected = { 170*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Character$UnicodeScript;" 171*333d2b36SAndroid Build Coastguard Worker "->of(I)Ljava/lang/Character$UnicodeScript;": { 172*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 173*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Character$UnicodeScript;" 174*333d2b36SAndroid Build Coastguard Worker "->of(I)Ljava/lang/Character$UnicodeScript;", 175*333d2b36SAndroid Build Coastguard Worker }, 176*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Character;->serialVersionUID:J": { 177*333d2b36SAndroid Build Coastguard Worker None: ["sdk"], 178*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Character;->serialVersionUID:J", 179*333d2b36SAndroid Build Coastguard Worker }, 180*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->hashCode()I": { 181*333d2b36SAndroid Build Coastguard Worker None: ["public-api", "system-api", "test-api"], 182*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Object;->hashCode()I", 183*333d2b36SAndroid Build Coastguard Worker }, 184*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->toString()Ljava/lang/String;": { 185*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 186*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/Object;->toString()Ljava/lang/String;", 187*333d2b36SAndroid Build Coastguard Worker }, 188*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/ProcessBuilder$Redirect$1;-><init>()V": { 189*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 190*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/lang/ProcessBuilder$Redirect$1;-><init>()V", 191*333d2b36SAndroid Build Coastguard Worker }, 192*333d2b36SAndroid Build Coastguard Worker "Ljava/util/zip/ZipFile;-><clinit>()V": { 193*333d2b36SAndroid Build Coastguard Worker None: ["blocked"], 194*333d2b36SAndroid Build Coastguard Worker "signature": "Ljava/util/zip/ZipFile;-><clinit>()V", 195*333d2b36SAndroid Build Coastguard Worker }, 196*333d2b36SAndroid Build Coastguard Worker } 197*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, subset) 198*333d2b36SAndroid Build Coastguard Worker 199*333d2b36SAndroid Build Coastguard Worker def test_read_trie_duplicate(self): 200*333d2b36SAndroid Build Coastguard Worker with self.assertRaises(Exception) as context: 201*333d2b36SAndroid Build Coastguard Worker self.read_flag_trie_from_string(""" 202*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I,public-api,system-api,test-api 203*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I,blocked 204*333d2b36SAndroid Build Coastguard Worker""") 205*333d2b36SAndroid Build Coastguard Worker self.assertTrue("Duplicate signature: Ljava/lang/Object;->hashCode()I" 206*333d2b36SAndroid Build Coastguard Worker in str(context.exception)) 207*333d2b36SAndroid Build Coastguard Worker 208*333d2b36SAndroid Build Coastguard Worker def test_read_trie_missing_member(self): 209*333d2b36SAndroid Build Coastguard Worker with self.assertRaises(Exception) as context: 210*333d2b36SAndroid Build Coastguard Worker self.read_flag_trie_from_string(""" 211*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object,public-api,system-api,test-api 212*333d2b36SAndroid Build Coastguard Worker""") 213*333d2b36SAndroid Build Coastguard Worker self.assertTrue( 214*333d2b36SAndroid Build Coastguard Worker "Invalid signature: Ljava/lang/Object, " 215*333d2b36SAndroid Build Coastguard Worker "does not identify a specific member" in str(context.exception)) 216*333d2b36SAndroid Build Coastguard Worker 217*333d2b36SAndroid Build Coastguard Worker def test_match(self): 218*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict(""" 219*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I,public-api,system-api,test-api 220*333d2b36SAndroid Build Coastguard Worker""") 221*333d2b36SAndroid Build Coastguard Worker modular = self.read_signature_csv_from_string_as_dict(""" 222*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I,public-api,system-api,test-api 223*333d2b36SAndroid Build Coastguard Worker""") 224*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, 225*333d2b36SAndroid Build Coastguard Worker ["blocked"]) 226*333d2b36SAndroid Build Coastguard Worker expected = [] 227*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 228*333d2b36SAndroid Build Coastguard Worker 229*333d2b36SAndroid Build Coastguard Worker def test_mismatch_overlapping_flags(self): 230*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict(""" 231*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,public-api 232*333d2b36SAndroid Build Coastguard Worker""") 233*333d2b36SAndroid Build Coastguard Worker modular = self.read_signature_csv_from_string_as_dict(""" 234*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api 235*333d2b36SAndroid Build Coastguard Worker""") 236*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, 237*333d2b36SAndroid Build Coastguard Worker ["blocked"]) 238*333d2b36SAndroid Build Coastguard Worker expected = [ 239*333d2b36SAndroid Build Coastguard Worker ( 240*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->toString()Ljava/lang/String;", 241*333d2b36SAndroid Build Coastguard Worker ["public-api", "system-api", "test-api"], 242*333d2b36SAndroid Build Coastguard Worker ["public-api"], 243*333d2b36SAndroid Build Coastguard Worker ), 244*333d2b36SAndroid Build Coastguard Worker ] 245*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 246*333d2b36SAndroid Build Coastguard Worker 247*333d2b36SAndroid Build Coastguard Worker def test_mismatch_monolithic_blocked(self): 248*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict(""" 249*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,blocked 250*333d2b36SAndroid Build Coastguard Worker""") 251*333d2b36SAndroid Build Coastguard Worker modular = self.read_signature_csv_from_string_as_dict(""" 252*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api 253*333d2b36SAndroid Build Coastguard Worker""") 254*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, 255*333d2b36SAndroid Build Coastguard Worker ["blocked"]) 256*333d2b36SAndroid Build Coastguard Worker expected = [ 257*333d2b36SAndroid Build Coastguard Worker ( 258*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->toString()Ljava/lang/String;", 259*333d2b36SAndroid Build Coastguard Worker ["public-api", "system-api", "test-api"], 260*333d2b36SAndroid Build Coastguard Worker ["blocked"], 261*333d2b36SAndroid Build Coastguard Worker ), 262*333d2b36SAndroid Build Coastguard Worker ] 263*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 264*333d2b36SAndroid Build Coastguard Worker 265*333d2b36SAndroid Build Coastguard Worker def test_mismatch_modular_blocked(self): 266*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict(""" 267*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api 268*333d2b36SAndroid Build Coastguard Worker""") 269*333d2b36SAndroid Build Coastguard Worker modular = self.read_signature_csv_from_string_as_dict(""" 270*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,blocked 271*333d2b36SAndroid Build Coastguard Worker""") 272*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, 273*333d2b36SAndroid Build Coastguard Worker ["blocked"]) 274*333d2b36SAndroid Build Coastguard Worker expected = [ 275*333d2b36SAndroid Build Coastguard Worker ( 276*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->toString()Ljava/lang/String;", 277*333d2b36SAndroid Build Coastguard Worker ["blocked"], 278*333d2b36SAndroid Build Coastguard Worker ["public-api", "system-api", "test-api"], 279*333d2b36SAndroid Build Coastguard Worker ), 280*333d2b36SAndroid Build Coastguard Worker ] 281*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 282*333d2b36SAndroid Build Coastguard Worker 283*333d2b36SAndroid Build Coastguard Worker def test_match_treat_missing_from_modular_as_blocked(self): 284*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict("") 285*333d2b36SAndroid Build Coastguard Worker modular = self.read_signature_csv_from_string_as_dict(""" 286*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api 287*333d2b36SAndroid Build Coastguard Worker""") 288*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, 289*333d2b36SAndroid Build Coastguard Worker ["blocked"]) 290*333d2b36SAndroid Build Coastguard Worker expected = [ 291*333d2b36SAndroid Build Coastguard Worker ( 292*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->toString()Ljava/lang/String;", 293*333d2b36SAndroid Build Coastguard Worker ["public-api", "system-api", "test-api"], 294*333d2b36SAndroid Build Coastguard Worker [], 295*333d2b36SAndroid Build Coastguard Worker ), 296*333d2b36SAndroid Build Coastguard Worker ] 297*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 298*333d2b36SAndroid Build Coastguard Worker 299*333d2b36SAndroid Build Coastguard Worker def test_mismatch_treat_missing_from_modular_as_blocked(self): 300*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict(""" 301*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I,public-api,system-api,test-api 302*333d2b36SAndroid Build Coastguard Worker""") 303*333d2b36SAndroid Build Coastguard Worker modular = {} 304*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, 305*333d2b36SAndroid Build Coastguard Worker ["blocked"]) 306*333d2b36SAndroid Build Coastguard Worker expected = [ 307*333d2b36SAndroid Build Coastguard Worker ( 308*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->hashCode()I", 309*333d2b36SAndroid Build Coastguard Worker ["blocked"], 310*333d2b36SAndroid Build Coastguard Worker ["public-api", "system-api", "test-api"], 311*333d2b36SAndroid Build Coastguard Worker ), 312*333d2b36SAndroid Build Coastguard Worker ] 313*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 314*333d2b36SAndroid Build Coastguard Worker 315*333d2b36SAndroid Build Coastguard Worker def test_blocked_missing_from_modular(self): 316*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict(""" 317*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I,blocked 318*333d2b36SAndroid Build Coastguard Worker""") 319*333d2b36SAndroid Build Coastguard Worker modular = {} 320*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, 321*333d2b36SAndroid Build Coastguard Worker ["blocked"]) 322*333d2b36SAndroid Build Coastguard Worker expected = [] 323*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 324*333d2b36SAndroid Build Coastguard Worker 325*333d2b36SAndroid Build Coastguard Worker def test_match_treat_missing_from_modular_as_empty(self): 326*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict("") 327*333d2b36SAndroid Build Coastguard Worker modular = self.read_signature_csv_from_string_as_dict(""" 328*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->toString()Ljava/lang/String;,public-api,system-api,test-api 329*333d2b36SAndroid Build Coastguard Worker""") 330*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, []) 331*333d2b36SAndroid Build Coastguard Worker expected = [ 332*333d2b36SAndroid Build Coastguard Worker ( 333*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->toString()Ljava/lang/String;", 334*333d2b36SAndroid Build Coastguard Worker ["public-api", "system-api", "test-api"], 335*333d2b36SAndroid Build Coastguard Worker [], 336*333d2b36SAndroid Build Coastguard Worker ), 337*333d2b36SAndroid Build Coastguard Worker ] 338*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 339*333d2b36SAndroid Build Coastguard Worker 340*333d2b36SAndroid Build Coastguard Worker def test_mismatch_treat_missing_from_modular_as_empty(self): 341*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict(""" 342*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I,public-api,system-api,test-api 343*333d2b36SAndroid Build Coastguard Worker""") 344*333d2b36SAndroid Build Coastguard Worker modular = {} 345*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, []) 346*333d2b36SAndroid Build Coastguard Worker expected = [ 347*333d2b36SAndroid Build Coastguard Worker ( 348*333d2b36SAndroid Build Coastguard Worker "Ljava/lang/Object;->hashCode()I", 349*333d2b36SAndroid Build Coastguard Worker [], 350*333d2b36SAndroid Build Coastguard Worker ["public-api", "system-api", "test-api"], 351*333d2b36SAndroid Build Coastguard Worker ), 352*333d2b36SAndroid Build Coastguard Worker ] 353*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 354*333d2b36SAndroid Build Coastguard Worker 355*333d2b36SAndroid Build Coastguard Worker def test_empty_missing_from_modular(self): 356*333d2b36SAndroid Build Coastguard Worker monolithic = self.read_signature_csv_from_string_as_dict(""" 357*333d2b36SAndroid Build Coastguard WorkerLjava/lang/Object;->hashCode()I 358*333d2b36SAndroid Build Coastguard Worker""") 359*333d2b36SAndroid Build Coastguard Worker modular = {} 360*333d2b36SAndroid Build Coastguard Worker mismatches = vo.compare_signature_flags(monolithic, modular, []) 361*333d2b36SAndroid Build Coastguard Worker expected = [] 362*333d2b36SAndroid Build Coastguard Worker self.assertEqual(expected, mismatches) 363*333d2b36SAndroid Build Coastguard Worker 364*333d2b36SAndroid Build Coastguard Worker 365*333d2b36SAndroid Build Coastguard Workerif __name__ == "__main__": 366*333d2b36SAndroid Build Coastguard Worker unittest.main(verbosity=2) 367