1/* 2 * Copyright 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.tools.build.jetifier.processor.transform.proguard 18 19import org.junit.Test 20 21class ProGuardTypesMapperTest { 22 23 @Test fun proGuard_typeMapper_wildcard_simple() { 24 ProGuardTester() 25 .testThatGivenType("*") 26 .getsRewrittenTo("*") 27 } 28 29 @Test fun proGuard_typeMapper_wildcard_double() { 30 ProGuardTester() 31 .testThatGivenType("**") 32 .getsRewrittenTo("**") 33 } 34 35 @Test fun proGuard_typeMapper_wildcard_composed() { 36 ProGuardTester() 37 .testThatGivenType("**/*") 38 .getsRewrittenTo("**/*") 39 } 40 41 @Test fun proGuard_typeMapper_wildcard_viaMap() { 42 ProGuardTester() 43 .forGivenPrefixes( 44 "support/" 45 ) 46 .forGivenProGuardMap( 47 "support/v7/*" to "test/v7/*" 48 ) 49 .testThatGivenType("support.v7.*") 50 .getsRewrittenTo("test.v7.*") 51 } 52 53 @Test fun proGuard_typeMapper_wildcard_viaMap2() { 54 ProGuardTester() 55 .forGivenPrefixes( 56 "support/" 57 ) 58 .forGivenProGuardMap( 59 "support/v7/**" to "test/v7/**" 60 ) 61 .testThatGivenType("support.v7.**") 62 .getsRewrittenTo("test.v7.**") 63 } 64 65 @Test fun proGuard_typeMapper_wildcard_viaTypesMap() { 66 ProGuardTester() 67 .forGivenPrefixes( 68 "support/" 69 ) 70 .forGivenTypesMap( 71 "support/v7/Activity" to "test/v7/Activity" 72 ) 73 .testThatGivenType("support.v7.Activity") 74 .getsRewrittenTo("test.v7.Activity") 75 } 76 77 @Test fun proGuard_typeMapper_wildcard_notFoundInMap() { 78 ProGuardTester() 79 .forGivenPrefixes( 80 "support/" 81 ) 82 .forGivenProGuardMap( 83 "support/**" to "test/**" 84 ) 85 .testThatGivenType("keep.me.**") 86 .getsRewrittenTo("keep.me.**") 87 } 88 89 @Test fun proGuard_typeMapper_differentPrefix_stillRewritten() { 90 ProGuardTester() 91 .forGivenPrefixes( 92 "support/" 93 ) 94 .forGivenTypesMap( 95 "hello/Activity" to "test/Activity" 96 ) 97 .testThatGivenType("hello.Activity") 98 .getsRewrittenTo("test.Activity") 99 } 100 101 @Test fun proGuard_typeMapper_differentPrefix_wildcard_getsRewritten() { 102 ProGuardTester() 103 .forGivenPrefixes( 104 "support/" 105 ) 106 .forGivenProGuardMap( 107 "hello/**" to "test/**" 108 ) 109 .testThatGivenType("hello.**") 110 .getsRewrittenTo("test.**") 111 } 112 113 @Test fun proGuard_typeMapper_innerClass() { 114 ProGuardTester() 115 .forGivenPrefixes( 116 "support/" 117 ) 118 .forGivenTypesMap( 119 "support/Activity" to "test/Activity" 120 ) 121 .testThatGivenType("support.Activity\$InnerClass") 122 .getsRewrittenTo("test.Activity\$InnerClass") 123 } 124 125 @Test fun proGuard_typeMapper_innerWithStar() { 126 ProGuardTester() 127 .forGivenPrefixes( 128 "support/" 129 ) 130 .forGivenTypesMap( 131 "support/Activity" to "test/Activity" 132 ) 133 .testThatGivenType("support.Activity\$*") 134 .getsRewrittenTo("test.Activity\$*") 135 } 136 137 @Test fun proGuard_typeMapper_innerWithDoubleStar() { 138 ProGuardTester() 139 .forGivenPrefixes( 140 "support/" 141 ) 142 .forGivenTypesMap( 143 "support/Activity" to "test/Activity" 144 ) 145 .testThatGivenType("support.Activity\$**") 146 .getsRewrittenTo("test.Activity\$**") 147 } 148 149 @Test fun proGuard_typeMapper_innerClass_wildcard() { 150 ProGuardTester() 151 .forGivenPrefixes( 152 "support/" 153 ) 154 .forGivenProGuardMap( 155 "**R\$Attrs" to "**R2\$Attrs" 156 ) 157 .testThatGivenType("**R\$Attrs") 158 .getsRewrittenTo("**R2\$Attrs") 159 } 160 161 @Test fun proGuard_argsMapper_tripleDots() { 162 ProGuardTester() 163 .testThatGivenArguments("...") 164 .getRewrittenTo("...") 165 } 166 167 @Test fun proGuard_argsMapper_wildcard() { 168 ProGuardTester() 169 .testThatGivenArguments("*") 170 .getRewrittenTo("*") 171 } 172 173 @Test fun proGuard_argsMapper_wildcards() { 174 ProGuardTester() 175 .testThatGivenArguments("**, **") 176 .getRewrittenTo("**, **") 177 } 178 179 @Test fun proGuard_argsMapper_viaMaps() { 180 ProGuardTester() 181 .forGivenPrefixes( 182 "support/" 183 ) 184 .forGivenTypesMap( 185 "support/Activity" to "test/Activity" 186 ) 187 .forGivenProGuardMap( 188 "support/v7/**" to "test/v7/**" 189 ) 190 .testThatGivenArguments("support.Activity, support.v7.**, keep.Me") 191 .getRewrittenTo("test.Activity, test.v7.**, keep.Me") 192 } 193 194 @Test fun proGuard_argsMapper_viaMaps_spaces() { 195 ProGuardTester() 196 .forGivenPrefixes( 197 "support/" 198 ) 199 .forGivenTypesMap( 200 "support/Activity" to "test/Activity" 201 ) 202 .forGivenProGuardMap( 203 "support/v7/**" to "test/v7/**" 204 ) 205 .testThatGivenArguments(" support.Activity , \t support.v7.**, keep.Me ") 206 .getRewrittenTo("test.Activity, test.v7.**, keep.Me") 207 } 208 209 @Test fun proGuard_shouldIgnore() { 210 ProGuardTester() 211 .forGivenPrefixes( 212 "support/" 213 ) 214 .forGivenRules( 215 "support/v7/Activity" to "ignore" 216 ) 217 .testThatGivenType("support.v7.Activity") 218 .getsRewrittenTo("support.v7.Activity") 219 } 220 221 @Test fun proGuard_shouldIgnore_withWildcard() { 222 ProGuardTester() 223 .forGivenPrefixes( 224 "support/" 225 ) 226 .forGivenRules( 227 "support/v7/(.*)" to "ignore" 228 ) 229 .testThatGivenType("support.v7.**") 230 .getsRewrittenTo("support.v7.**") 231 } 232 233 @Test(expected = AssertionError::class) 234 fun proGuard_shouldNotIgnore() { 235 ProGuardTester() 236 .forGivenPrefixes( 237 "support/" 238 ) 239 .forGivenRules( 240 "support/v7/Activity" to "ignoreInPreprocessor" 241 ) 242 .testThatGivenType("support.v7.Activity") 243 .getsRewrittenTo("support.v7.Activity") 244 } 245 246 @Test fun proGuard_solver_wildcard_shouldRewrite() { 247 ProGuardTester() 248 .forGivenPrefixes( 249 "support/" 250 ) 251 .forGivenTypesMap( 252 "support/v7/preference/Preference" to "test/preference/Preference", 253 "support/v4/preference/PreferenceDialog" to "test/preference/PreferenceDialog", 254 "support/v4/preference/SomethingElse" to "test/preference/SomethingElse", 255 "support/v7/Random" to "test/Random" 256 ) 257 .testThatGivenType("support.v?.preference.**") 258 .getsRewrittenTo("test.preference.**") 259 } 260 261 @Test fun proGuard_solver_wildcard2_shouldRewrite() { 262 ProGuardTester() 263 .forGivenPrefixes( 264 "support/" 265 ) 266 .forGivenTypesMap( 267 "support/v7/preference/Preference" to "test/preference/Preference", 268 "support/v4/preference/SomethingElse" to "test/preference/SomethingElse", 269 "support/v7/Random" to "test/Random" 270 ) 271 .testThatGivenType("support.*.preference.**") 272 .getsRewrittenTo("test.preference.**") 273 } 274 275 @Test fun proGuard_solver_wildcard3_shouldRewrite() { 276 ProGuardTester() 277 .forGivenPrefixes( 278 "support/" 279 ) 280 .forGivenTypesMap( 281 "support/v7/preference/Preference" to "test/preference/Preference", 282 "support/v4/preference/SomethingElse" to "test/preference/SomethingElse", 283 "support/v4/preference/internal/Something" to "test/preference/internal/Something", 284 "support/v7/Random" to "test/Random" 285 ) 286 .testThatGivenType("support.*.preference.**") 287 .getsRewrittenTo("test.preference.**") 288 } 289 290 @Test fun proGuard_solver_wildcard4_shouldRewrite() { 291 ProGuardTester() 292 .forGivenPrefixes( 293 "support/" 294 ) 295 .forGivenTypesMap( 296 "support/v7/preference/Preference" to "test/preference/Preference", 297 "support/v4/preference/PreferenceDialog" to "test/preference/PreferenceDialog", 298 "support/v7/Random" to "test2/Random" 299 ) 300 .testThatGivenType("support.**") 301 .getsRewrittenTo("test.**", "test2.**") 302 } 303 304 @Test fun proGuard_solver_wildcard_needToMapPartOfClass_shouldRewrite() { 305 ProGuardTester() 306 .forGivenPrefixes( 307 "support/" 308 ) 309 .forGivenTypesMap( 310 "support/v7/preference/Preference" to "test/preference/Preference", 311 "support/v4/preference/PreferenceDialog" to "test/preference/PreferenceDialog", 312 "support/v4/preference/SomethingElse" to "test/preference/SomethingElse" 313 ) 314 .testThatGivenType("support.v7.preference.Preference*") 315 .getsRewrittenTo("test.preference.Preference*") 316 } 317 318 @Test fun proGuard_solver_wildcard_oneToOne_shouldRewrite() { 319 ProGuardTester() 320 .forGivenPrefixes( 321 "support/" 322 ) 323 .forGivenTypesMap( 324 "support/v7/preference/Preference" to "test/preference/Preference", 325 "support/v4/preference/PreferenceDialog" to "test/preference/PreferenceDialog" 326 ) 327 .testThatGivenType("support.v?.preference.Preference") 328 .getsRewrittenTo("test.preference.Preference") 329 } 330 331 @Test fun proGuard_solver_wildcard_oneToOneStar_shouldRewrite() { 332 ProGuardTester() 333 .forGivenPrefixes( 334 "support/" 335 ) 336 .forGivenTypesMap( 337 "support/v7/preference/Preference" to "test/preference/Preference" 338 ) 339 .testThatGivenType("support.v?.preference.Preference*") 340 .getsRewrittenTo("test.preference.Preference*") 341 } 342}