/* * <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.xtend; import org.eclipse.gmf.internal.xpand.expression.ast.BooleanLiteral; import org.eclipse.gmf.internal.xpand.expression.ast.DeclaredParameter; import org.eclipse.gmf.internal.xpand.xtend.ast.CreateExtensionStatement; import org.eclipse.gmf.internal.xpand.xtend.ast.ExpressionExtensionStatement; import org.eclipse.gmf.internal.xpand.xtend.ast.ExtensionFile; import org.eclipse.gmf.internal.xpand.xtend.ast.ImportStatement; import org.eclipse.gmf.internal.xpand.xtend.ast.JavaExtensionStatement; public class ExtensionParserTest extends AbstractXtendTest { public final void testSimple() { final ExtensionFile file = parse("trueFunc() :true;"); assertTrue(file.getNsImports().isEmpty()); assertTrue(file.getExtImports().isEmpty()); assertEquals(1, file.getExtensions().size()); final ExpressionExtensionStatement fd = (ExpressionExtensionStatement) file.getExtensions().get(0); assertEquals("trueFunc", fd.getName()); assertTrue(fd.getFormalParameters().isEmpty()); assertTrue(fd.getExpression() instanceof BooleanLiteral); } public final void testWithImportAndComments() { final ExtensionFile file = parse("// test \n" + "import \"oaw\"; \n" + "/* \n" + " * Meine Funktion \n" + " */ \n" + "trueFunc() :true; \n"); assertEquals(1, file.getNsImports().size()); final ImportStatement imp = (ImportStatement) file.getNsImports().get(0); assertEquals("oaw", imp.getValue()); assertTrue(file.getExtImports().isEmpty()); assertEquals(1, file.getExtensions().size()); final ExpressionExtensionStatement fd = (ExpressionExtensionStatement) file.getExtensions().get(0); assertEquals("trueFunc", fd.getName()); assertTrue(fd.getFormalParameters().isEmpty()); assertTrue(fd.getExpression() instanceof BooleanLiteral); } public final void testWithEverything() { final ExtensionFile file = parse("import \"oaw\"; \n" + "import \"http://ecore/x\"; \n" + "extension test::TestExtension; \n" + "\n" + "private Void dump(Object obj) :JAVA java.util.String.valueOf(char) ; \n" + "\n" + "/* \n" + " * Meine Funktion \n" + " */ \n" + "trueFunc() :true; \n" + "\n" + "Void dump(String s) : JAVA de.DefaultImpl.doStuff(java.util.Collection,java.util.Set) ; \n"); assertEquals(2, file.getNsImports().size()); final ImportStatement imp = (ImportStatement) file.getNsImports().get(1); assertEquals("http://ecore/x", imp.getValue()); assertEquals(1, file.getExtImports().size()); final ImportStatement extImp = (ImportStatement) file.getExtImports().get(0); assertEquals("test::TestExtension", extImp.getValue()); assertEquals(3, file.getExtensions().size()); final JavaExtensionStatement ext1 = (JavaExtensionStatement) file.getExtensions().get(0); assertNotNull(ext1.getJavaType()); assertEquals("dump", ext1.getName()); assertTrue(ext1.isPrivate()); final DeclaredParameter param = (DeclaredParameter) ext1.getFormalParameters().get(0); assertEquals("obj", param.getName().getValue()); assertEquals("Object", param.getType().getValue()); final ExpressionExtensionStatement fd = (ExpressionExtensionStatement) file.getExtensions().get(1); assertEquals("trueFunc", fd.getName()); assertTrue(fd.getFormalParameters().isEmpty()); assertTrue(fd.getExpression() instanceof BooleanLiteral); } public final void testDoubleSemi() { final ExtensionFile file = parse("String dump1(String s) :s ;;" + "\n" + "String dump2(String s) :s ; \n"); // TODO should 'fail();' because of the two colons } public final void testCreateExtension() { final ExtensionFile file = parse("create List[String] l test(String s) : l.add(s) ;"); final CreateExtensionStatement c = (CreateExtensionStatement) file.getExtensions().get(0); assertNotNull(c); assertEquals("List[String]", c.getReturnTypeIdentifier().getValue()); assertEquals("test", c.getName()); // TODO would be great to access return variable name "l" to make sure it's "l", not "this" } }