blob: b1f7bbf5f7246799595776cc9e18ec86b207b4d7 [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:
* wharley - 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.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.apt.core.internal.AptPlugin;
import org.eclipse.jdt.apt.core.util.AptConfig;
import org.eclipse.jdt.apt.core.util.IFactoryPath;
import org.eclipse.jdt.apt.tests.external.annotations.classloader.ColorAnnotationProcessor;
import org.eclipse.jdt.apt.tests.external.annotations.classloader.ColorTestCodeExample;
import org.eclipse.jdt.apt.tests.external.annotations.loadertest.LoaderTestAnnotationProcessor;
import org.eclipse.jdt.apt.tests.external.annotations.loadertest.LoaderTestCodeExample;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
/**
*
*/
public class FactoryLoaderTests extends APTTestBase {
private File _extJar; // external annotation jar
private IPath _extVarJar; // external annotation jar, as a classpath-var-relative path
private IPath _projectPath; // initialized in setUp(), cleared in tearDown()
private final static String TEMPJARDIR_CPVAR = "FACTORYLOADERTEST_TEMP"; //$NON-NLS-1$
public FactoryLoaderTests(String name)
{
super( name );
}
public static Test suite() {
return new TestSuite( FactoryLoaderTests.class );
}
public void setUp() throws Exception {
super.setUp();
_projectPath = env.getProject( getProjectName() ).getFullPath();
_extJar = TestUtil.createAndAddExternalAnnotationJar(
env.getJavaProject( _projectPath ));
// Create a classpath variable for the same jar file, so we can
// refer to it that way.
File canonicalJar = _extJar.getCanonicalFile();
IPath jarDir = new Path( canonicalJar.getParent() );
String extJarName = canonicalJar.getName();
IPath varPath = new Path( TEMPJARDIR_CPVAR );
_extVarJar = varPath.append( extJarName );
JavaCore.setClasspathVariable( TEMPJARDIR_CPVAR, jarDir, null );
IPath srcRoot = getSourcePath();
String code = LoaderTestCodeExample.CODE;
env.addClass(srcRoot, LoaderTestCodeExample.CODE_PACKAGE, LoaderTestCodeExample.CODE_CLASS_NAME, code);
code = ColorTestCodeExample.CODE;
env.addClass(srcRoot, ColorTestCodeExample.CODE_PACKAGE, ColorTestCodeExample.CODE_CLASS_NAME, code);
}
public void testExternalJarLoader() throws Exception {
LoaderTestAnnotationProcessor.clearLoaded();
IProject project = env.getProject( getProjectName() );
fullBuild( project.getFullPath() );
expectingNoProblems();
assertFalse(LoaderTestAnnotationProcessor.isLoaded());
IJavaProject jproj = env.getJavaProject( getProjectName() );
IFactoryPath ifp = AptConfig.getFactoryPath(jproj);
// add _extJar to the factory list as an external jar, and rebuild.
ifp.addExternalJar(_extJar);
AptConfig.setFactoryPath(jproj, ifp);
// rebuild and verify that the processor was loaded
LoaderTestAnnotationProcessor.clearLoaded();
fullBuild( project.getFullPath() );
expectingNoProblems();
assertTrue(LoaderTestAnnotationProcessor.isLoaded());
// Verify that we were able to run the ColorAnnotationProcessor successfully
assertTrue(ColorAnnotationProcessor.wasSuccessful());
// restore to the original
ifp.removeExternalJar(_extJar);
AptConfig.setFactoryPath(jproj, ifp);
// rebuild and verify that the processor was not loaded.
LoaderTestAnnotationProcessor.clearLoaded();
fullBuild( project.getFullPath() );
expectingNoProblems();
assertFalse(LoaderTestAnnotationProcessor.isLoaded());
// add _extJar to the factory list as a class-path-relative jar, and rebuild.
ifp.addVarJar(_extVarJar);
AptConfig.setFactoryPath(jproj, ifp);
// rebuild and verify that the processor was loaded
LoaderTestAnnotationProcessor.clearLoaded();
fullBuild( project.getFullPath() );
expectingNoProblems();
assertTrue(LoaderTestAnnotationProcessor.isLoaded());
// restore to the original
ifp.removeVarJar(_extVarJar);
AptConfig.setFactoryPath(jproj, ifp);
// rebuild and verify that the processor was not loaded.
LoaderTestAnnotationProcessor.clearLoaded();
fullBuild( project.getFullPath() );
expectingNoProblems();
assertFalse(LoaderTestAnnotationProcessor.isLoaded());
}
// Test what happens when the factory path contains a jar file that can't be found.
public void testNonexistentEntry() throws Exception {
LoaderTestAnnotationProcessor.clearLoaded();
IProject project = env.getProject( getProjectName() );
fullBuild( project.getFullPath() );
expectingNoProblems();
assertFalse(LoaderTestAnnotationProcessor.isLoaded());
IJavaProject jproj = env.getJavaProject( getProjectName() );
IFactoryPath ifp = AptConfig.getFactoryPath(jproj);
// add bogus entry to factory list, and rebuild.
File bogusJar = new File("bogusJar.jar"); // assumed to not exist
ifp.addExternalJar(bogusJar);
// verify that a problem marker was added.
AptConfig.setFactoryPath(jproj, ifp);
fullBuild( project.getFullPath() );
IMarker[] markers = getAllAPTMarkers(_projectPath);
assertEquals(1, markers.length);
assertEquals(AptPlugin.APT_LOADER_PROBLEM_MARKER, markers[0].getType());
String message = markers[0].getAttribute(IMarker.MESSAGE, "");
assertTrue(message.contains("bogusJar.jar"));
// remove bogus entry, add _extJar to the factory list as an external jar, and rebuild.
ifp.removeExternalJar(bogusJar);
ifp.addExternalJar(_extJar);
AptConfig.setFactoryPath(jproj, ifp);
// rebuild and verify that the processor was loaded and the problems were removed.
LoaderTestAnnotationProcessor.clearLoaded();
fullBuild( project.getFullPath() );
expectingNoProblems();
assertTrue(LoaderTestAnnotationProcessor.isLoaded());
// Verify that we were able to run the ColorAnnotationProcessor successfully
assertTrue(ColorAnnotationProcessor.wasSuccessful());
// restore to the original
AptConfig.setFactoryPath(jproj, ifp);
}
/* (non-Javadoc)
* @see org.eclipse.jdt.core.tests.builder.Tests#tearDown()
*/
@Override
protected void tearDown() throws Exception {
JavaCore.removeClasspathVariable( TEMPJARDIR_CPVAR, null );
_extJar = null;
_extVarJar = null;
_projectPath = null;
super.tearDown();
}
}