package uk.co.badgersinfoil.metaas; import java.io.IOException; import uk.co.badgersinfoil.metaas.dom.ASArrayLiteral; import uk.co.badgersinfoil.metaas.dom.ASAssignmentExpression; import uk.co.badgersinfoil.metaas.dom.ASBooleanLiteral; import uk.co.badgersinfoil.metaas.dom.ASClassType; import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit; import uk.co.badgersinfoil.metaas.dom.Literal; import uk.co.badgersinfoil.metaas.dom.ASMethod; import uk.co.badgersinfoil.metaas.dom.ASNullLiteral; import uk.co.badgersinfoil.metaas.dom.ASObjectLiteral; import uk.co.badgersinfoil.metaas.dom.ASRegexpLiteral; import uk.co.badgersinfoil.metaas.dom.ASStringLiteral; import uk.co.badgersinfoil.metaas.dom.ASIntegerLiteral; import uk.co.badgersinfoil.metaas.dom.ASUndefinedLiteral; import uk.co.badgersinfoil.metaas.dom.ASXMLLiteral; import uk.co.badgersinfoil.metaas.dom.Visibility; import junit.framework.TestCase; public class LiteralTests extends TestCase { private ActionScriptFactory fact = new ActionScriptFactory(); private ASCompilationUnit unit; private ASCompilationUnit reflect; private Literal literal = null; protected void setUp() { unit = fact.newClass("Test"); reflect = null; literal = null; } protected void tearDown() throws IOException { if (literal != null && reflect == null) { ASClassType clazz = (ASClassType)unit.getType(); ASMethod meth = clazz.newMethod("test", Visibility.PUBLIC, null); meth.newExprStmt(fact.newAssignExpression(fact.newExpression(getName()), literal)); reflect = assertReflection(); } } private ASCompilationUnit assertReflection() throws IOException { return CodeMirror.assertReflection(fact, unit); } public void testStringLiteral() { ASStringLiteral lit = fact.newStringLiteral(""); assertEquals("", lit.getValue()); lit.setValue("\""); assertEquals("\"", lit.getValue()); literal = lit; } public void testNumberLiteral() { ASIntegerLiteral lit = fact.newIntegerLiteral(123); assertEquals(123, lit.getValue()); lit.setValue(0); assertEquals(0, lit.getValue()); literal = lit; } public void testNullLiteral() { ASNullLiteral lit = fact.newNullLiteral(); assertNotNull(lit); literal = lit; } public void testParseNullLiteral() { ASNullLiteral lit = (ASNullLiteral)fact.newExpression("null"); assertNotNull(lit); literal = lit; } public void testBoolLiteral() { ASBooleanLiteral lit = fact.newBooleanLiteral(true); assertTrue(lit.getValue()); lit.setValue(false); assertFalse(lit.getValue()); lit = fact.newBooleanLiteral(false); assertFalse(lit.getValue()); lit.setValue(true); assertTrue(lit.getValue()); ExtraAssertions.assertInstanceof(fact.newExpression("true"), ASBooleanLiteral.class); literal = lit; } public void testUndefinedLiteral() { ASUndefinedLiteral lit = fact.newUndefinedLiteral(); assertNotNull(lit); literal = lit; } public void testParseUndefinedLiteral() { ASUndefinedLiteral lit = (ASUndefinedLiteral)fact.newExpression("undefined"); assertNotNull(lit); literal = lit; } public void testEmptyArrayLiteral() { ASArrayLiteral lit = fact.newArrayLiteral(); assertNotNull(lit); ExtraAssertions.assertSize(0, lit.getEntries()); literal = lit; } public void testArrayLiteral() { ASArrayLiteral lit = fact.newArrayLiteral(); lit.add(fact.newIntegerLiteral(1)); ExtraAssertions.assertSize(1, lit.getEntries()); ExtraAssertions.assertInstanceof(lit.getEntries().get(0), ASIntegerLiteral.class); lit.add(fact.newStringLiteral("foo")); ExtraAssertions.assertSize(2, lit.getEntries()); ExtraAssertions.assertInstanceof(lit.getEntries().get(1), ASStringLiteral.class); literal = lit; } public void testArrayLiteralRemoveFirst() { ASArrayLiteral lit = fact.newArrayLiteral(); lit.add(fact.newIntegerLiteral(1)); lit.add(fact.newStringLiteral("foo")); lit.remove(0); ExtraAssertions.assertSize(1, lit.getEntries()); literal = lit; } public void testArrayLiteralRemoveLast() { ASArrayLiteral lit = fact.newArrayLiteral(); lit.add(fact.newIntegerLiteral(1)); lit.add(fact.newStringLiteral("foo")); lit.remove(1); ExtraAssertions.assertSize(1, lit.getEntries()); literal = lit; } public void testArrayLiteralRemoveMiddle() { ASArrayLiteral lit = fact.newArrayLiteral(); lit.add(fact.newIntegerLiteral(1)); lit.add(fact.newStringLiteral("foo")); lit.add(fact.newBooleanLiteral(false)); lit.remove(1); ExtraAssertions.assertSize(2, lit.getEntries()); literal = lit; } public void testParseArrayLiteral() { literal = (ASArrayLiteral)fact.newExpression("['foo', [1]]"); assertNotNull(literal); } public void testEmptyObjectLiteral() { ASObjectLiteral lit = fact.newObjectLiteral(); assertNotNull(lit); ExtraAssertions.assertSize(0, lit.getFields()); literal = lit; } public void testObjectLiteral() { ASObjectLiteral lit = fact.newObjectLiteral(); ASObjectLiteral.Field field = lit.newField("foo", fact.newIntegerLiteral(33)); assertEquals("foo", field.getName()); ExtraAssertions.assertInstanceof(field.getValue(), ASIntegerLiteral.class); field = lit.newField("bar", fact.newStringLiteral("hello")); literal = lit; } public void testParseObjectLiteral() { ASAssignmentExpression expr = (ASAssignmentExpression)fact.newExpression("test = {foo:2}"); literal = (Literal)expr.getRightSubexpression(); } public void testXMLLiteral() { ASXMLLiteral lit = fact.newXMLLiteral("<hello>world</hello>"); assertNotNull(lit); literal = lit; } public void testParseXMLLiteral() { ASXMLLiteral lit = (ASXMLLiteral)fact.newExpression("<hello>world</hello>"); assertNotNull(lit); literal = lit; } public void testRegexpLiteral() { ASRegexpLiteral lit = fact.newRegexpLiteral("\\d+", ASRegexpLiteral.FLAG_NONE); assertNotNull(lit); literal = lit; } public void testParseRegexpLiteral() { ASRegexpLiteral lit = (ASRegexpLiteral)fact.newExpression("/[a-z]+-\\d+/i"); assertNotNull(lit); literal = lit; } }