/* * <copyright> * * Copyright (c) 2005-2006 Sven Efftinge and others. * 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: * Sven Efftinge - Initial API and implementation * * </copyright> */ package org.eclipse.gmf.tests.expression.ast; import org.eclipse.gmf.internal.xpand.expression.ast.BooleanLiteral; import org.eclipse.gmf.internal.xpand.expression.ast.Case; import org.eclipse.gmf.internal.xpand.expression.ast.Cast; import org.eclipse.gmf.internal.xpand.expression.ast.ChainExpression; import org.eclipse.gmf.internal.xpand.expression.ast.Expression; import org.eclipse.gmf.internal.xpand.expression.ast.FeatureCall; import org.eclipse.gmf.internal.xpand.expression.ast.IfExpression; import org.eclipse.gmf.internal.xpand.expression.ast.IntegerLiteral; import org.eclipse.gmf.internal.xpand.expression.ast.ListLiteral; import org.eclipse.gmf.internal.xpand.expression.ast.NullLiteral; import org.eclipse.gmf.internal.xpand.expression.ast.OperationCall; import org.eclipse.gmf.internal.xpand.expression.ast.StringLiteral; import org.eclipse.gmf.internal.xpand.expression.ast.SwitchExpression; /** * @author Sven Efftinge * @author Arno Haase */ public class ParserTest extends AbstractExpressionTest { public final void testSimple() { final Expression expr = parse("true == null"); assertTrue(expr instanceof OperationCall); final OperationCall op = (OperationCall) expr; assertTrue(op.getTarget() instanceof BooleanLiteral); assertTrue(op.getParams()[0] instanceof NullLiteral); } public final void testSimple2() { final Expression expr = parse("String.feature.test(true, {\"test\",\"hallo\"})"); assertTrue(expr instanceof OperationCall); final OperationCall op = (OperationCall) expr; assertEquals("test", op.getName().getValue()); assertTrue(op.getTarget() instanceof FeatureCall); FeatureCall tl = (FeatureCall) op.getTarget(); assertEquals("feature", tl.getName().getValue()); tl = (FeatureCall) tl.getTarget(); assertEquals("String", tl.getName().getValue()); assertTrue(op.getParams().length == 2); assertTrue(op.getParams()[0] instanceof BooleanLiteral); final ListLiteral colLit = (ListLiteral) op.getParams()[1]; assertEquals(2, colLit.getElements().length); assertEquals("\"test\"", ((StringLiteral) colLit.getElements()[0]).getLiteralValue()); assertEquals("\"hallo\"", ((StringLiteral) colLit.getElements()[1]).getLiteralValue()); } public final void testIfExpression() { final Expression expr = parse("(client.sIdent1 != null) ? client.sIdent1 : \"XXXXXXXX\""); assertTrue(expr instanceof IfExpression); } public final void testEscaped() { final Expression expr = parse("\"\\\"\""); assertTrue(expr instanceof StringLiteral); assertEquals("\"", ((StringLiteral) expr).getValue()); } public final void testNot() { final Expression expr = parse("! ts.checked"); assertNotNull(expr); } public final void testCast() { final Expression expr = parse("(List[InnerType]) anExpr"); assertNotNull(expr); final Cast cast = (Cast) expr; assertEquals("List[InnerType]", cast.getType().getValue()); final FeatureCall fc = (FeatureCall) cast.getTarget(); assertEquals("anExpr", fc.getName().getValue()); assertNull(fc.getTarget()); } public final void testSwitch() { SwitchExpression expr = (SwitchExpression) parse("switch (5) { default : true }"); assertNotNull(expr.getSwitchExpr()); assertTrue(expr.getCases().isEmpty()); assertEquals("true", ((BooleanLiteral) expr.getDefaultExpr()).getLiteralValue()); expr = (SwitchExpression) parse("switch (\"test\") { case \"horst\": false default : true }"); assertEquals("\"test\"", ((StringLiteral) expr.getSwitchExpr()).getLiteralValue()); final Case c = expr.getCases().get(0); assertEquals("\"horst\"", ((StringLiteral) c.getCondition()).getLiteralValue()); assertEquals("false", ((BooleanLiteral) c.getThenPart()).getLiteralValue()); assertEquals("true", ((BooleanLiteral) expr.getDefaultExpr()).getLiteralValue()); } public final void testChainExpression() { final ChainExpression expr = (ChainExpression) parse("1 -> 2 -> 3 -> 4"); assertEquals("4", expr.getNext().toString()); assertEquals("1->2->3", expr.getFirst().toString()); } public final void testPositionInfo() { final Expression exp = parse("\n\n\n1"); assertEquals(4, exp.getLine()); assertEquals(0, exp.getStart()); assertEquals(1, exp.getEnd()); } public final void testPositionInfo2() { final Expression exp = parse("/*\n\n\n*/1"); assertEquals(4, exp.getLine()); assertEquals(2, exp.getStart()); assertEquals(3, exp.getEnd()); } public final void testPositionInfo3() { final OperationCall exp = (OperationCall) parse("'/*\\n\\n\\n*/'+1"); assertEquals(1, exp.getLine()); assertEquals(0, exp.getStart()); assertEquals(14, exp.getEnd()); final StringLiteral target = (StringLiteral) exp.getTarget(); assertEquals(1, target.getLine()); assertEquals(0, target.getStart()); assertEquals(12, target.getEnd()); final IntegerLiteral param = (IntegerLiteral) exp.getParams()[0]; assertEquals(1, param.getLine()); assertEquals(13, param.getStart()); assertEquals(14, param.getEnd()); } public final void testTypeLiterals() { final Expression e = parse("{ Object,\n String,\n Collection[A],\n Set[B],\n List[C],\n" + " oaw::Type,\n oaw::Feature,\n oaw::Property\n}"); assertNotNull(e); } }