TypeRewriterTest.kt revision dee52f68e1f6a3edc0cb77caa0902bc10cb50c33
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright 2018 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage com.android.tools.build.jetifier.core 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.tools.build.jetifier.core.config.Config 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.tools.build.jetifier.core.rule.RewriteRule 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.tools.build.jetifier.core.rule.RewriteRulesMap 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.tools.build.jetifier.core.type.JavaType 23f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilsonimport com.android.tools.build.jetifier.core.type.TypesMap 24f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilsonimport com.google.common.truth.Truth 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.junit.Test 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilsonclass TypeRewriterTest { 28f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Test fun simpleRewrite_typesMap() { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project testRewrite( 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project from = "test.sample.Class", 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project to = "test.sample2.Class2", 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typesMap = TypesMap( 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JavaType.fromDotVersion("test.sample.Class") 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project to JavaType.fromDotVersion("test.sample2.Class2") 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ) 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ) 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Test fun prefixAllowedForRewrite() { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project testRewrite( 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project from = "test.sample.Class", 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project to = "test.sample2.Class2", 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project packagePrefix = "notTest/", 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typesMap = TypesMap( 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JavaType.fromDotVersion("test.sample.Class") 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project to JavaType.fromDotVersion("test.sample2.Class2") 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ) 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ) 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson 52100d7290264338c6536739abd59879aaaa812537Kenny Root @Test fun typeMissingInMap_returnNull() { 53f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson testRewrite( 54f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson from = "test.sample.Class", 55f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson to = null 56f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson ) 57100d7290264338c6536739abd59879aaaa812537Kenny Root } 58f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson 59f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson @Test fun typeMissingInMap_useFallback_shouldRewrite() { 60f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson testRewrite( 61f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson from = "test.sample.Class", 62100d7290264338c6536739abd59879aaaa812537Kenny Root to = "test.sample2.Class2", 63f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson rewriteRulesMap = RewriteRulesMap(RewriteRule( 64100d7290264338c6536739abd59879aaaa812537Kenny Root "test/sample/Cl(.*)", 65f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson "test/sample2/Cl{0}2" 66f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson )), 67f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson useFallback = true 68f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson ) 69f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson } 70100d7290264338c6536739abd59879aaaa812537Kenny Root 712108ead7f125536874d6de6ca1c0c4cffbf61b44Jesse Wilson @Test fun typeMissingInMap_useFallback_innerClass_shouldRewrite() { 72100d7290264338c6536739abd59879aaaa812537Kenny Root testRewrite( 732108ead7f125536874d6de6ca1c0c4cffbf61b44Jesse Wilson from = "test.sample.Class\$Inner", 742108ead7f125536874d6de6ca1c0c4cffbf61b44Jesse Wilson to = "test.sample2.Class2\$Inner", 752108ead7f125536874d6de6ca1c0c4cffbf61b44Jesse Wilson rewriteRulesMap = RewriteRulesMap(RewriteRule( 76f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson "test/sample/Class(.*)", 77f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson "test/sample2/Class2{0}" 78100d7290264338c6536739abd59879aaaa812537Kenny Root )), 79f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson useFallback = true 80100d7290264338c6536739abd59879aaaa812537Kenny Root ) 81f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson } 82f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson 83f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson @Test fun typeMissingInMap_useFallback_reversedMap_shouldRewrite() { 84f5fb5e80963abeabdf0ff10dcee068344235082eJesse Wilson testRewrite( 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project from = "test.sample.Class", 86 to = "test.sample2.Class2", 87 rewriteRulesMap = RewriteRulesMap(RewriteRule( 88 "test/sample2/Cl(.*)2", 89 "test/sample/Cl{0}" 90 )).reverse(), 91 useFallback = true 92 ) 93 } 94 95 @Test fun useBothMaps_typesMapHasPriority() { 96 testRewrite( 97 from = "test.sample.Class", 98 to = "test.sample2.Class2", 99 typesMap = TypesMap( 100 JavaType.fromDotVersion("test.sample.Class") 101 to JavaType.fromDotVersion("test.sample2.Class2") 102 ), 103 rewriteRulesMap = RewriteRulesMap(RewriteRule( 104 "test/sample/Cl(.*)", 105 "test/sample3/Cl{0}3" 106 )), 107 useFallback = true 108 ) 109 } 110 111 @Test fun ignoreRule_shouldNotRewrite() { 112 testRewrite( 113 from = "test.sample.Class", 114 to = "test.sample2.Class2", 115 typesMap = TypesMap( 116 JavaType.fromDotVersion("test.sample.Class") 117 to JavaType.fromDotVersion("test.sample2.Class2") 118 ), 119 rewriteRulesMap = RewriteRulesMap(RewriteRule( 120 "test/sample/Cl(.*)", 121 "ignoreInRuntime" 122 )) 123 ) 124 } 125 126 fun testRewrite( 127 from: String, 128 to: String?, 129 packagePrefix: String = "test/", 130 typesMap: TypesMap = TypesMap.EMPTY, 131 rewriteRulesMap: RewriteRulesMap = RewriteRulesMap.EMPTY, 132 useFallback: Boolean = false) { 133 val config = Config.fromOptional( 134 restrictToPackagePrefixes = setOf(packagePrefix), 135 rulesMap = rewriteRulesMap, 136 typesMap = typesMap 137 ) 138 139 val rewriter = TypeRewriter(config, useFallback) 140 val result = rewriter.rewriteType(JavaType.fromDotVersion(from)) 141 142 if (to == null) { 143 Truth.assertThat(result).isNull() 144 } else { 145 Truth.assertThat(result).isEqualTo(JavaType.fromDotVersion(to)) 146 } 147 } 148}