blob: 3dac3a722d38d7c0536b7dcbccbffbaf06e38fa4 [file] [log] [blame]
/*
* <copyright>
*
* Copyright (c) 2005, 2009 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
* Alexander Shatalin (Borland) - initial API and implementation
*
* </copyright>
*/
package org.eclipse.gmf.internal.xpand.codeassist;
import java.util.List;
import java.util.Stack;
import junit.framework.TestCase;
import org.eclipse.gmf.internal.xpand.BuiltinMetaModel;
import org.eclipse.gmf.internal.xpand.ast.Advice;
import org.eclipse.gmf.internal.xpand.editor.Activator;
import org.eclipse.gmf.internal.xpand.model.ExecutionContext;
public class FastAnalyzerTest extends TestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
if (Activator.getDefault() == null) {
new Activator();
}
}
public final void testComputeStack1() {
final String txt = tag("DEFINE test(String txt) FOR Entity") + tag("FOREACH txt.list AS c") + tag("doStuff");
final Stack<StackElement> s = FastAnalyzer.computeStack(txt);
assertEquals(2, s.size());
StackElement se = s.pop();
assertEquals(XpandTokens.FOREACH, se.block);
LazyVar v = se.variables.get("c");
assertNotNull(v);
assertEquals("txt.list", v.expression);
assertEquals("c", v.name);
se = s.pop();
assertEquals(XpandTokens.DEFINE, se.block);
v = se.variables.get("txt");
assertNotNull(v);
assertEquals("String", v.typeName);
assertEquals("txt", v.name);
v = se.variables.get(ExecutionContext.IMPLICIT_VARIABLE);
assertNotNull(v);
assertEquals("Entity", v.typeName);
assertEquals(ExecutionContext.IMPLICIT_VARIABLE, v.name);
}
public final void testComputeStackWithIterator() {
final String txt = tag("DEFINE test(String txt) FOR Entity") + tag("FOREACH txt.list AS c ITERATOR i") + tag("doStuff");
final Stack<StackElement> s = FastAnalyzer.computeStack(txt);
assertEquals(2, s.size());
StackElement se = s.pop();
assertEquals(XpandTokens.FOREACH, se.block);
LazyVar v = se.variables.get("c");
assertNotNull(v);
assertEquals("txt.list", v.expression);
assertEquals("c", v.name);
v = se.variables.get("i");
assertNotNull(v);
assertEquals("xpand2::Iterator", v.typeName);
assertEquals("i", v.name);
se = s.pop();
assertEquals(XpandTokens.DEFINE, se.block);
v = se.variables.get("txt");
assertNotNull(v);
assertEquals("String", v.typeName);
assertEquals("txt", v.name);
v = se.variables.get(ExecutionContext.IMPLICIT_VARIABLE);
assertNotNull(v);
assertEquals("Entity", v.typeName);
assertEquals(ExecutionContext.IMPLICIT_VARIABLE, v.name);
}
public final void testComputeStack11() {
final String txt = tag("AROUND *test* (String txt) FOR Entity") + tag("FOREACH txt.list AS c") + tag("doStuff");
final Stack<StackElement> s = FastAnalyzer.computeStack(txt);
assertEquals(2, s.size());
StackElement se = s.pop();
assertEquals(XpandTokens.FOREACH, se.block);
LazyVar v = se.variables.get("c");
assertNotNull(v);
assertEquals("txt.list", v.expression);
assertEquals("c", v.name);
se = s.pop();
assertEquals(XpandTokens.AROUND, se.block);
v = se.variables.get("txt");
assertNotNull(v);
assertEquals("String", v.typeName);
assertEquals("txt", v.name);
v = se.variables.get(ExecutionContext.IMPLICIT_VARIABLE);
assertNotNull(v);
assertEquals("Entity", v.typeName);
assertEquals(ExecutionContext.IMPLICIT_VARIABLE, v.name);
}
public final void testComputeStack12() {
final String txt = tag("AROUND *features(*) FOR ecore::EStructuralFeature ")
+ tag("\n" + "logWarn(targetDef.name+\" FOR \"+targetDef.targetType) ") + tag("\n" + "targ")
+ tag("doStuff");
final Stack<StackElement> s = FastAnalyzer.computeStack(txt);
assertEquals(1, s.size());
final StackElement se = s.pop();
assertEquals(XpandTokens.AROUND, se.block);
LazyVar v = se.variables.get(ExecutionContext.IMPLICIT_VARIABLE);
assertNotNull(v);
assertEquals("ecore::EStructuralFeature", v.typeName);
v = se.variables.get(Advice.DEF_VAR_NAME);
assertNotNull(v);
assertEquals(BuiltinMetaModel.DEFINITION_TYPE.getName(), v.typeName);
}
public String tag(final String txt) {
return XpandTokens.LT + txt + XpandTokens.RT;
}
public final void testComputeStack2() {
final String txt = tag("DEFINE test(String txt, List[oaw::Type] typeList) FOR Entity")
+ tag("FOREACH txt.list AS c") + tag("c.stuff") + tag("ENDFOREACH")
+ tag("LET stuff(txt+'holla') AS stuff") + tag("stuff.bla");
final Stack<StackElement> s = FastAnalyzer.computeStack(txt);
assertEquals(2, s.size());
StackElement se = s.pop();
assertEquals(XpandTokens.LET, se.block);
LazyVar v = se.variables.get("stuff");
assertNotNull(v);
assertEquals("stuff(txt+'holla')", v.expression);
assertEquals("stuff", v.name);
se = s.pop();
assertEquals(XpandTokens.DEFINE, se.block);
v = se.variables.get("txt");
assertNotNull(v);
assertEquals("String", v.typeName);
assertEquals("txt", v.name);
v = se.variables.get("typeList");
assertNotNull(v);
assertEquals("List[oaw::Type]", v.typeName);
assertEquals("typeList", v.name);
v = se.variables.get(ExecutionContext.IMPLICIT_VARIABLE);
assertNotNull(v);
assertEquals("Entity", v.typeName);
assertEquals(ExecutionContext.IMPLICIT_VARIABLE, v.name);
}
public final void testIsInTag() {
assertFalse(FastAnalyzer.isInTag("test"));
assertFalse(FastAnalyzer.isInTag(XpandTokens.RT + "test"));
assertFalse(FastAnalyzer.isInTag(XpandTokens.LT + "test" + XpandTokens.RT));
assertTrue(FastAnalyzer.isInTag(XpandTokens.LT + "test"));
assertTrue(FastAnalyzer.isInTag(XpandTokens.LT + "test" + XpandTokens.RT + "test" + XpandTokens.LT));
}
public final void testIsInImport() {
assertFalse(FastAnalyzer.isInImport(XpandTokens.RT + "IMPORT"));
assertFalse(FastAnalyzer.isInImport(XpandTokens.LT + "IMPORT " + XpandTokens.RT));
assertFalse(FastAnalyzer.isInImport("IMPORT"));
assertTrue(FastAnalyzer.isInImport(XpandTokens.LT + "IMPORT "));
assertTrue(FastAnalyzer.isInImport(XpandTokens.LT + "IMPORT org::oaw::"));
}
public final void testIsInExtensionImport() {
assertFalse(FastAnalyzer.isInExtensionImport(XpandTokens.RT + "EXTENSION"));
assertFalse(FastAnalyzer.isInExtensionImport(XpandTokens.LT + "EXTENSION " + XpandTokens.RT));
assertFalse(FastAnalyzer.isInExtensionImport("EXTENSION"));
assertTrue(FastAnalyzer.isInExtensionImport(XpandTokens.LT + "EXTENSION "));
assertTrue(FastAnalyzer.isInExtensionImport(XpandTokens.LT + "EXTENSION org::oaw::"));
}
public final void testFindImports() {
final List<String> imports = FastAnalyzer.findImports(tag("IMPORT 'a1'") + tag("IMPORT 'a::b::c::d::x'"));
assertEquals("a1", imports.get(0));
assertEquals("a::b::c::d::x", imports.get(1));
assertEquals(2, imports.size());
}
public final void testFindExetnsionImports() {
final List<String> imports = FastAnalyzer.findExtensions(tag("EXTENSION a1") + tag("EXTENSION a::b::c::d::x"));
assertEquals("a1", imports.get(0));
assertEquals("a::b::c::d::x", imports.get(1));
assertEquals(2, imports.size());
}
public final void testIsInTypeDecl() {
assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(")));
assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(Str")));
assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s,")));
assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s,oaw:")));
assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s,String txt,")));
assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s) FOR ")));
assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s) FOR oaw")));
// typeSelect is not supported by FastAnalyzer anymore.
// assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("test.typeSelect(")));
// assertTrue(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("test.typeSelect( oaw::")));
assertFalse(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test")));
assertFalse(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String ")));
assertFalse(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s")));
assertFalse(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s)")));
assertFalse(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s) FOR")));
assertFalse(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("DEFINE test(String s) FOR Test ")));
// typeSelect is not supported by FastAnalyzer anymore.
// assertFalse(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("test.typeSelect( oaw ")));
// assertFalse(FastAnalyzer.isInTypeDecl(XpandTokens.LT + ("test.typeSelect( oaw)")));
}
public final void testIsInExpandStatement() {
assertTrue(FastAnalyzer.isInExpand(XpandTokens.LT + ("EXPAND test")));
assertFalse(FastAnalyzer.isInExpand(XpandTokens.LT + ("EXPAND test FOR")));
assertTrue(FastAnalyzer.isInExpand(XpandTokens.LT + ("EXPAND test::Holla::test")));
assertFalse(FastAnalyzer.isInExpand(XpandTokens.LT + ("EXPAND test::Test(s")));
}
}