1 /* 2 * Copyright (C) 2019 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 17 18 package com.android.tools.layoutlib.create; 19 20 import static org.junit.Assert.*; 21 22 import org.junit.After; 23 import org.junit.Before; 24 import org.junit.Test; 25 26 /** 27 * 28 */ 29 public class RenameClassAdapterTest { 30 31 private RenameClassAdapter mOuter; 32 private RenameClassAdapter mInner; 33 34 @Before setUp()35 public void setUp() throws Exception { 36 mOuter = new RenameClassAdapter(null, // cv 37 "com.pack.Old", 38 "org.blah.New"); 39 40 mInner = new RenameClassAdapter(null, // cv 41 "com.pack.Old$Inner", 42 "org.blah.New$Inner"); 43 } 44 45 @After tearDown()46 public void tearDown() throws Exception { 47 } 48 49 /** 50 * Renames a type, e.g. "Lcom.package.My;" 51 * If the type doesn't need to be renamed, returns the input string as-is. 52 */ 53 @Test testRenameTypeDesc()54 public void testRenameTypeDesc() { 55 56 // primitive types are left untouched 57 assertEquals("I", mOuter.renameTypeDesc("I")); 58 assertEquals("D", mOuter.renameTypeDesc("D")); 59 assertEquals("V", mOuter.renameTypeDesc("V")); 60 61 // object types that need no renaming are left untouched 62 assertEquals("Lcom.package.MyClass;", mOuter.renameTypeDesc("Lcom.package.MyClass;")); 63 assertEquals("Lcom.package.MyClass;", mInner.renameTypeDesc("Lcom.package.MyClass;")); 64 65 // object types that match the requirements 66 assertEquals("Lorg.blah.New;", mOuter.renameTypeDesc("Lcom.pack.Old;")); 67 assertEquals("Lorg.blah.New$Inner;", mInner.renameTypeDesc("Lcom.pack.Old$Inner;")); 68 // inner classes match the base type which is being renamed 69 assertEquals("Lorg.blah.New$Other;", mOuter.renameTypeDesc("Lcom.pack.Old$Other;")); 70 assertEquals("Lorg.blah.New$Other;", mInner.renameTypeDesc("Lcom.pack.Old$Other;")); 71 72 // arrays 73 assertEquals("[Lorg.blah.New;", mOuter.renameTypeDesc("[Lcom.pack.Old;")); 74 assertEquals("[[Lorg.blah.New;", mOuter.renameTypeDesc("[[Lcom.pack.Old;")); 75 76 assertEquals("[Lorg.blah.New;", mInner.renameTypeDesc("[Lcom.pack.Old;")); 77 assertEquals("[[Lorg.blah.New;", mInner.renameTypeDesc("[[Lcom.pack.Old;")); 78 } 79 80 /** 81 * Renames an object type, e.g. "Lcom.package.MyClass;" or an array type that has an 82 * object element, e.g. "[Lcom.package.MyClass;" 83 * If the type doesn't need to be renamed, returns the internal name of the input type. 84 */ 85 @Test testRenameType()86 public void testRenameType() { 87 // Skip. This is actually tested by testRenameTypeDesc above. 88 } 89 90 /** 91 * Renames an internal type name, e.g. "com.package.MyClass". 92 * If the type doesn't need to be renamed, returns the input string as-is. 93 */ 94 @Test testRenameInternalType()95 public void testRenameInternalType() { 96 // an actual FQCN 97 assertEquals("org.blah.New", mOuter.renameInternalType("com.pack.Old")); 98 assertEquals("org.blah.New$Inner", mOuter.renameInternalType("com.pack.Old$Inner")); 99 100 assertEquals("org.blah.New$Other", mInner.renameInternalType("com.pack.Old$Other")); 101 assertEquals("org.blah.New$Other", mInner.renameInternalType("com.pack.Old$Other")); 102 } 103 104 /** 105 * Renames a method descriptor, i.e. applies renameType to all arguments and to the 106 * return value. 107 */ 108 @Test testRenameMethodDesc()109 public void testRenameMethodDesc() { 110 assertEquals("(IDLorg.blah.New;[Lorg.blah.New$Inner;)Lorg.blah.New$Other;", 111 mOuter.renameMethodDesc("(IDLcom.pack.Old;[Lcom.pack.Old$Inner;)Lcom.pack.Old$Other;")); 112 } 113 114 115 116 } 117