blob: 1d4d165ce622daa69f2d98191e3844df8d8c3929 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.jack.inner;
import com.android.jack.TestTools;
import com.android.jack.test.category.RedundantTests;
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.comparator.ComparatorDex;
import com.android.jack.test.helper.CheckDexStructureTestHelper;
import com.android.jack.test.helper.FileChecker;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.helper.SourceToDexComparisonTestHelper;
import com.android.jack.test.runtime.RuntimeTest;
import com.android.jack.test.runtime.RuntimeTestInfo;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.IToolchain;
import junit.framework.Assert;
import org.jf.dexlib.CodeItem;
import org.jf.dexlib.DexFile;
import org.jf.dexlib.Item;
import org.jf.dexlib.MethodIdItem;
import org.jf.dexlib.Code.Instruction;
import org.jf.dexlib.Code.Format.Instruction35c;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.io.File;
import javax.annotation.Nonnull;
public class InnerTests extends RuntimeTest {
private RuntimeTestInfo TEST001 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test001"),
"com.android.jack.inner.test001.dx.Tests");
private RuntimeTestInfo TEST002 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test002"),
"com.android.jack.inner.test002.dx.Tests");
private RuntimeTestInfo TEST003 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test003"),
"com.android.jack.inner.test003.dx.Tests");
private RuntimeTestInfo TEST004 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test004"),
"com.android.jack.inner.test004.dx.Tests");
private RuntimeTestInfo TEST005 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test005"),
"com.android.jack.inner.test005.dx.Tests");
private RuntimeTestInfo TEST006 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test006"),
"com.android.jack.inner.test006.dx.Tests");
private RuntimeTestInfo TEST007 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test007"),
"com.android.jack.inner.test007.dx.Tests");
private RuntimeTestInfo TEST008 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test008"),
"com.android.jack.inner.test008.dx.Tests");
private RuntimeTestInfo TEST009 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test009"),
"com.android.jack.inner.test009.dx.Tests");
private RuntimeTestInfo TEST010 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test010"),
"com.android.jack.inner.test010.dx.Tests");
private RuntimeTestInfo TEST011 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test011"),
"com.android.jack.inner.test011.dx.Tests");
private RuntimeTestInfo TEST012 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test012"),
"com.android.jack.inner.test012.dx.Tests");
private RuntimeTestInfo TEST013 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test013"),
"com.android.jack.inner.test013.dx.Tests");
private RuntimeTestInfo TEST014 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test014"),
"com.android.jack.inner.test014.dx.Tests");
private RuntimeTestInfo TEST015 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test015"),
"com.android.jack.inner.test015.dx.Tests");
private RuntimeTestInfo TEST016 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test016"),
"com.android.jack.inner.test016.dx.Tests");
private RuntimeTestInfo TEST017 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test017"),
"com.android.jack.inner.test017.dx.Tests");
private RuntimeTestInfo TEST018 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test018"),
"com.android.jack.inner.test018.dx.Tests");
private RuntimeTestInfo TEST019 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test019"),
"com.android.jack.inner.test019.dx.Tests");
private RuntimeTestInfo TEST020 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test020"),
"com.android.jack.inner.test020.dx.Tests");
private RuntimeTestInfo TEST021 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test021"),
"com.android.jack.inner.test021.dx.Tests");
private RuntimeTestInfo TEST022 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test022"),
"com.android.jack.inner.test022.dx.Tests");
private RuntimeTestInfo TEST023 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test023"),
"com.android.jack.inner.test023.dx.Tests");
private RuntimeTestInfo TEST024 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test024"),
"com.android.jack.inner.test024.dx.Tests");
private RuntimeTestInfo TEST026 =
new RuntimeTestInfo(AbstractTestTools.getTestRootDir("com.android.jack.inner.test026"),
"com.android.jack.inner.test026.dx.Tests").addFileChecker(new FileChecker() {
@Override
public void check(@Nonnull File file) throws Exception {
// Check that the receiver type of method call into an accessor is correctly typed.
DexFile dexFile = new DexFile(file);
CodeItem ci =
TestTools.getEncodedMethod(dexFile, "Lcom/android/jack/inner/test026/jack/D;",
"-wrap1", "(Lcom/android/jack/inner/test026/jack/D;)I").codeItem;
Assert.assertNotNull(ci);
Instruction firstInst = ci.getInstructions()[0];
Assert.assertTrue(firstInst instanceof Instruction35c);
Item<?> referencedItem = ((Instruction35c) firstInst).getReferencedItem();
Assert.assertTrue(referencedItem instanceof MethodIdItem);
Assert.assertEquals("Lcom/android/jack/inner/test026/jack/pkg/C;",
((MethodIdItem) referencedItem).getContainingClass().getTypeDescriptor());
}
});
private RuntimeTestInfo TEST027 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test027"),
"com.android.jack.inner.test027.dx.Tests");
private RuntimeTestInfo TEST030 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.inner.test030"),
"com.android.jack.inner.test030.dx.Tests");
@Test
@Category(RuntimeRegressionTest.class)
public void test001() throws Exception {
new RuntimeTestHelper(TEST001).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test002() throws Exception {
new RuntimeTestHelper(TEST002).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test003() throws Exception {
new RuntimeTestHelper(TEST003).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test004() throws Exception {
new RuntimeTestHelper(TEST004).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test005() throws Exception {
new RuntimeTestHelper(TEST005).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test006() throws Exception {
new RuntimeTestHelper(TEST006).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test007() throws Exception {
new RuntimeTestHelper(TEST007).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test008() throws Exception {
new RuntimeTestHelper(TEST008).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test009() throws Exception {
new RuntimeTestHelper(TEST009).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test010() throws Exception {
new RuntimeTestHelper(TEST010).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test011() throws Exception {
new RuntimeTestHelper(TEST011).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test012() throws Exception {
new RuntimeTestHelper(TEST012).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test013() throws Exception {
new RuntimeTestHelper(TEST013).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test014() throws Exception {
new RuntimeTestHelper(TEST014).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test015() throws Exception {
new RuntimeTestHelper(TEST015).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test016() throws Exception {
new RuntimeTestHelper(TEST016).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test017() throws Exception {
new RuntimeTestHelper(TEST017).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test018() throws Exception {
new RuntimeTestHelper(TEST018).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test019() throws Exception {
new RuntimeTestHelper(TEST019).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test020() throws Exception {
new RuntimeTestHelper(TEST020).compileAndRunTest(true);
}
@Test
@Category(RuntimeRegressionTest.class)
public void test021() throws Exception {
new RuntimeTestHelper(TEST021).compileAndRunTest(true);
}
@Test
@Category(RuntimeRegressionTest.class)
public void test022() throws Exception {
new RuntimeTestHelper(TEST022).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test023() throws Exception {
new RuntimeTestHelper(TEST023).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test024() throws Exception {
new RuntimeTestHelper(TEST024).compileAndRunTest();
}
@Test
public void test025() throws Exception {
IToolchain toolchain = AbstractTestTools.getCandidateToolchain();
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(
AbstractTestTools.createTempDir(),
/* zipFile = */ false,
AbstractTestTools.getTestRootDir("com.android.jack.inner.test025.jack"));
}
@Test
@Category(RuntimeRegressionTest.class)
public void test026() throws Exception {
new RuntimeTestHelper(TEST026).compileAndRunTest();
}
@Test
@Category(RuntimeRegressionTest.class)
public void test027() throws Exception {
new RuntimeTestHelper(TEST027).compileAndRunTest();
}
@Test
public void testCheckStructure20() throws Exception {
//TODO: find out why debug info check fails
checkStructure("test020");
}
@Test
@Category(RedundantTests.class)
public void testCompile21() throws Exception {
checkStructure("test021");
}
@Test
public void test030() throws Exception {
new RuntimeTestHelper(TEST030).compileAndRunTest();
}
private void checkStructure(@Nonnull String test) throws Exception {
SourceToDexComparisonTestHelper helper = new CheckDexStructureTestHelper(
AbstractTestTools.getTestRootDir("com.android.jack.inner." + test + ".jack"));
helper.runTest(new ComparatorDex(helper.getReferenceDex(), helper.getCandidateDex()));
}
@Override
protected void fillRtTestInfos() {
rtTestInfos.add(TEST001);
rtTestInfos.add(TEST002);
rtTestInfos.add(TEST003);
rtTestInfos.add(TEST004);
rtTestInfos.add(TEST005);
rtTestInfos.add(TEST006);
rtTestInfos.add(TEST007);
rtTestInfos.add(TEST008);
rtTestInfos.add(TEST009);
rtTestInfos.add(TEST010);
rtTestInfos.add(TEST011);
rtTestInfos.add(TEST012);
rtTestInfos.add(TEST013);
rtTestInfos.add(TEST014);
rtTestInfos.add(TEST015);
rtTestInfos.add(TEST016);
rtTestInfos.add(TEST017);
rtTestInfos.add(TEST018);
rtTestInfos.add(TEST019);
rtTestInfos.add(TEST020);
rtTestInfos.add(TEST021);
rtTestInfos.add(TEST022);
rtTestInfos.add(TEST023);
rtTestInfos.add(TEST024);
rtTestInfos.add(TEST026);
rtTestInfos.add(TEST027);
rtTestInfos.add(TEST030);
}
}