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 17ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlispackage com.android.tools.build.jetifier.core 18e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 19ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlisimport com.android.tools.build.jetifier.core.config.Config 20ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlisimport com.android.tools.build.jetifier.core.rule.RewriteRule 21ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlisimport com.android.tools.build.jetifier.core.rule.RewriteRulesMap 22ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlisimport com.android.tools.build.jetifier.core.type.JavaType 23ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlisimport com.android.tools.build.jetifier.core.type.TypesMap 24e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport com.google.common.truth.Truth 25e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisimport org.junit.Test 26e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 27e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlisclass TypeRewriterTest { 28e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 29e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun simpleRewrite_typesMap() { 30e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 31e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 32e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 33e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = TypesMap( 34e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis JavaType.fromDotVersion("test.sample.Class") 35e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to JavaType.fromDotVersion("test.sample2.Class2") 36e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 37e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 38e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 39e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 40dee52f68e1f6a3edc0cb77caa0902bc10cb50c33Filip Pavlis @Test fun prefixAllowedForRewrite() { 41e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 42e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 43dee52f68e1f6a3edc0cb77caa0902bc10cb50c33Filip Pavlis to = "test.sample2.Class2", 44e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis packagePrefix = "notTest/", 45e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = TypesMap( 46e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis JavaType.fromDotVersion("test.sample.Class") 47e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to JavaType.fromDotVersion("test.sample2.Class2") 48e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 49e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 50e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 51e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 52e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun typeMissingInMap_returnNull() { 53e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 54e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 55e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = null 56e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 57e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 58e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 59e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun typeMissingInMap_useFallback_shouldRewrite() { 60e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 61e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 62e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 63e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 64e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Cl(.*)", 65e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample2/Cl{0}2" 66e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )), 67e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback = true 68e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 69e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 70e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 71e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun typeMissingInMap_useFallback_innerClass_shouldRewrite() { 72e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 73e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class\$Inner", 74e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2\$Inner", 75e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 76ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlis "test/sample/Class(.*)", 77ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlis "test/sample2/Class2{0}" 78e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )), 79e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback = true 80e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 81e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 82e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 83e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun typeMissingInMap_useFallback_reversedMap_shouldRewrite() { 84e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 85e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 86e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 87e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 88e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample2/Cl(.*)2", 89e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Cl{0}" 90e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )).reverse(), 91e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback = true 92e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 93e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 94e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 95e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun useBothMaps_typesMapHasPriority() { 96e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 97e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 98e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 99e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = TypesMap( 100e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis JavaType.fromDotVersion("test.sample.Class") 101e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to JavaType.fromDotVersion("test.sample2.Class2") 102e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ), 103e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 104e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Cl(.*)", 105e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample3/Cl{0}3" 106e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )), 107e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback = true 108e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 109e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 110e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 111e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis @Test fun ignoreRule_shouldNotRewrite() { 112e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis testRewrite( 113e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from = "test.sample.Class", 114e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to = "test.sample2.Class2", 115e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap = TypesMap( 116e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis JavaType.fromDotVersion("test.sample.Class") 117e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to JavaType.fromDotVersion("test.sample2.Class2") 118e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ), 119e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap = RewriteRulesMap(RewriteRule( 120e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "test/sample/Cl(.*)", 121e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis "ignoreInRuntime" 122e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis )) 123e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 124e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 125e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 126e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis fun testRewrite( 127e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis from: String, 128e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis to: String?, 129e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis packagePrefix: String = "test/", 130e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis typesMap: TypesMap = TypesMap.EMPTY, 131e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rewriteRulesMap: RewriteRulesMap = RewriteRulesMap.EMPTY, 132e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis useFallback: Boolean = false) { 1335b12e59efaab28afee6ffc712a7c8d6ecbae8144Filip Pavlis val config = Config.fromOptional( 134e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis restrictToPackagePrefixes = setOf(packagePrefix), 135e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis rulesMap = rewriteRulesMap, 1365b12e59efaab28afee6ffc712a7c8d6ecbae8144Filip Pavlis typesMap = typesMap 137e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis ) 138e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 139e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis val rewriter = TypeRewriter(config, useFallback) 140e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis val result = rewriter.rewriteType(JavaType.fromDotVersion(from)) 141e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis 142e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis if (to == null) { 143e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis Truth.assertThat(result).isNull() 144e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } else { 145e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis Truth.assertThat(result).isEqualTo(JavaType.fromDotVersion(to)) 146e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 147e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis } 148e30cfbbfc62160fa5a9aa305a2fba9b11ebbd1e8Filip Pavlis}