1/*
2 * Copyright (C) 2008 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
18package com.android.tools.layoutlib.create;
19
20import static org.junit.Assert.*;
21
22import org.junit.After;
23import org.junit.Before;
24import org.junit.Test;
25
26/**
27 *
28 */
29public class RenameClassAdapterTest {
30
31    private RenameClassAdapter mOuter;
32    private RenameClassAdapter mInner;
33
34    @Before
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
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
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
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
95    public void testRenameInternalType() {
96        // a descriptor is not left untouched
97        assertEquals("Lorg.blah.New;", mOuter.renameInternalType("Lcom.pack.Old;"));
98        assertEquals("Lorg.blah.New$Inner;", mOuter.renameInternalType("Lcom.pack.Old$Inner;"));
99
100        // an actual FQCN
101        assertEquals("org.blah.New", mOuter.renameInternalType("com.pack.Old"));
102        assertEquals("org.blah.New$Inner", mOuter.renameInternalType("com.pack.Old$Inner"));
103
104        assertEquals("org.blah.New$Other", mInner.renameInternalType("com.pack.Old$Other"));
105        assertEquals("org.blah.New$Other", mInner.renameInternalType("com.pack.Old$Other"));
106    }
107
108    /**
109     * Renames a method descriptor, i.e. applies renameType to all arguments and to the
110     * return value.
111     */
112    @Test
113    public void testRenameMethodDesc() {
114        assertEquals("(IDLorg.blah.New;[Lorg.blah.New$Inner;)Lorg.blah.New$Other;",
115               mOuter.renameMethodDesc("(IDLcom.pack.Old;[Lcom.pack.Old$Inner;)Lcom.pack.Old$Other;"));
116    }
117
118
119
120}
121