blob: 708727c621b4e078a68f25816ddeefe0e50aa434 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 BEA Systems, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* tyeung@bea.com - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.apt.tests;
import java.io.File;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.apt.core.internal.util.FactoryContainer;
import org.eclipse.jdt.apt.core.internal.util.FactoryPath;
import org.eclipse.jdt.apt.core.internal.util.FactoryPathUtil;
import org.eclipse.jdt.apt.core.util.AptConfig;
import org.eclipse.jdt.core.IJavaProject;
public class MixedModeTesting extends APTTestBase{
private File _extJar; // external annotation jar
public MixedModeTesting(String name){
super(name);
}
public static Test suite()
{
return new TestSuite( MixedModeTesting.class );
}
public void setUp() throws Exception
{
super.setUp();
IJavaProject javaProj = env.getJavaProject( getProjectName() );
_extJar = TestUtil.createAndAddExternalAnnotationJar(javaProj);
FactoryPath fp = (FactoryPath)AptConfig.getFactoryPath(javaProj);
FactoryContainer fc = FactoryPathUtil.newExtJarFactoryContainer(_extJar);
fp.addEntryToHead(fc, /*isEnabled=*/ true, /*runInBatchMode=*/ true);
AptConfig.setFactoryPath(javaProj, fp);
}
/**
* Only one batch processor is involved
* This test the processor environment and that it returns the correct
* set of declared types.
*/
public void testSimpleBatchProcessing() throws Exception
{
IProject project = env.getProject( getProjectName() );
IPath srcRoot = getSourcePath();
String codeA = "package p1;\n"
+ "\n import org.eclipse.jdt.apt.tests.external.annotations.batch.*;"
+ "\n@Batch\n"
+ "public class A {}\n";
env.addClass( srcRoot, "p1", "A", codeA );
String codeB = "package p1;\n"
+ "\n@Deprecated\n"
+ "public class B {}\n";
env.addClass( srcRoot, "p1", "B", codeB );
String codeC = "package p1;\n"
+ "\n import org.eclipse.jdt.apt.tests.external.annotations.batch.*;"
+ "\n@Batch\n"
+ "public class C {}\n";
env.addClass( srcRoot, "p1", "C", codeC );
// This one doesn't have annotations.
String codeD = "package p1; public class D{}";
env.addClass( srcRoot, "p1", "D", codeD );
fullBuild( project.getFullPath() );
expectingNoProblems();
expectingMarkers(new String[]{"CompletedSuccessfully"});
}
/**
* What this tests test.
* This makes sure the internal apt rounding occurs correctly in batch mode.
* @throws CoreException
*/
public void testAPTRoundingInMixedMode0()
{
IProject project = env.getProject( getProjectName() );
IPath srcRoot = getSourcePath();
String codeX = "package p1;\n"
+ "\n import org.eclipse.jdt.apt.tests.annotations.aptrounding.*;"
+ "\n@GenBean\n"
+ "public class X {}\n";
env.addClass( srcRoot, "p1", "X", codeX );
String codeY = "package p1;\n"
+ "\n import org.eclipse.jdt.apt.tests.annotations.aptrounding.*;"
+ "public class Y { @GenBean2 test.Bean _bean = null; }\n";
env.addClass( srcRoot, "p1", "Y", codeY );
String codeA = "package p1;\n"
+ "\n import org.eclipse.jdt.apt.tests.external.annotations.batch.*;"
+ "\n@Batch\n"
+ "public class A {}\n";
env.addClass( srcRoot, "p1", "A", codeA );
String codeB = "package p1;\n"
+ "\n@Deprecated\n"
+ "public class B {}\n";
env.addClass( srcRoot, "p1", "B", codeB );
String codeC = "package p1;\n"
+ "\n import org.eclipse.jdt.apt.tests.external.annotations.batch.*;"
+ "\n@Batch\n"
+ "public class C {}\n";
env.addClass( srcRoot, "p1", "C", codeC );
// This one doesn't have annotations.
String codeD = "package p1; public class D{}";
env.addClass( srcRoot, "p1", "D", codeD );
fullBuild( project.getFullPath() );
expectingMarkers(new String[]{"CompletedSuccessfully", "Called 2 times."});
expectingNoProblems();
// Now run it again to verify that the classloader was successfully bounced
fullBuild( project.getFullPath() );
expectingMarkers(new String[]{"CompletedSuccessfully", "Called 2 times."});
expectingNoProblems();
}
/*
* What this test tests.
* There should be a total of 3 rounds.
* -The first round starts because of the "BatchGen" annotations.
* This round creates the gen.Class0 type
* -The second round starts because of a batch processor being dispatched in a previous round
* and a new type is generated.
* This round creates the gen.Class1 type
* -The third round starts for the exact same reason as round 2.
* This is a no-op round.
*/
public void testAPTRoundingInMixedMode1()
{
IProject project = env.getProject( getProjectName() );
IPath srcRoot = getSourcePath();
String codeA = "package p1;\n"
+ "\n import org.eclipse.jdt.apt.tests.external.annotations.batch.*;"
+ "\n import gen.*;"
+ "\n@BatchGen\n"
+ "public class A {"
+ " Class0 clazz0;\n"
+ " Class1 clazz1;\n"
+ "}\n";
env.addClass( srcRoot, "p1", "A", codeA );
// drop something to possibily fire off an incremental build
String codeB = "package p1;\n"
+ "public class B {}\n";
env.addClass( srcRoot, "p1", "B", codeB );
fullBuild( project.getFullPath() );
expectingNoProblems();
expectingMarkers(new String[]{"Called the third time."});
}
}