AjAST5Test.java
/********************************************************************
* Copyright (c) 2006 Contributors. All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v 2.0
* which accompanies this distribution and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
*
* Contributors: IBM Corporation - initial API and implementation
* Helen Hawkins - initital version
* Matthew Webster - moved tests
*******************************************************************/
package org.aspectj.tools.ajc;
import java.util.List;
import org.aspectj.org.eclipse.jdt.core.dom.AST;
import org.aspectj.org.eclipse.jdt.core.dom.AbstractTypePattern;
import org.aspectj.org.eclipse.jdt.core.dom.AjAST;
import org.aspectj.org.eclipse.jdt.core.dom.AjTypeDeclaration;
import org.aspectj.org.eclipse.jdt.core.dom.AspectDeclaration;
import org.aspectj.org.eclipse.jdt.core.dom.ChildListPropertyDescriptor;
import org.aspectj.org.eclipse.jdt.core.dom.ChildPropertyDescriptor;
import org.aspectj.org.eclipse.jdt.core.dom.DeclareParentsDeclaration;
import org.aspectj.org.eclipse.jdt.core.dom.DefaultTypePattern;
import org.aspectj.org.eclipse.jdt.core.dom.PerTypeWithin;
import org.aspectj.org.eclipse.jdt.core.dom.SimplePropertyDescriptor;
public class AjAST5Test extends AjASTTestCase {
public void testInternalAspectDeclaration() {
AjAST ajast = createAjAST();
AspectDeclaration d = ajast.newAspectDeclaration();
List props = AspectDeclaration.propertyDescriptors(AST.JLS3);
for (Object o : props) {
if (o instanceof ChildPropertyDescriptor) {
ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
if (element.getId().equals("perClause")) {
assertNull("AspectDeclaration's " + element.getId() + " property" +
"should be null since we haven't set it yet",
d.getStructuralProperty(element));
}
} else if (o instanceof SimplePropertyDescriptor) {
SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
assertNotNull("AspectDeclaration's " + element.getId() + " property" +
"should not be null since it is a boolean",
d.getStructuralProperty(element));
}
}
for (Object o : props) {
if (o instanceof ChildPropertyDescriptor) {
ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
if (element.getId().equals("perClause")) {
PerTypeWithin ptw = ajast.newPerTypeWithin();
d.setStructuralProperty(element, ptw);
assertEquals("AspectDeclaration's perClause property should" +
" now be a perTypeWithin", ptw, d.getStructuralProperty(element));
} else if (element.getId().equals("javadoc")) {
// do nothing since makes no sense to have javadoc
}
} else if (o instanceof SimplePropertyDescriptor) {
SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
if (element.getId().equals("privileged")) {
Boolean b = Boolean.TRUE;
d.setStructuralProperty(element, b);
assertEquals("AspectDeclaration's isPrivileged property should" +
" now be a boolean", b, d.getStructuralProperty(element));
}
}
}
}
public void testInternalAjTypeDeclaration() {
AjAST ajast = createAjAST();
AjTypeDeclaration d = ajast.newAjTypeDeclaration();
List props = AjTypeDeclaration.propertyDescriptors(AST.JLS3);
for (Object o : props) {
if (o instanceof SimplePropertyDescriptor) {
SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
if (element.getId().equals("aspect")) {
assertNotNull("AjTypeDeclaration's " + element.getId() + " property" +
" should not be null since it is a boolean",
d.getStructuralProperty(element));
}
}
}
for (Object o : props) {
if (o instanceof SimplePropertyDescriptor) {
SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
if (element.getId().equals("aspect")) {
Boolean b = Boolean.TRUE;
d.setStructuralProperty(element, b);
assertEquals("AjTypeDeclaration's aspect property should" +
" now be a SignaturePattern", b, d.getStructuralProperty(element));
}
}
}
}
public void testInternalDeclareParentsDeclaration() {
AjAST ajast = createAjAST();
DeclareParentsDeclaration d = ajast.newDeclareParentsDeclaration();
List props = DeclareParentsDeclaration.propertyDescriptors(AST.JLS3);
for (Object o : props) {
if (o instanceof ChildPropertyDescriptor) {
ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
assertNull("DeclareParentsDeclaration's " + element.getId() + " property" +
"should be null since we haven't set it yet",
d.getStructuralProperty(element));
} else if (o instanceof ChildListPropertyDescriptor) {
ChildListPropertyDescriptor element = (ChildListPropertyDescriptor) o;
assertNotNull("DeclareParentsDeclaration's " + element.getId() + " property" +
"should not be null since it is a list",
d.getStructuralProperty(element));
assertEquals("should only be able to put TypePattern's into the list",
AbstractTypePattern.class, element.getElementType());
} else if (o instanceof SimplePropertyDescriptor) {
SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
assertNotNull("DeclareParentsDeclaration's " + element.getId() + " property" +
"should not be null since it is a boolean",
d.getStructuralProperty(element));
} else {
fail("unknown PropertyDescriptor associated with DeclareParentsDeclaration: " + o);
}
}
for (Object o : props) {
if (o instanceof ChildPropertyDescriptor) {
ChildPropertyDescriptor element = (ChildPropertyDescriptor) o;
if (element.getId().equals("childTypePattern")) {
DefaultTypePattern dtp = ajast.newDefaultTypePattern();
d.setStructuralProperty(element, dtp);
assertEquals("DeclareParentsDeclaration's typePattern property should" +
" now be a DefaultTypePattern", dtp, d.getStructuralProperty(element));
} else if (element.getId().equals("javadoc")) {
// do nothing since makes no sense to have javadoc
} else {
fail("unknown property for DeclareParentsDeclaration");
}
} else if (o instanceof SimplePropertyDescriptor) {
SimplePropertyDescriptor element = (SimplePropertyDescriptor) o;
if (element.getId().equals("isExtends")) {
Boolean b = Boolean.TRUE;
d.setStructuralProperty(element, b);
assertEquals("DeclareParentsDeclaration's isExtends property should" +
" now be a boolean", b, d.getStructuralProperty(element));
}
}
}
}
}