blob: 0d532e2a2e97dc6e21dd15190f00001b94110b84 [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 junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.apt.tests.annotations.ProcessorTestStatus;
import org.eclipse.jdt.core.tests.util.Util;
public class AnnotationValueConversionTests extends APTTestBase
{
private int counter = 0;
private String projectName = null;
public AnnotationValueConversionTests(final String name) {
super( name );
}
public static Test suite() {
return new TestSuite( AnnotationValueConversionTests.class );
}
public String getUniqueProjectName(){
projectName = AnnotationValueConversionTests.class.getName() + "Project" + counter; //$NON-NLS-1$
counter ++;
return projectName;
}
public IPath getSourcePath() {
IProject project = env.getProject( getProjectName() );
IFolder srcFolder = project.getFolder( "src" ); //$NON-NLS-1$
IPath srcRoot = srcFolder.getFullPath();
return srcRoot;
}
public IPath getBinaryPath(){
IProject project = env.getProject( getProjectName() );
IFolder srcFolder = project.getFolder( "binary" ); //$NON-NLS-1$
IPath lib = srcFolder.getFullPath();
return lib;
}
public IPath getOutputPath(){
IProject project = env.getProject( getProjectName() );
IFolder binFolder = project.getFolder( "bin" ); //$NON-NLS-1$
IPath bin = binFolder.getFullPath();
return bin;
}
private IProject setupTest() throws Exception
{
ProcessorTestStatus.reset();
// project will be deleted by super-class's tearDown() method
IPath projectPath = env.addProject( getUniqueProjectName(), "1.5" ); //$NON-NLS-1$
env.setOutputFolder(projectPath, "bin"); //$NON-NLS-1$
env.addExternalJars( projectPath, Util.getJavaClassLibs() );
fullBuild( projectPath );
// remove old package fragment root so that names don't collide
env.removePackageFragmentRoot( projectPath, "" ); //$NON-NLS-1$
env.addPackageFragmentRoot( projectPath, "src" ); //$NON-NLS-1$
return env.getProject(getProjectName());
}
@SuppressWarnings("nls")
public void testByteConversion() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.Annotation;\n" +
"@Annotation(z=(byte)49,\n" +
" b=(byte)49,\n" +
" s=(byte)49,\n" +
" i=(byte)49,\n" +
" l=(byte)49,\n" +
" f=(byte)49,\n" +
" d=(byte)49,\n" +
" c=(byte)49)\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from byte to boolean", testPath),
new ExpectedProblem("", "type mismatch for member z expected java.lang.Boolean but got java.lang.Byte", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
@SuppressWarnings("nls")
public void testByteConversion_Reflection() throws Exception {
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotation;\n" +
"@RefAnnotation(z=(byte)49,\n" +
" b=(byte)49,\n" +
" s=(byte)49,\n" +
" i=(byte)49,\n" +
" l=(byte)49,\n" +
" f=(byte)49,\n" +
" d=(byte)49,\n" +
" c=(byte)49)\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from byte to boolean", testPath),
new ExpectedProblem("", "value mismatch for member z expected true but got false", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on short.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testShortConversion() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.Annotation;\n" +
"@Annotation(z=(short)49,\n" +
" b=(short)49,\n" +
" s=(short)49,\n" +
" i=(short)49,\n" +
" l=(short)49,\n" +
" f=(short)49,\n" +
" d=(short)49,\n" +
" c=(short)49)\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from short to boolean", testPath),
new ExpectedProblem("", "type mismatch for member z expected java.lang.Boolean but got java.lang.Short", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
@SuppressWarnings("nls")
public void testShortConversion_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotation;\n" +
"@RefAnnotation(z=(short)49,\n"+
" b=(short)49,\n" +
" s=(short)49,\n" +
" i=(short)49,\n" +
" l=(short)49,\n" +
" f=(short)49,\n" +
" d=(short)49,\n" +
" c=(short)49)\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from short to boolean", testPath),
new ExpectedProblem("", "value mismatch for member z expected true but got false", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on char.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testCharConversion() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.Annotation;\n" +
"@Annotation(z='1',\n" +
" b='1',\n" +
" s='1',\n" +
" i='1',\n" +
" l='1',\n" +
" f='1',\n" +
" d='1',\n" +
" c='1')\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from char to boolean", testPath),
new ExpectedProblem("", "type mismatch for member z expected java.lang.Boolean but got java.lang.Character", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on char through reflection
* @throws Exception
*/
@SuppressWarnings("nls")
public void testCharConversion_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotation;\n" +
"@RefAnnotation(z='1',\n" +
" b='1',\n" +
" s='1',\n" +
" i='1',\n" +
" l='1',\n" +
" f='1',\n" +
" d='1',\n" +
" c='1')\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from char to boolean", testPath),
new ExpectedProblem("", "value mismatch for member z expected true but got false", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on int.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testIntConversion() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.Annotation;\n" +
"@Annotation(z=49,\n" +
" b=49,\n" +
" s=49,\n" +
" i=49,\n" +
" l=49,\n" +
" f=49,\n" +
" d=49,\n" +
" c=49)\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from int to boolean", testPath),
new ExpectedProblem("", "type mismatch for member z expected java.lang.Boolean but got java.lang.Integer", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on int through reflection
* @throws Exception
*/
@SuppressWarnings("nls")
public void testIntConversion_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotation;\n" +
"@RefAnnotation(z=49,\n" +
" b=49,\n" +
" s=49,\n" +
" i=49,\n" +
" l=49,\n" +
" f=49,\n" +
" d=49,\n" +
" c=49)\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from int to boolean", testPath),
new ExpectedProblem("", "value mismatch for member z expected true but got false", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on long.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testLongConversion() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.Annotation;\n" +
"@Annotation(z=49l,\n" +
" c=49l,\n" +
" b=49l,\n" +
" s=49l,\n" +
" i=49l,\n" +
" l=49l,\n" +
" f=49l,\n" +
" d=49l)\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from long to boolean", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from long to char", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from long to byte", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from long to short", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from long to int", testPath),
new ExpectedProblem("", "type mismatch for member z expected java.lang.Boolean but got java.lang.Long", testPath),
new ExpectedProblem("", "type mismatch for member s expected java.lang.Short but got java.lang.Long", testPath),
new ExpectedProblem("", "type mismatch for member i expected java.lang.Integer but got java.lang.Long", testPath),
new ExpectedProblem("", "type mismatch for member c expected java.lang.Character but got java.lang.Long", testPath),
new ExpectedProblem("", "type mismatch for member b expected java.lang.Byte but got java.lang.Long", testPath),
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on long.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testLongConversion_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotation;\n" +
"@RefAnnotation(z=49l,\n" +
" c=49l,\n" +
" b=49l,\n" +
" s=49l,\n" +
" i=49l,\n" +
" l=49l,\n" +
" f=49l,\n" +
" d=49l)\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from long to boolean", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from long to char", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from long to byte", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from long to short", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from long to int", testPath),
new ExpectedProblem("", "value mismatch for member z expected true but got false", testPath),
new ExpectedProblem("", "value mismatch for member s expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member i expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member c expected 1 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member b expected 49 but got 0", testPath),
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on Float.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testFloatConversion() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.Annotation;\n" +
"@Annotation(z=49f,\n" +
" c=49f,\n" +
" b=49f,\n" +
" s=49f,\n" +
" i=49f,\n" +
" l=49f,\n" +
" f=49f,\n" +
" d=49f)\n" +
"public class Test {}\n";
IPath testPath = env.addClass(
srcRoot,
"sample",
"Test",
content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from float to boolean", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to int", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to long", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to char", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to byte", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to short", testPath),
new ExpectedProblem("", "type mismatch for member z expected java.lang.Boolean but got java.lang.Float", testPath),
new ExpectedProblem("", "type mismatch for member s expected java.lang.Short but got java.lang.Float", testPath),
new ExpectedProblem("", "type mismatch for member i expected java.lang.Integer but got java.lang.Float", testPath),
new ExpectedProblem("", "type mismatch for member c expected java.lang.Character but got java.lang.Float", testPath),
new ExpectedProblem("", "type mismatch for member b expected java.lang.Byte but got java.lang.Float", testPath),
new ExpectedProblem("", "type mismatch for member l expected java.lang.Long but got java.lang.Float", testPath),
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on Float.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testFloatConversion_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotation;\n" +
"@RefAnnotation(z=49f,\n" +
" c=49f,\n" +
" b=49f,\n" +
" s=49f,\n" +
" i=49f,\n" +
" l=49f,\n" +
" f=49f,\n" +
" d=49f)\n" +
"public class Test {}\n";
IPath testPath = env.addClass(
srcRoot,
"sample",
"Test",
content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from float to boolean", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to int", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to long", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to char", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to byte", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from float to short", testPath),
new ExpectedProblem("", "value mismatch for member z expected true but got false", testPath),
new ExpectedProblem("", "value mismatch for member s expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member i expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member c expected 1 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member b expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member l expected 49 but got 0", testPath),
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on double. No arrayification.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testDoubleConversion() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.Annotation;\n" +
"@Annotation(z=49d," +
" c=49d,\n" +
" b=49d,\n" +
" s=49d,\n" +
" i=49d,\n" +
" l=49d,\n" +
" f=49d,\n" +
" d=49d)\n" +
"public class Test {}\n";
IPath testPath = env.addClass(srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from double to boolean", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to int", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to long", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to char", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to byte", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to short", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to float", testPath),
new ExpectedProblem("", "type mismatch for member z expected java.lang.Boolean but got java.lang.Double", testPath),
new ExpectedProblem("", "type mismatch for member s expected java.lang.Short but got java.lang.Double", testPath),
new ExpectedProblem("", "type mismatch for member i expected java.lang.Integer but got java.lang.Double", testPath),
new ExpectedProblem("", "type mismatch for member c expected java.lang.Character but got java.lang.Double", testPath),
new ExpectedProblem("", "type mismatch for member b expected java.lang.Byte but got java.lang.Double", testPath),
new ExpectedProblem("", "type mismatch for member l expected java.lang.Long but got java.lang.Double", testPath),
new ExpectedProblem("", "type mismatch for member f expected java.lang.Float but got java.lang.Double", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on double. No arrayification.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testDoubleConversion_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotation;\n" +
"@RefAnnotation(z=49d,\n" +
" c=49d,\n" +
" b=49d,\n" +
" s=49d,\n" +
" i=49d,\n" +
" l=49d,\n" +
" f=49d,\n" +
" d=49d)\n" +
"public class Test {}\n";
IPath testPath = env.addClass(srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from double to boolean", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to int", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to long", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to char", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to byte", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to short", testPath),
new ExpectedProblem("", "Type mismatch: cannot convert from double to float", testPath),
new ExpectedProblem("", "value mismatch for member z expected true but got false", testPath),
new ExpectedProblem("", "value mismatch for member s expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member i expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member c expected 1 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member b expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member l expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member f expected 49.0 but got 0.0", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Convert "singleton" instance to array of the correct type
* @throws Exception
*/
@SuppressWarnings("nls")
public void testArrayification() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.AnnotationWithArray;\n" +
"@AnnotationWithArray(booleans=true,\n" +
" bytes=(byte)49,\n" +
" shorts=(short)49,\n" +
" ints=49,\n" +
" longs=49,\n" +
" floats=49,\n" +
" doubles=49,\n" +
" chars='1')\n\n" +
"public class Test {}\n" ;
env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingNoProblems();
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Convert "singleton" instance to array of the correct type
* @throws Exception
*/
@SuppressWarnings("nls")
public void testArrayification_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotationWithArray;\n" +
"@RefAnnotationWithArray(booleans=true,\n" +
" bytes=(byte)49,\n" +
" shorts=(short)49,\n" +
" ints=49,\n" +
" longs=49,\n" +
" floats=49,\n" +
" doubles=49,\n" +
" chars='1')\n\n" +
"public class Test {}\n" ;
env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingNoProblems();
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on array elements.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testArrayElementConversion() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.AnnotationWithArray;\n" +
"@AnnotationWithArray(booleans={true, true },\n" +
" bytes= {(byte)49, 50}, \n" +
" shorts= {(byte)49, 50},\n" +
" ints= {(byte)49, 50},\n" +
" longs= {(byte)49, 50},\n" +
" floats= {(byte)49, 50},\n" +
" doubles={(byte)49, 50},\n" +
" chars= {'1','2'})\n\n" +
"public class Test {}\n";
env.addClass(
srcRoot,
"sample",
"Test",
content );
fullBuild( project.getFullPath() );
expectingNoProblems();
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
/**
* Test conversion on array elements.
* @throws Exception
*/
@SuppressWarnings("nls")
public void testArrayElementConversion_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotationWithArray;\n" +
"@RefAnnotationWithArray(booleans={true, true },\n" +
" bytes= {(byte)49, 50}, \n" +
" shorts= {(byte)49, 50},\n" +
" ints= {(byte)49, 50},\n" +
" longs= {(byte)49, 50},\n" +
" floats= {(byte)49, 50},\n" +
" doubles={(byte)49, 50},\n" +
" chars= {'1','2'})\n\n" +
"public class Test {}\n" ;
env.addClass(
srcRoot,
"sample",
"Test",
content );
fullBuild( project.getFullPath() );
expectingNoProblems();
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
public void testErrorStringValue() throws Exception {
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.AnnotationWithArray;\n" +
"@AnnotationWithArray(booleans={true, true },\n" +
" bytes= {(byte)49, 50}, \n" +
" shorts= {(byte)49, 50},\n" +
" ints= {(byte)49, 50},\n" +
" longs= {(byte)49, 50},\n" +
" floats= {(byte)49, 50},\n" +
" doubles={(byte)49, 50},\n" +
" chars= {'1','2'},\n" +
" str=true)\n\n" +
"public class Test {}\n";
env.addClass(
srcRoot,
"sample",
"Test",
content );
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from boolean to String", testPath),
new ExpectedProblem("", "type mismatch for member str expected java.lang.String but got java.lang.Boolean", testPath)
});
}
public void testErrorStringValue_Reflection() throws Exception {
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotationWithArray;\n" +
"@RefAnnotationWithArray(booleans={true, true },\n" +
" bytes= {(byte)49, 50}, \n" +
" shorts= {(byte)49, 50},\n" +
" ints= {(byte)49, 50},\n" +
" longs= {(byte)49, 50},\n" +
" floats= {(byte)49, 50},\n" +
" doubles={(byte)49, 50},\n" +
" chars= {'1','2'},\n" +
" str=true)\n\n" +
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "Type mismatch: cannot convert from boolean to String", testPath),
new ExpectedProblem("", "value mismatch for member str expected string but got null", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
@SuppressWarnings("nls")
public void testMissingPrimitiveTypeValues_Reflection() throws Exception {
// reset the error reset the error;
IProject project = setupTest();
IPath srcRoot = getSourcePath();
String content =
"package sample; \n\n" +
"import org.eclipse.jdt.apt.tests.annotations.valueconversion.RefAnnotation;\n" +
"@RefAnnotation()\n"+
"public class Test {}\n";
IPath testPath = env.addClass( srcRoot, "sample", "Test", content );
fullBuild( project.getFullPath() );
expectingSpecificProblemsFor(testPath, new ExpectedProblem[]{
new ExpectedProblem("", "The annotation @RefAnnotation must define the attribute z", testPath),
new ExpectedProblem("", "The annotation @RefAnnotation must define the attribute c", testPath),
new ExpectedProblem("", "The annotation @RefAnnotation must define the attribute b", testPath),
new ExpectedProblem("", "The annotation @RefAnnotation must define the attribute s", testPath),
new ExpectedProblem("", "The annotation @RefAnnotation must define the attribute i", testPath),
new ExpectedProblem("", "The annotation @RefAnnotation must define the attribute l", testPath),
new ExpectedProblem("", "The annotation @RefAnnotation must define the attribute f", testPath),
new ExpectedProblem("", "The annotation @RefAnnotation must define the attribute d", testPath),
new ExpectedProblem("", "value mismatch for member z expected true but got false", testPath),
new ExpectedProblem("", "value mismatch for member s expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member i expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member c expected 1 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member b expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member l expected 49 but got 0", testPath),
new ExpectedProblem("", "value mismatch for member f expected 49.0 but got 0.0", testPath),
new ExpectedProblem("", "value mismatch for member d expected 49.0 but got 0.0", testPath)
});
assertEquals(ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
}