package com.sap.furcas.ide.editor.contentassist.processor;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import com.sap.furcas.ide.editor.test.utils.ClassLookupImpl;
import com.sap.furcas.parsergenerator.TCSSyntaxContainerBean;
import com.sap.furcas.runtime.parser.incremental.testbase.GeneratedParserAndFactoryTestConfiguration;
import com.sap.furcas.runtime.parser.testbase.MockPartitionAssignmentHandler;
import com.sap.furcas.test.fixture.ScenarioFixtureData;
import com.sap.furcas.test.testutils.ResourceTestHelper;
import com.sap.ide.cts.parser.incremental.IncrementalParserFacade;
@Ignore("Fails after the EMF migration. Failing for unknown reasons.")
public class TestCtsContentAssistProcessorTCS extends CtsContentAssistProcessorTestBase {
private static final String LANGUAGE = "TCSObsolete";
private static final File TCS = ScenarioFixtureData.TCS_OBSOLETE_TCS;
private static final File[] METAMODELS = { ScenarioFixtureData.TCS_OBSOLETE_METAMODEL };
private static IncrementalParserFacade facade;
@BeforeClass
public static void setupParser() throws Exception {
GeneratedParserAndFactoryTestConfiguration testConfig = new GeneratedParserAndFactoryTestConfiguration(
LANGUAGE, TCS, METAMODELS);
ResourceSet resourceSet = testConfig.getSourceConfiguration().getResourceSet();
TCSSyntaxContainerBean syntaxBean = parseSyntax(testConfig);
Resource transientParsingResource = ResourceTestHelper.createTransientResource(resourceSet);
facade = generateParserAndParserFactoryForLanguage(syntaxBean, testConfig, resourceSet,
new MockPartitionAssignmentHandler(transientParsingResource), new ClassLookupImpl());
}
@Test
public void testSequenceAfterSyntaxNameProperty() throws Exception {
initProcessorForFixture("Sequence.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("(");
expected.add("{");
assertDisplayStrings(expected, 0, 16);
}
@Test
public void testSequenceAfterSyntaxOpeningBracket() throws Exception {
initProcessorForFixture("Sequence.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("enumerationTemplate");
expected.add("enumerationTemplate -> : ;");
expected.add("enumerationTemplate -> ;");
expected.add("enumerationTemplate name : ;");
expected.add("enumerationTemplate name :: name : ;");
expected.add("enumerationTemplate name :: name ;");
expected.add("enumerationTemplate name ;");
expected.add("function");
expected.add("function functionName ( -> ) : ;");
expected.add("function functionName ( name ) : ;");
expected.add("function functionName ( name :: name ) : ;");
expected.add("keywords");
expected.add("lexer");
expected.add("omitted");
expected.add("operatorTemplate");
expected.add("operatorTemplate -> ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate -> ( operators = , source = -> name ) ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) ;");
expected.add("operators");
expected.add("operators { }");
expected.add("primitiveTemplate");
expected.add("primitiveTemplate templateName for -> using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name :: name using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name using tokenName : value = value ;");
expected.add("symbols");
expected.add("template");
expected.add("template -> : ;");
expected.add("template -> ;");
expected.add("template name : ;");
expected.add("template name :: name : ;");
expected.add("template name :: name ;");
expected.add("template name ;");
expected.add("token");
expected.add("token name : ;");
expected.add("}");
assertDisplayStrings(expected, 1, 0);
}
@Test
public void testSequenceAfterEndOfFirstTemplate() throws Exception {
initProcessorForFixture("Sequence.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("enumerationTemplate");
expected.add("enumerationTemplate -> : ;");
expected.add("enumerationTemplate -> ;");
expected.add("enumerationTemplate name : ;");
expected.add("enumerationTemplate name :: name : ;");
expected.add("enumerationTemplate name :: name ;");
expected.add("enumerationTemplate name ;");
expected.add("function");
expected.add("function functionName ( -> ) : ;");
expected.add("function functionName ( name ) : ;");
expected.add("function functionName ( name :: name ) : ;");
expected.add("keywords");
expected.add("lexer");
expected.add("omitted");
expected.add("operatorTemplate");
expected.add("operatorTemplate -> ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate -> ( operators = , source = -> name ) ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) ;");
expected.add("operators");
expected.add("operators { }");
expected.add("primitiveTemplate");
expected.add("primitiveTemplate templateName for -> using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name :: name using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name using tokenName : value = value ;");
expected.add("symbols");
expected.add("template");
expected.add("template -> : ;");
expected.add("template -> ;");
expected.add("template name : ;");
expected.add("template name :: name : ;");
expected.add("template name :: name ;");
expected.add("template name ;");
expected.add("token");
expected.add("token name : ;");
expected.add("}");
assertDisplayStrings(expected, 5, 0);
}
@Test
public void testSequenceAfterArrow() throws Exception {
initProcessorForFixture("Sequence.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("#");
expected.add("(");
expected.add(":");
expected.add(";");
expected.add("abstract");
expected.add("addToContext");
expected.add("context");
expected.add("deep");
expected.add("main");
expected.add("multi");
expected.add("namesEntry");
expected.add("nonPrimary");
expected.add("operatored");
expected.add("prefix");
expected.add("referenceOnly");
assertDisplayStrings(expected, 2, 13);
}
@Test
public void testSequenceAfterA() throws Exception {
initProcessorForFixture("Sequence.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("#");
expected.add("(");
expected.add(":");
expected.add("::");
expected.add(";");
expected.add("abstract");
expected.add("addToContext");
expected.add("context");
expected.add("deep");
expected.add("main");
expected.add("multi");
expected.add("nonPrimary");
expected.add("operatored");
expected.add("prefix");
expected.add("referenceOnly");
assertDisplayStrings(expected, 2, 16);
}
@Test
public void testSequenceAfterSeparator() throws Exception {
initProcessorForFixture("Sequence.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("namesEntry");
assertDisplayStrings(expected, 2, 23);
}
@Test
public void testEnumerationAfterSyntaxNameProperty() throws Exception {
initProcessorForFixture("Enumeration.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("(");
expected.add("{");
assertDisplayStrings(expected, 0, 19);
}
@Test
public void testEnumerationAfterSyntaxOpeningBracket() throws Exception {
initProcessorForFixture("Enumeration.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("enumerationTemplate");
expected.add("enumerationTemplate -> : ;");
expected.add("enumerationTemplate -> ;");
expected.add("enumerationTemplate name : ;");
expected.add("enumerationTemplate name :: name : ;");
expected.add("enumerationTemplate name :: name ;");
expected.add("enumerationTemplate name ;");
expected.add("function");
expected.add("function functionName ( -> ) : ;");
expected.add("function functionName ( name ) : ;");
expected.add("function functionName ( name :: name ) : ;");
expected.add("keywords");
expected.add("lexer");
expected.add("omitted");
expected.add("operatorTemplate");
expected.add("operatorTemplate -> ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate -> ( operators = , source = -> name ) ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) ;");
expected.add("operators");
expected.add("operators { }");
expected.add("primitiveTemplate");
expected.add("primitiveTemplate templateName for -> using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name :: name using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name using tokenName : value = value ;");
expected.add("symbols");
expected.add("template");
expected.add("template -> : ;");
expected.add("template -> ;");
expected.add("template name : ;");
expected.add("template name :: name : ;");
expected.add("template name :: name ;");
expected.add("template name ;");
expected.add("token");
expected.add("token name : ;");
expected.add("}");
assertDisplayStrings(expected, 1, 0);
}
@Test
public void testEnumerationAfterEndOfFirstTemplate() throws Exception {
initProcessorForFixture("Enumeration.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("enumerationTemplate");
expected.add("enumerationTemplate -> : ;");
expected.add("enumerationTemplate -> ;");
expected.add("enumerationTemplate name : ;");
expected.add("enumerationTemplate name :: name : ;");
expected.add("enumerationTemplate name :: name ;");
expected.add("enumerationTemplate name ;");
expected.add("function");
expected.add("function functionName ( -> ) : ;");
expected.add("function functionName ( name ) : ;");
expected.add("function functionName ( name :: name ) : ;");
expected.add("keywords");
expected.add("lexer");
expected.add("omitted");
expected.add("operatorTemplate");
expected.add("operatorTemplate -> ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate -> ( operators = , source = -> name ) ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) ;");
expected.add("operators");
expected.add("operators { }");
expected.add("primitiveTemplate");
expected.add("primitiveTemplate templateName for -> using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name :: name using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name using tokenName : value = value ;");
expected.add("symbols");
expected.add("template");
expected.add("template -> : ;");
expected.add("template -> ;");
expected.add("template name : ;");
expected.add("template name :: name : ;");
expected.add("template name :: name ;");
expected.add("template name ;");
expected.add("token");
expected.add("token name : ;");
expected.add("}");
assertDisplayStrings(expected, 12, 0);
}
@Test
public void testEnumerationAutoCreateArgValue() throws Exception {
initProcessorForFixture("Enumeration.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("always");
expected.add("ifmissing");
expected.add("never");
expected.add("value");
assertDisplayStrings(expected, 8, 77);
}
@Test
public void testAfterEnumerationAutoCreateArgValue() throws Exception {
initProcessorForFixture("Enumeration.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add(",");
expected.add("}");
assertDisplayStrings(expected, 8, 86);
}
@Test
public void testAfterEnumerationAutoCreateArgValueAndSeparator() throws Exception {
initProcessorForFixture("Enumeration.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add(",");
expected.add("as");
expected.add("as = template");
expected.add("autoCreate");
expected.add("autoCreate = value");
expected.add("createAs");
expected.add("createAs =");
expected.add("createIn");
expected.add("createIn =");
expected.add("disambiguate");
expected.add("disambiguate = disambiguation");
expected.add("filter");
expected.add("filter = filter");
expected.add("forcedLower");
expected.add("forcedLower = value");
expected.add("forcedUpper");
expected.add("forcedUpper = value");
expected.add("importContext");
expected.add("lookIn");
expected.add("lookIn =");
expected.add("mode");
expected.add("mode = mode");
expected.add("partial");
expected.add("query");
expected.add("query = query");
expected.add("refersTo");
expected.add("refersTo = propertyName");
expected.add("separator");
expected.add("separator =");
assertDisplayStrings(expected, 8, 87);
}
@Test
public void testFunctionCallAfterSyntaxNameProperty() throws Exception {
initProcessorForFixture("FunctionCall.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("(");
expected.add("{");
assertDisplayStrings(expected, 0, 20);
}
@Test
public void testFunctionCallAfterSyntaxOpeningBracket() throws Exception {
initProcessorForFixture("FunctionCall.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("enumerationTemplate");
expected.add("enumerationTemplate -> : ;");
expected.add("enumerationTemplate -> ;");
expected.add("enumerationTemplate name : ;");
expected.add("enumerationTemplate name :: name : ;");
expected.add("enumerationTemplate name :: name ;");
expected.add("enumerationTemplate name ;");
expected.add("function");
expected.add("function functionName ( -> ) : ;");
expected.add("function functionName ( name ) : ;");
expected.add("function functionName ( name :: name ) : ;");
expected.add("keywords");
expected.add("lexer");
expected.add("omitted");
expected.add("operatorTemplate");
expected.add("operatorTemplate -> ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate -> ( operators = , source = -> name ) ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) ;");
expected.add("operators");
expected.add("operators { }");
expected.add("primitiveTemplate");
expected.add("primitiveTemplate templateName for -> using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name :: name using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name using tokenName : value = value ;");
expected.add("symbols");
expected.add("template");
expected.add("template -> : ;");
expected.add("template -> ;");
expected.add("template name : ;");
expected.add("template name :: name : ;");
expected.add("template name :: name ;");
expected.add("template name ;");
expected.add("token");
expected.add("token name : ;");
expected.add("}");
assertDisplayStrings(expected, 1, 0);
}
@Test
public void testFunctionCallAfterEndOfFirstTemplate() throws Exception {
initProcessorForFixture("FunctionCall.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("enumerationTemplate");
expected.add("enumerationTemplate -> : ;");
expected.add("enumerationTemplate -> ;");
expected.add("enumerationTemplate name : ;");
expected.add("enumerationTemplate name :: name : ;");
expected.add("enumerationTemplate name :: name ;");
expected.add("enumerationTemplate name ;");
expected.add("function");
expected.add("function functionName ( -> ) : ;");
expected.add("function functionName ( name ) : ;");
expected.add("function functionName ( name :: name ) : ;");
expected.add("keywords");
expected.add("lexer");
expected.add("omitted");
expected.add("operatorTemplate");
expected.add("operatorTemplate -> ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate -> ( operators = , source = -> name ) ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate -> ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name ( operators = , source = strucfeature ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = -> name ) ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) : ;");
expected.add("operatorTemplate name :: name ( operators = , source = strucfeature ) ;");
expected.add("operators");
expected.add("operators { }");
expected.add("primitiveTemplate");
expected.add("primitiveTemplate templateName for -> using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name :: name using tokenName : value = value ;");
expected.add("primitiveTemplate templateName for name using tokenName : value = value ;");
expected.add("symbols");
expected.add("template");
expected.add("template -> : ;");
expected.add("template -> ;");
expected.add("template name : ;");
expected.add("template name :: name : ;");
expected.add("template name :: name ;");
expected.add("template name ;");
expected.add("token");
expected.add("token name : ;");
expected.add("}");
assertDisplayStrings(expected, 5, 0);
}
@Ignore
@Test
public void testFunctionCallBeforeDollar() throws Exception {
initProcessorForFixture("FunctionCall.tcs", null, facade);
List<String> expected = new ArrayList<String>();
// TODO add query to limit keywords to those defined/used in TCS
assertDisplayStrings(expected, 3, 4);
}
@Test
public void testFunctionCallAfterDollar() throws Exception {
initProcessorForFixture("FunctionCall.tcs", null, facade);
List<String> expected = new ArrayList<String>();
expected.add("calledFunction");
// refersTo property value query result
expected.add("reference");
assertDisplayStrings(expected, 3, 5);
}
}