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.core 18 19import com.android.tools.build.jetifier.core.config.Config 20import com.android.tools.build.jetifier.core.rule.RewriteRule 21import com.android.tools.build.jetifier.core.rule.RewriteRulesMap 22import com.android.tools.build.jetifier.core.type.JavaType 23import com.android.tools.build.jetifier.core.type.TypesMap 24import com.google.common.truth.Truth 25import org.junit.Test 26 27class TypeRewriterTest { 28 29 @Test fun simpleRewrite_typesMap() { 30 testRewrite( 31 from = "test.sample.Class", 32 to = "test.sample2.Class2", 33 typesMap = TypesMap( 34 JavaType.fromDotVersion("test.sample.Class") 35 to JavaType.fromDotVersion("test.sample2.Class2") 36 ) 37 ) 38 } 39 40 @Test fun prefixAllowedForRewrite() { 41 testRewrite( 42 from = "test.sample.Class", 43 to = "test.sample2.Class2", 44 packagePrefix = "notTest/", 45 typesMap = TypesMap( 46 JavaType.fromDotVersion("test.sample.Class") 47 to JavaType.fromDotVersion("test.sample2.Class2") 48 ) 49 ) 50 } 51 52 @Test fun typeMissingInMap_returnNull() { 53 testRewrite( 54 from = "test.sample.Class", 55 to = null 56 ) 57 } 58 59 @Test fun typeMissingInMap_useFallback_shouldRewrite() { 60 testRewrite( 61 from = "test.sample.Class", 62 to = "test.sample2.Class2", 63 rewriteRulesMap = RewriteRulesMap(RewriteRule( 64 "test/sample/Cl(.*)", 65 "test/sample2/Cl{0}2" 66 )), 67 useFallback = true 68 ) 69 } 70 71 @Test fun typeMissingInMap_useFallback_innerClass_shouldRewrite() { 72 testRewrite( 73 from = "test.sample.Class\$Inner", 74 to = "test.sample2.Class2\$Inner", 75 rewriteRulesMap = RewriteRulesMap(RewriteRule( 76 "test/sample/Class(.*)", 77 "test/sample2/Class2{0}" 78 )), 79 useFallback = true 80 ) 81 } 82 83 @Test fun typeMissingInMap_useFallback_reversedMap_shouldRewrite() { 84 testRewrite( 85 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}