blob: d24bc9548d870329c0580ba51b13a8e2ad275985 [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.annotation;
import com.android.jack.Options;
import com.android.jack.TestTools;
import com.android.jack.ir.ast.JDefinedAnnotationType;
import com.android.jack.ir.ast.JDefinedEnum;
import com.android.jack.ir.ast.JEnumLiteral;
import com.android.jack.ir.ast.JSession;
import com.android.jack.ir.ast.JVisitor;
import com.android.jack.test.category.RuntimeRegressionTest;
import com.android.jack.test.category.SlowTests;
import com.android.jack.test.helper.CheckDexStructureTestHelper;
import com.android.jack.test.helper.RuntimeTestHelper;
import com.android.jack.test.junit.KnownIssue;
import com.android.jack.test.junit.Runtime;
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 com.android.jack.test.toolchain.JackApiToolchainBase;
import com.android.jack.test.toolchain.JackApiV01;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.test.toolchain.JillBasedToolchain;
import com.android.jack.test.toolchain.Toolchain.SourceLevel;
import com.android.sched.util.RunnableHooks;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.io.File;
import java.util.Collections;
public class AnnotationTests extends RuntimeTest {
private RuntimeTestInfo TEST001 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test001"),
"com.android.jack.annotation.test001.dx.Tests");
private RuntimeTestInfo TEST002 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test002"),
"com.android.jack.annotation.test002.dx.Tests");
private RuntimeTestInfo TEST003 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test003"),
"com.android.jack.annotation.test003.dx.Tests");
private RuntimeTestInfo TEST005 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test005"),
"com.android.jack.annotation.test005.dx.Tests");
private RuntimeTestInfo TEST006 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test006"),
"com.android.jack.annotation.test006.dx.Tests");
private RuntimeTestInfo TEST007 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test007"),
"com.android.jack.annotation.test007.dx.Tests");
private RuntimeTestInfo TEST008 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test008"),
"com.android.jack.annotation.test008.dx.Tests");
private RuntimeTestInfo TEST009 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test009"),
"com.android.jack.annotation.test009.dx.Tests");
private RuntimeTestInfo TEST018 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test018"),
"com.android.jack.annotation.test018.dx.Tests");
private RuntimeTestInfo TEST019 = new RuntimeTestInfo(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test019"),
"com.android.jack.annotation.test019.jack.Tests");
private static final File ANNOTATION001_PATH =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test001.jack");
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test001() throws Exception {
new RuntimeTestHelper(TEST001).compileAndRunTest(/* checkStructure = */ true);
}
@Test
public void test001_2() throws Exception {
IToolchain toolchain = AbstractTestTools.getCandidateToolchain();
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(
AbstractTestTools.createTempDir(),
/* zipFile = */ false,
new File[] {
new File(ANNOTATION001_PATH, "Annotation8.java"),
new File(ANNOTATION001_PATH, "Annotated2.java")});
}
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test002() throws Exception {
new RuntimeTestHelper(TEST002).compileAndRunTest(/* checkStructure = */ true);
}
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test003() throws Exception {
new RuntimeTestHelper(TEST003).compileAndRunTest(/* checkStructure = */ true);
}
@Test
public void test003_1() throws Exception {
CheckDexStructureTestHelper helper = new CheckDexStructureTestHelper(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test003.jack"));
helper.compare();
}
@Test
public void test004() throws Exception {
File testFolder = AbstractTestTools.getTestRootDir("com.android.jack.annotation.test004");
IToolchain toolchain = AbstractTestTools.getCandidateToolchain();
toolchain.addToClasspath(toolchain.getDefaultBootClasspath()).srcToExe(
AbstractTestTools.createTempDir(),
/* zipFile = */false, testFolder);
}
@Test
public void test004_1() throws Exception {
CheckDexStructureTestHelper helper = new CheckDexStructureTestHelper(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test004.jack"));
helper.compare();
}
@Test
@Runtime
// Annotation on package are not supported in dex format: http://code.google.com/p/android/issues/detail?id=16149
@Category(RuntimeRegressionTest.class)
@KnownIssue
public void test005() throws Exception {
new RuntimeTestHelper(TEST005).compileAndRunTest();
}
@Test
public void test005_1() throws Exception {
CheckDexStructureTestHelper helper = new CheckDexStructureTestHelper(
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test005.jack"));
helper.compare();
}
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test006() throws Exception {
new RuntimeTestHelper(TEST006).compileAndRunTest(/* checkStructure = */ true);
}
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test007() throws Exception {
new RuntimeTestHelper(TEST007).compileAndRunTest(/* checkStructure = */ true);
}
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test008() throws Exception {
new RuntimeTestHelper(TEST008).compileAndRunTest(/* checkStructure = */ true);
}
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test009() throws Exception {
new RuntimeTestHelper(TEST009).compileAndRunTest(/* checkStructure = */ true);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
public void test010() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test010.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
public void test011() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test011.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
public void test012() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test012.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
public void test013() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test013.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
public void test014() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test014.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
@KnownIssue
public void test015() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test015.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
@KnownIssue(candidate=JillBasedToolchain.class)
public void test015_jill() throws Exception {
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JillBasedToolchain.class);
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test015.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
public void test016() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test016.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* Check there is no phantom field created while loading the library of annotation and enum.
*/
@Test
@Category(SlowTests.class)
@KnownIssue
public void test016_2steps() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File jackOutFile = AbstractTestTools.createTempFile("annotationWithEnum16", ".jack");
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test016.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(jackOutFile, /* zipFile = */ false, testSourceDir);
File dexOutDir = AbstractTestTools.createTempDir();
RunnableHooks hooks = new RunnableHooks();
try {
Options options = new Options();
options.setImportedLibraries(Collections.singletonList(jackOutFile));
options.setOutputDir(dexOutDir);
JSession session = TestTools.buildSession(options, hooks);
JDefinedAnnotationType annnotationWithEnum =
(JDefinedAnnotationType) session.getLookup().getType(
"Lcom/android/jack/annotation/test016/jack/AnnotationWithEnum;");
annnotationWithEnum.getMethods();
JDefinedEnum annotatedEnum =
(JDefinedEnum) session.getLookup().getType(
"Lcom/android/jack/annotation/test016/jack/AnnotatedEnum;");
JVisitor phantomChecker = new JVisitor() {
@Override
public void endVisit(JEnumLiteral enumLiteral) {
Assert.assertTrue(enumLiteral.getFieldId().getField() != null);
}
};
phantomChecker.accept(annnotationWithEnum);
phantomChecker.accept(annotatedEnum);
} finally {
hooks.runHooks();
}
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
@KnownIssue
public void test017() throws Exception {
// JackApiToolchainBase required for ordered-filter
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
toolchain.addProperty(Options.INPUT_FILTER.getName(), "ordered-filter");
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test017.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
/**
* About annotation with enum and its usage.
*/
@Test
@Category(SlowTests.class)
@KnownIssue(candidate=JillBasedToolchain.class)
public void test017_jill() throws Exception {
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JillBasedToolchain.class);
File dexOutDir = AbstractTestTools.createTempDir();
File testSourceDir =
AbstractTestTools.getTestRootDir("com.android.jack.annotation.test017.jack");
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToExe(dexOutDir, /* zipFile = */ false, testSourceDir);
}
@Test
@Runtime
@Category(RuntimeRegressionTest.class)
public void test018() throws Exception {
new RuntimeTestHelper(TEST018).compileAndRunTest();
}
/**
* Test about type annotations and type parameter annotations.
*/
@Test
@Runtime
@KnownIssue
@Category(RuntimeRegressionTest.class)
public void test019() throws Exception {
new RuntimeTestHelper(TEST019)
.setSourceLevel(SourceLevel.JAVA_8)
.addIgnoredCandidateToolchain(JackApiV01.class)
.compileAndRunTest();
}
@Override
protected void fillRtTestInfos() {
rtTestInfos.add(TEST001);
rtTestInfos.add(TEST002);
rtTestInfos.add(TEST003);
// rtTestInfos.add(TEST005); // KnownIssue
rtTestInfos.add(TEST006);
rtTestInfos.add(TEST007);
rtTestInfos.add(TEST008);
rtTestInfos.add(TEST009);
rtTestInfos.add(TEST018);
// rtTestInfos.add(TEST019); // KnownIssue
}
}