/******************************************************************************* * Copyright (c) 2005, 2007 committers of openArchitectureWare 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: * committers of openArchitectureWare - initial API and implementation *******************************************************************************/ package org.eclipse.xtend.expression.parser; import junit.framework.TestCase; import org.eclipse.internal.xtend.expression.ast.BooleanLiteral; import org.eclipse.internal.xtend.expression.ast.Case; import org.eclipse.internal.xtend.expression.ast.Cast; import org.eclipse.internal.xtend.expression.ast.ChainExpression; import org.eclipse.internal.xtend.expression.ast.Expression; import org.eclipse.internal.xtend.expression.ast.FeatureCall; import org.eclipse.internal.xtend.expression.ast.IfExpression; import org.eclipse.internal.xtend.expression.ast.IntegerLiteral; import org.eclipse.internal.xtend.expression.ast.ListLiteral; import org.eclipse.internal.xtend.expression.ast.NullLiteral; import org.eclipse.internal.xtend.expression.ast.OperationCall; import org.eclipse.internal.xtend.expression.ast.StringLiteral; import org.eclipse.internal.xtend.expression.ast.SwitchExpression; import org.eclipse.internal.xtend.xtend.parser.ParseFacade; /** * @author Sven Efftinge (http://www.efftinge.de) * @author Arno Haase */ public class ParserTest extends TestCase { private Expression parse(final String expression) { return ParseFacade.expression(expression); } 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); 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().getValue()); assertEquals("\"hallo\"", ((StringLiteral) colLit.getElements()[1]).getLiteralValue().getValue()); } public final void testIfExpression() { final Expression expr = parse("(client.sIdent1 != null) ? client.sIdent1 : \"XXXXXXXX\""); assertTrue(expr instanceof IfExpression); } public void testIfExpression2() throws Exception { final IfExpression e = (IfExpression) parse("if true then true else false"); assertEquals("true",e.getCondition().toString()); } public void testIfExpression3() throws Exception { final IfExpression e = (IfExpression) parse("if true then true else if false then false"); assertEquals(null,((IfExpression)e.getElsePart()).getElsePart()); } 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 { default : true }"); assertNull(expr.getSwitchExpr()); assertTrue(expr.getCases().isEmpty()); assertEquals("true", ((BooleanLiteral) expr.getDefaultExpr()).getLiteralValue().getValue()); expr = (SwitchExpression) parse("switch (\"test\") { case \"horst\": false default : true }"); assertEquals("\"test\"", ((StringLiteral) expr.getSwitchExpr()).getLiteralValue().getValue()); final Case c = expr.getCases().get(0); assertEquals("\"horst\"", ((StringLiteral) c.getCondition()).getLiteralValue().getValue()); assertEquals("false", ((BooleanLiteral) c.getThenPart()).getLiteralValue().getValue()); assertEquals("true", ((BooleanLiteral) expr.getDefaultExpr()).getLiteralValue().getValue()); } 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(3, exp.getStart()); assertEquals(4, exp.getEnd()); } public final void testPositionInfo2() { final Expression exp = parse("/*\n\n\n*/1"); assertEquals(4, exp.getLine()); assertEquals(7, exp.getStart()); assertEquals(8, exp.getEnd()); } public final void testPositionInfo3() { final OperationCall exp = (OperationCall) parse("'/*\n\n\n*/'+1"); assertEquals(1, exp.getLine()); assertEquals(0, exp.getStart()); assertEquals(11, exp.getEnd()); final StringLiteral target = (StringLiteral) exp.getTarget(); assertEquals(1, target.getLine()); assertEquals(0, target.getStart()); assertEquals(9, target.getEnd()); final IntegerLiteral param = (IntegerLiteral) exp.getParams()[0]; assertEquals(4, param.getLine()); assertEquals(10, param.getStart()); assertEquals(11, param.getEnd()); } public final void testTypeLiterals() { final Expression e = parse("{" + " Object,\n" + " String,\n" + "Collection,\n" + " Set,\n" + " List,\n" + " xpand2::Type,\n" + " xpand2::Feature,\n" + " xpand2::Property\n}"); assertNotNull(e); } }