TypeRewriterTest.kt revision e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8
1e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis/* 2e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * Copyright 2018 The Android Open Source Project 3e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * 4e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * Licensed under the Apache License, Version 2.0 (the "License"); 5e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * you may not use this file except in compliance with the License. 6e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * You may obtain a copy of the License at 7e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * 8e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * http://www.apache.org/licenses/LICENSE-2.0 9e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * 10e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * Unless required by applicable law or agreed to in writing, software 11e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * distributed under the License is distributed on an "AS IS" BASIS, 12e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * See the License for the specific language governing permissions and 14e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis * limitations under the License. 15e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis */ 16e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 17e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlispackage android.support.tools.jetifier.core 18e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 19e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport android.support.tools.jetifier.core.config.Config 20e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport android.support.tools.jetifier.core.proguard.ProGuardTypesMap 21e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport android.support.tools.jetifier.core.rule.RewriteRule 22e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport android.support.tools.jetifier.core.rule.RewriteRulesMap 23e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport android.support.tools.jetifier.core.type.JavaType 24e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport android.support.tools.jetifier.core.type.TypesMap 25e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport com.google.common.truth.Truth 26e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport org.junit.Test 27e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 28e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisclass TypeRewriterTest { 29e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 30e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun simpleRewrite_typesMap() { 31e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 32e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 33e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 34e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = TypesMap( 35e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis JavaType.fromDotVersion("test.sample.Class") 36e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to JavaType.fromDotVersion("test.sample2.Class2") 37e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 38e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 39e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 40e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 41e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun prefixNotAllowedForRewrite() { 42e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 43e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 44e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample.Class", 45e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis packagePrefix = "notTest/", 46e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = TypesMap( 47e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis JavaType.fromDotVersion("test.sample.Class") 48e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to JavaType.fromDotVersion("test.sample2.Class2") 49e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 50e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 51e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 52e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 53e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun typeMissingInMap_returnNull() { 54e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 55e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 56e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = null 57e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 58e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 59e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 60e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun typeMissingInMap_useFallback_shouldRewrite() { 61e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 62e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 63e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 64e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 65e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Cl(.*)", 66e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample2/Cl{0}2" 67e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )), 68e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback = true 69e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 70e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 71e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 72e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun typeMissingInMap_useFallback_innerClass_shouldRewrite() { 73e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 74e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class\$Inner", 75e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2\$Inner", 76e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 77e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Class(.*)", 78e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample2/Class2{0}" 79e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )), 80e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback = true 81e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 82e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 83e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 84e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun typeMissingInMap_useFallback_reversedMap_shouldRewrite() { 85e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 86e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 87e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 88e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 89e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample2/Cl(.*)2", 90e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Cl{0}" 91e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )).reverse(), 92e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback = true 93e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 94e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 95e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 96e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun useBothMaps_typesMapHasPriority() { 97e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 98e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 99e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 100e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = TypesMap( 101e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis JavaType.fromDotVersion("test.sample.Class") 102e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to JavaType.fromDotVersion("test.sample2.Class2") 103e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ), 104e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 105e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Cl(.*)", 106e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample3/Cl{0}3" 107e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )), 108e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback = true 109e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 110e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 111e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 112e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun ignoreRule_shouldNotRewrite() { 113e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 114e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 115e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 116e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = TypesMap( 117e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis JavaType.fromDotVersion("test.sample.Class") 118e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to JavaType.fromDotVersion("test.sample2.Class2") 119e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ), 120e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 121e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Cl(.*)", 122e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "ignoreInRuntime" 123e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )) 124e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 125e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 126e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 127e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis fun testRewrite( 128e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from: String, 129e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to: String?, 130e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis packagePrefix: String = "test/", 131e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap: TypesMap = TypesMap.EMPTY, 132e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap: RewriteRulesMap = RewriteRulesMap.EMPTY, 133e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback: Boolean = false) { 134e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis val config = Config( 135e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis restrictToPackagePrefixes = setOf(packagePrefix), 136e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rulesMap = rewriteRulesMap, 137e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis slRules = emptySet(), 138e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis pomRewriteRules = emptySet(), 139e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = typesMap, 140e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis proGuardMap = ProGuardTypesMap.EMPTY, 141e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis packageMap = PackageMap.EMPTY 142e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 143e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 144e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis val rewriter = TypeRewriter(config, useFallback) 145e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis val result = rewriter.rewriteType(JavaType.fromDotVersion(from)) 146e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 147e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis if (to == null) { 148e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis Truth.assertThat(result).isNull() 149e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } else { 150e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis Truth.assertThat(result).isEqualTo(JavaType.fromDotVersion(to)) 151e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 152e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 153e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis}