blob: 0954baee5ca8014e6308c85e2e3c78795a621c98 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BSI Business Systems Integration AG.
* 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:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.sdk.internal.test.operation.jdt;
import java.io.File;
import java.util.ArrayList;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.Signature;
import org.eclipse.scout.sdk.internal.test.AbstractScoutSdkTest;
import org.eclipse.scout.sdk.operation.jdt.field.FieldNewOperation;
import org.eclipse.scout.sdk.sourcebuilder.annotation.AnnotationSourceBuilder;
import org.eclipse.scout.sdk.testing.TestWorkspaceUtility;
import org.eclipse.scout.sdk.util.type.TypeUtility;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* <h3>{@link FieldNewOperationTest}</h3> ...
*
* @author Andreas Hoegger
* @since 3.8.0 08.02.2013
*/
public class FieldNewOperationTest extends AbstractScoutSdkTest {
@BeforeClass
public static void setUpWorkspace() throws Exception {
setupWorkspace("resources/operation/method", "test.client", "test.shared");
}
@Test
public void createPrivateField() throws Exception {
IType declaringType = TypeUtility.getType("test.client.MethodBodyTest");
String fieldName = "myField";
FieldNewOperation fieldOp = new FieldNewOperation(fieldName, declaringType);
fieldOp.setFlags(Flags.AccPrivate);
fieldOp.setSignature(Signature.createTypeSignature(String.class.getName(), true));
TestWorkspaceUtility.executeAndBuildWorkspace(fieldOp);
TestWorkspaceUtility.assertNoCompileErrors();
Assert.assertTrue(TypeUtility.exists(fieldOp.getCreatedField()));
IField field = declaringType.getField(fieldName);
Assert.assertTrue(TypeUtility.exists(field));
Assert.assertTrue(Flags.isPrivate(field.getFlags()));
Assert.assertFalse(Flags.isProtected(field.getFlags()));
Assert.assertFalse(Flags.isPublic(field.getFlags()));
Assert.assertFalse(Flags.isStatic(field.getFlags()));
Assert.assertFalse(Flags.isFinal(field.getFlags()));
}
@Test
public void testFieldUsingAnImport() throws Exception {
IType declaringType = TypeUtility.getType("test.client.MethodBodyTest");
String fieldName = "listField";
FieldNewOperation fieldOp = new FieldNewOperation(fieldName, declaringType);
fieldOp.setFlags(Flags.AccPrivate);
fieldOp.setSignature(Signature.createTypeSignature(ArrayList.class.getName() + "<" + File.class.getName() + ">", true));
TestWorkspaceUtility.executeAndBuildWorkspace(fieldOp);
TestWorkspaceUtility.assertNoCompileErrors();
Assert.assertTrue(TypeUtility.exists(fieldOp.getCreatedField()));
IField field = declaringType.getField(fieldName);
Assert.assertTrue(TypeUtility.exists(field));
Assert.assertTrue(Flags.isPrivate(field.getFlags()));
Assert.assertEquals(field.getTypeSignature(), Signature.createTypeSignature(ArrayList.class.getSimpleName() + "<" + File.class.getSimpleName() + ">", false));
}
@Test
public void createPublicStaticField() throws Exception {
IType declaringType = TypeUtility.getType("test.client.MethodBodyTest");
String fieldName = "PUBLIC_STATIC_FIELD";
FieldNewOperation fieldOp = new FieldNewOperation(fieldName, declaringType);
fieldOp.setFlags(Flags.AccPublic | Flags.AccStatic);
fieldOp.setSignature(Signature.createTypeSignature(Integer.class.getName(), true));
TestWorkspaceUtility.executeAndBuildWorkspace(fieldOp);
TestWorkspaceUtility.assertNoCompileErrors();
Assert.assertTrue(TypeUtility.exists(fieldOp.getCreatedField()));
IField field = declaringType.getField(fieldName);
Assert.assertTrue(TypeUtility.exists(field));
Assert.assertFalse(Flags.isPrivate(field.getFlags()));
Assert.assertFalse(Flags.isProtected(field.getFlags()));
Assert.assertTrue(Flags.isPublic(field.getFlags()));
Assert.assertTrue(Flags.isStatic(field.getFlags()));
Assert.assertFalse(Flags.isFinal(field.getFlags()));
}
@Test
public void createPublicStaticFinalField() throws Exception {
IType declaringType = TypeUtility.getType("test.client.MethodBodyTest");
String fieldName = "PUBLIC_STATIC_FINAL_FIELD";
FieldNewOperation fieldOp = new FieldNewOperation(fieldName, declaringType);
fieldOp.setFlags(Flags.AccPublic | Flags.AccStatic | Flags.AccFinal);
fieldOp.setSignature(Signature.SIG_INT);
fieldOp.setValue("1");
TestWorkspaceUtility.executeAndBuildWorkspace(fieldOp);
TestWorkspaceUtility.assertNoCompileErrors();
Assert.assertTrue(TypeUtility.exists(fieldOp.getCreatedField()));
IField field = declaringType.getField(fieldName);
Assert.assertTrue(TypeUtility.exists(field));
Assert.assertFalse(Flags.isPrivate(field.getFlags()));
Assert.assertFalse(Flags.isProtected(field.getFlags()));
Assert.assertTrue(Flags.isPublic(field.getFlags()));
Assert.assertTrue(Flags.isStatic(field.getFlags()));
Assert.assertTrue(Flags.isFinal(field.getFlags()));
Object constant = field.getConstant();
Assert.assertEquals(1, constant);
}
@Test
public void createFieldWithAnnotation() throws Exception {
IType declaringType = TypeUtility.getType("test.client.MethodBodyTest");
String fieldName = "fieldWithAnnotation";
FieldNewOperation fieldOp = new FieldNewOperation(fieldName, declaringType);
fieldOp.setFlags(Flags.AccPrivate);
fieldOp.setSignature(Signature.createTypeSignature(String.class.getName(), true));
fieldOp.addAnnotationSourceBuilder(new AnnotationSourceBuilder(Signature.createTypeSignature(Deprecated.class.getName(), true)));
TestWorkspaceUtility.executeAndBuildWorkspace(fieldOp);
TestWorkspaceUtility.assertNoCompileErrors();
Assert.assertTrue(TypeUtility.exists(fieldOp.getCreatedField()));
IField field = declaringType.getField(fieldName);
Assert.assertTrue(TypeUtility.exists(field));
Assert.assertTrue(Flags.isPrivate(field.getFlags()));
Assert.assertFalse(Flags.isProtected(field.getFlags()));
Assert.assertFalse(Flags.isPublic(field.getFlags()));
Assert.assertFalse(Flags.isStatic(field.getFlags()));
Assert.assertFalse(Flags.isFinal(field.getFlags()));
Assert.assertTrue(TypeUtility.exists(field.getAnnotation("Deprecated")));
}
}