blob: ed301788ceefd56027fcbeb4c7912978407c3f3a [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:
* sbandow@bea.com - initial API and implementation
*
*******************************************************************************/
package org.eclipse.jdt.apt.tests.annotations.mirrortest;
import java.io.File;
import java.util.Map;
import org.eclipse.jdt.apt.tests.annotations.BaseProcessor;
import org.eclipse.jdt.apt.tests.annotations.ProcessorTestStatus;
import com.sun.mirror.apt.AnnotationProcessorEnvironment;
import com.sun.mirror.declaration.FieldDeclaration;
import com.sun.mirror.declaration.MethodDeclaration;
import com.sun.mirror.declaration.TypeDeclaration;
@SuppressWarnings("nls")
public class MirrorUtilTestAnnotationProcessor extends BaseProcessor
{
// Environment options test cases
// no-translation cases
public static final int EC_NORMAL = 0;
public static final int EC_NORMALPATH = 1;
public static final int EC_BOGUSCPVAR = 2;
public static final int EC_BADPROJ = 3;
// end of no-translation cases
public static final int EC_NUM_NOTRANSLATIONCASES = 4;
// expected-translation cases
public static final int EC_CPVAR = 4;
public static final int EC_CPVARPATH = 5;
public static final int EC_CPVARFILE = 6;
public static final int EC_PROJ = 7;
public static final int EC_PROJFILE = 8;
public static final int EC_PROJDIRFILE = 9;
private static final String ENVPREFIX = "apt.tests.annotations.mirrortest.";
public static final String[] ENV_KEYS = {
// no-translation
ENVPREFIX + "normal",
ENVPREFIX + "normalPath",
ENVPREFIX + "boguscpvar",
ENVPREFIX + "badProj",
// expected-translation
ENVPREFIX + "cpvar",
ENVPREFIX + "cpvarPath",
ENVPREFIX + "cpvarFile",
ENVPREFIX + "proj",
ENVPREFIX + "projFile",
ENVPREFIX + "projdirFile"
};
public static final String[] ENV_VALUES = {
// no-translation
"normal",
"normal/foo.bar",
"%NOSUCH/VARNAME%",
"%ROOT%/someOtherProject/foo/nonexistent.txt",
// expected-translation
"%ECLIPSE_HOME%",
"%ECLIPSE_HOME%/plugins",
"%ECLIPSE_HOME%/notice.html",
"%ROOT%/org.eclipse.jdt.apt.tests.MirrorUtilTestsProject",
"%ROOT%/org.eclipse.jdt.apt.tests.MirrorUtilTestsProject/.classpath",
"%PROJECT.DIR%/.classpath"
};
public MirrorUtilTestAnnotationProcessor(AnnotationProcessorEnvironment env)
{
super(env);
}
public void process()
{
testHidesOverrides();
testEnvOptions();
}
@SuppressWarnings("unused")
private void testHidesOverrides()
{
//set the type declarations
TypeDeclaration type_EnvTestClass = null;
TypeDeclaration type_A = null;
TypeDeclaration type_B = null;
TypeDeclaration type_C = null;
TypeDeclaration type_D = null;
TypeDeclaration type_I = null;
TypeDeclaration type_J = null;
TypeDeclaration type_K = null;
for(TypeDeclaration type : _env.getTypeDeclarations())
{
if(type.toString().endsWith("EnvTestClass"))
type_EnvTestClass = type;
if(type.toString().endsWith("A"))
type_A = type;
if(type.toString().endsWith("B"))
type_B = type;
if(type.toString().endsWith("C"))
type_C = type;
if(type.toString().endsWith("D"))
type_D = type;
if(type.toString().endsWith("I"))
type_I = type;
if(type.toString().endsWith("J"))
type_J = type;
if(type.toString().endsWith("K"))
type_K = type;
}
//set the method declarations
MethodDeclaration method_A = type_A.getMethods().iterator().next();
MethodDeclaration method_B = type_B.getMethods().iterator().next();
MethodDeclaration method_C = type_C.getMethods().iterator().next();
MethodDeclaration method_D = type_D.getMethods().iterator().next();
MethodDeclaration method_I = type_I.getMethods().iterator().next();
MethodDeclaration method_K = type_K.getMethods().iterator().next();
//set the field declarations
FieldDeclaration field_A = type_A.getFields().iterator().next();
FieldDeclaration field_B = type_B.getFields().iterator().next();
FieldDeclaration field_C = type_C.getFields().iterator().next();
FieldDeclaration field_D = type_D.getFields().iterator().next();
FieldDeclaration field_I = type_I.getFields().iterator().next();
FieldDeclaration field_K = type_K.getFields().iterator().next();
//overrides positive tests
ProcessorTestStatus.assertTrue("Expect B.method() to override A.method()", _env.getDeclarationUtils().overrides(method_B, method_A));
ProcessorTestStatus.assertTrue("Expect K.method() to override I.method()", _env.getDeclarationUtils().overrides(method_K, method_I));
//overrides negative tests
ProcessorTestStatus.assertTrue("Expect B.method() to not override C.method()", !_env.getDeclarationUtils().overrides(method_B, method_C));
ProcessorTestStatus.assertTrue("Expect D.method(String s) to not override A.method()", !_env.getDeclarationUtils().overrides(method_D, method_A));
//hides positive tests
ProcessorTestStatus.assertTrue("Expect B.field to hide A.field", _env.getDeclarationUtils().hides(field_B, field_A));
ProcessorTestStatus.assertTrue("Expect D.field to hide A.field", _env.getDeclarationUtils().hides(field_D, field_A));
ProcessorTestStatus.assertTrue("Expect K.field to hide I.field", _env.getDeclarationUtils().hides(field_K, field_I));
//hides negative test
ProcessorTestStatus.assertTrue("Expect B.field to not hide C.field", !_env.getDeclarationUtils().hides(field_B, field_C));
}
private void testEnvOptions() {
Map<String, String> options = _env.getOptions();
// no-translation cases should be unchanged
for (int i = 0; i < EC_NUM_NOTRANSLATIONCASES; ++i) {
ProcessorTestStatus.assertEquals(ENV_KEYS[i], options.get(ENV_KEYS[i]), ENV_VALUES[i]);
}
// translation cases should be changed
for (int i = EC_NUM_NOTRANSLATIONCASES; i < ENV_KEYS.length; ++i) {
ProcessorTestStatus.assertTrue(ENV_KEYS[i], !ENV_VALUES[i].equals(options.get(ENV_KEYS[i])) );
}
// the files should exist at the specified absolute location
String name = options.get(ENV_KEYS[EC_CPVARFILE]);
File file;
if (name == null) {
ProcessorTestStatus.fail(ENV_KEYS[EC_CPVARFILE] + " was not in options map");
} else {
file = new File(name);
ProcessorTestStatus.assertTrue(ENV_KEYS[EC_CPVARFILE] + " was not found", file != null && file.exists());
}
name = options.get(ENV_KEYS[EC_PROJFILE]);
if (name == null) {
ProcessorTestStatus.fail(ENV_KEYS[EC_PROJFILE] + " was not in options map");
} else {
file = new File(name);
ProcessorTestStatus.assertTrue(ENV_KEYS[EC_PROJFILE] + " was not found", file != null && file.exists());
}
name = options.get(ENV_KEYS[EC_PROJDIRFILE]);
if (name == null) {
ProcessorTestStatus.fail(ENV_KEYS[EC_PROJDIRFILE] + " was not in options map");
} else {
file = new File(name);
ProcessorTestStatus.assertTrue(ENV_KEYS[EC_PROJDIRFILE] + " was not found", file != null && file.exists());
}
}
}