package uk.co.badgersinfoil.metaas;
import java.io.IOException;
import uk.co.badgersinfoil.metaas.dom.ASClassType;
import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit;
import uk.co.badgersinfoil.metaas.dom.ASDeclarationStatement;
import uk.co.badgersinfoil.metaas.dom.ASDefaultXMLNamespaceStatement;
import uk.co.badgersinfoil.metaas.dom.ASDescendantExpression;
import uk.co.badgersinfoil.metaas.dom.ASFieldAccessExpression;
import uk.co.badgersinfoil.metaas.dom.Expression;
import uk.co.badgersinfoil.metaas.dom.ASExpressionAttribute;
import uk.co.badgersinfoil.metaas.dom.ASFilterExpression;
import uk.co.badgersinfoil.metaas.dom.ASMethod;
import uk.co.badgersinfoil.metaas.dom.ASPropertyAttribute;
import uk.co.badgersinfoil.metaas.dom.ASSimpleNameExpression;
import uk.co.badgersinfoil.metaas.dom.ASStarAttribute;
import uk.co.badgersinfoil.metaas.dom.ASXMLLiteral;
import uk.co.badgersinfoil.metaas.dom.Visibility;
import junit.framework.TestCase;
public class E4XTests extends TestCase {
private ActionScriptFactory fact = new ActionScriptFactory();
private ASCompilationUnit unit;
private ASMethod meth;
protected void setUp() {
unit = fact.newClass("Test");
ASClassType clazz = (ASClassType)unit.getType();
meth = clazz.newMethod("test", Visibility.PUBLIC, null);
}
protected void tearDown() throws IOException {
CodeMirror.assertReflection(fact, unit);
}
public void testLiteralElement() {
ASDeclarationStatement decl = (ASDeclarationStatement)meth.addStmt("var x:XML = <element/>");
ASXMLLiteral init = (ASXMLLiteral)decl.getFirstVarInitializer();
assertEquals("<element/>", init.getValueString());
}
public void testDefaultXMLNamespace() {
ASDefaultXMLNamespaceStatement stmt = meth.newDefaultXMLNamespace("http://example.com\\");
assertEquals("http://example.com\\", stmt.getNamespace());
}
public void testParseDefaultXMLNamespace() {
ASDefaultXMLNamespaceStatement stmt
= (ASDefaultXMLNamespaceStatement)meth.addStmt("default xml namespace = \"http://example.com\\\\\"");
assertEquals("http://example.com\\", stmt.getNamespace());
}
public void testDescendant() {
Expression target = fact.newExpression("a");
Expression selector = fact.newExpression("b");
ASDescendantExpression expr = fact.newDescendantExpression(target, selector);
assertNotNull(expr);
meth.newExprStmt(expr);
}
public void testParseDescendant() {
ASDescendantExpression expr = (ASDescendantExpression)fact.newExpression("a..b");
Expression target = expr.getTarget();
ExtraAssertions.assertInstanceof(target, ASSimpleNameExpression.class);
assertEquals("a", ((ASSimpleNameExpression)target).getName());
Expression query = expr.getQuery();
ExtraAssertions.assertInstanceof(query, ASSimpleNameExpression.class);
assertEquals("b", ((ASSimpleNameExpression)query).getName());
}
public void testFilterPredicate() {
Expression target = fact.newExpression("a");
Expression selector = fact.newExpression("b");
ASFilterExpression expr = fact.newFilterExpression(target, selector);
assertNotNull(expr);
meth.newExprStmt(expr);
}
public void testParseFilterPredicate() {
ASFilterExpression expr = (ASFilterExpression)fact.newExpression("a.(b)");
Expression target = expr.getTarget();
ExtraAssertions.assertInstanceof(target, ASSimpleNameExpression.class);
assertEquals("a", ((ASSimpleNameExpression)target).getName());
Expression query = expr.getQuery();
ExtraAssertions.assertInstanceof(query, ASSimpleNameExpression.class);
assertEquals("b", ((ASSimpleNameExpression)query).getName());
}
public void testStarAttribute() {
ASStarAttribute expr = fact.newStarAttribute();
assertNotNull(expr);
meth.newExprStmt(expr);
}
public void testParseStarAttribute() {
ASStarAttribute expr = (ASStarAttribute)fact.newExpression("@*");
assertNotNull(expr);
meth.newExprStmt(expr);
}
public void testPropertyAttribute() {
ASPropertyAttribute expr = fact.newPropertyAttribute("test");
assertNotNull(expr);
assertEquals("test", expr.getNameString());
meth.newExprStmt(expr);
}
public void testParsePropertyAttribute() {
ASPropertyAttribute expr = (ASPropertyAttribute)fact.newExpression("@ns::test");
assertNotNull(expr);
assertEquals("ns::test", expr.getNameString());
meth.newExprStmt(expr);
}
public void testExpressionAttribute() {
Expression expr = fact.newExpression("foo");
ASExpressionAttribute attrexpr = fact.newExpressionAttribute(expr);
assertNotNull(attrexpr);
ExtraAssertions.assertInstanceof(attrexpr.getExpression(), ASSimpleNameExpression.class);
meth.newExprStmt(attrexpr);
}
public void testParseExpressionAttribute() {
ASExpressionAttribute expr = (ASExpressionAttribute)fact.newExpression("@[foo]");
assertNotNull(expr);
ExtraAssertions.assertInstanceof(expr.getExpression(), ASSimpleNameExpression.class);
meth.newExprStmt(expr);
}
public void testParseDescendantExpressionAttribute() {
ASDescendantExpression expr = (ASDescendantExpression)fact.newExpression("a..@*");
ExtraAssertions.assertInstanceof(expr.getQuery(), ASStarAttribute.class);
meth.newExprStmt(expr);
}
public void testParseAttributeProp() {
ASFieldAccessExpression expr = (ASFieldAccessExpression)fact.newExpression("a.@b");
// assertEquals(@????????!?!?, expr.getName());
meth.newExprStmt(expr);
}
public void testParseStarProp() {
ASFieldAccessExpression expr = (ASFieldAccessExpression)fact.newExpression("a.*");
// assertEquals(????????!?!?, expr.getName());
meth.newExprStmt(expr);
}
}