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}