19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.tools.layoutlib.create; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport static org.junit.Assert.assertArrayEquals; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.junit.After; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.junit.Before; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.junit.Test; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.URL; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Set; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unit tests for some methods of {@link AsmGenerator}. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AsmGeneratorTest { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MockLog mLog; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayList<String> mOsJarPath; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mOsDestJar; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private File mTempFile; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Before 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setUp() throws Exception { 45bc101806249eb883f89c4a770a8c27f9ac315837Raphael mLog = new MockLog(); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project URL url = this.getClass().getClassLoader().getResource("data/mock_android.jar"); 47bc101806249eb883f89c4a770a8c27f9ac315837Raphael 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOsJarPath = new ArrayList<String>(); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOsJarPath.add(url.getFile()); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTempFile = File.createTempFile("mock", "jar"); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOsDestJar = mTempFile.getAbsolutePath(); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTempFile.deleteOnExit(); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @After 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void tearDown() throws Exception { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTempFile != null) { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTempFile.delete(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTempFile = null; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Test 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testClassRenaming() throws IOException, LogAbortException { 66bc101806249eb883f89c4a770a8c27f9ac315837Raphael 67bc101806249eb883f89c4a770a8c27f9ac315837Raphael ICreateInfo ci = new ICreateInfo() { 6846d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet @Override 69bc101806249eb883f89c4a770a8c27f9ac315837Raphael public Class<?>[] getInjectedClasses() { 70bc101806249eb883f89c4a770a8c27f9ac315837Raphael // classes to inject in the final JAR 71bc101806249eb883f89c4a770a8c27f9ac315837Raphael return new Class<?>[0]; 72bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 73bc101806249eb883f89c4a770a8c27f9ac315837Raphael 7446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet @Override 75bc101806249eb883f89c4a770a8c27f9ac315837Raphael public String[] getDelegateMethods() { 76bc101806249eb883f89c4a770a8c27f9ac315837Raphael return new String[0]; 77bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 78bc101806249eb883f89c4a770a8c27f9ac315837Raphael 7946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet @Override 80bc101806249eb883f89c4a770a8c27f9ac315837Raphael public String[] getDelegateClassNatives() { 81bc101806249eb883f89c4a770a8c27f9ac315837Raphael return new String[0]; 82bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 83bc101806249eb883f89c4a770a8c27f9ac315837Raphael 8446d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet @Override 85bc101806249eb883f89c4a770a8c27f9ac315837Raphael public String[] getOverriddenMethods() { 86bc101806249eb883f89c4a770a8c27f9ac315837Raphael // methods to force override 87bc101806249eb883f89c4a770a8c27f9ac315837Raphael return new String[0]; 88bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 89bc101806249eb883f89c4a770a8c27f9ac315837Raphael 9046d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet @Override 91bc101806249eb883f89c4a770a8c27f9ac315837Raphael public String[] getRenamedClasses() { 92bc101806249eb883f89c4a770a8c27f9ac315837Raphael // classes to rename (so that we can replace them) 93bc101806249eb883f89c4a770a8c27f9ac315837Raphael return new String[] { 94bc101806249eb883f89c4a770a8c27f9ac315837Raphael "mock_android.view.View", "mock_android.view._Original_View", 95bc101806249eb883f89c4a770a8c27f9ac315837Raphael "not.an.actual.ClassName", "anoter.fake.NewClassName", 96bc101806249eb883f89c4a770a8c27f9ac315837Raphael }; 97bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 98bc101806249eb883f89c4a770a8c27f9ac315837Raphael 9946d43ccfd8cef75b4315828073c094cf1efb05ffXavier Ducrohet @Override 100bc101806249eb883f89c4a770a8c27f9ac315837Raphael public String[] getDeleteReturns() { 101bc101806249eb883f89c4a770a8c27f9ac315837Raphael // methods deleted from their return type. 102bc101806249eb883f89c4a770a8c27f9ac315837Raphael return new String[0]; 103bc101806249eb883f89c4a770a8c27f9ac315837Raphael } 104bc101806249eb883f89c4a770a8c27f9ac315837Raphael }; 105bc101806249eb883f89c4a770a8c27f9ac315837Raphael 106bc101806249eb883f89c4a770a8c27f9ac315837Raphael AsmGenerator agen = new AsmGenerator(mLog, mOsDestJar, ci); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsmAnalyzer aa = new AsmAnalyzer(mLog, mOsJarPath, agen, 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, // derived from 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new String[] { // include classes 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "**" 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project aa.analyze(); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project agen.generate(); 115bc101806249eb883f89c4a770a8c27f9ac315837Raphael 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Set<String> notRenamed = agen.getClassesNotRenamed(); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertArrayEquals(new String[] { "not/an/actual/ClassName" }, notRenamed.toArray()); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 120