package com.sap.furcas.parser.tcs.scenario;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.util.Collection;
import org.junit.BeforeClass;
import org.junit.Test;
import com.sap.furcas.parsergenerator.TCSSyntaxContainerBean;
import com.sap.furcas.runtime.parser.ParserFacade;
import com.sap.furcas.runtime.parser.testbase.GeneratedParserBasedTest;
import com.sap.furcas.runtime.parser.testbase.GeneratedParserTestConfiguration;
import com.sap.furcas.runtime.parser.testbase.stubs.StubModelAdapter;
import com.sap.furcas.runtime.parser.testbase.stubs.StubModelElement;
import com.sap.furcas.runtime.parser.testbase.stubs.StubParsingHelper;
import com.sap.furcas.test.fixture.ScenarioFixtureData;
/**
* Currently fails because Enums are not implemented yet
*/
public class TestFPathGeneration extends GeneratedParserBasedTest {
private static final String LANGUAGE = "FPath";
private static final File TCS = ScenarioFixtureData.FPATH_TCS;
private static final File[] METAMODELS = { ScenarioFixtureData.FPATH1_METAMODEL, ScenarioFixtureData.FPATH_METAMODEL };
private static StubParsingHelper parsingHelper;
@BeforeClass
public static void setupParser() throws Exception {
GeneratedParserTestConfiguration testConfig = new GeneratedParserTestConfiguration(LANGUAGE, TCS, METAMODELS);
TCSSyntaxContainerBean syntaxBean = parseSyntax(testConfig);
ParserFacade facade = generateParserForLanguage(syntaxBean, testConfig, new ClassLookupImpl());
parsingHelper = new StubParsingHelper(facade);
}
@Test
public void testSample1() throws Exception {
String sample = "myFunction(-$root,$a+$b)*.";
StubModelAdapter stubModelHandler = parsingHelper.parseString(sample, 0);
// some asserts to make sure something reasonable has been parsed
Collection<StubModelElement> functions = stubModelHandler.getElementsOfType("FPath::FunctionCallExp");
assertEquals(1, functions.size());
StubModelElement function = functions.iterator().next();
assertEquals("myFunction", function.get("name"));
Collection<StubModelElement> vars = stubModelHandler.getElementsOfType("FPath::VariableExp");
assertEquals(3, vars.size());
}
@Test
public void testSample2() throws Exception {
String sample = "size($c/interface::*[required(.) and not(bound(.))]) > 0";
StubModelAdapter stubModelHandler = parsingHelper.parseString(sample, 0);
// some asserts to make sure something reasonable has been parsed
Collection<StubModelElement> functions = stubModelHandler.getElementsOfType("FPath::FunctionCallExp");
assertEquals(3, functions.size()); // functions: size, required, bound
Collection<StubModelElement> vars = stubModelHandler.getElementsOfType("FPath::VariableExp");
assertEquals(1, vars.size());
Collection<StubModelElement> binOps = stubModelHandler.getElementsOfType("FPath::BinaryOperatorExp");
assertEquals(2, binOps.size()); // and, >
}
@Test
public void testSample3() throws Exception {
String sample = "$itf/sibling::*/interface::*[provided(.)][subtype(., $itf)]";
StubModelAdapter stubModelHandler = parsingHelper.parseString(sample, 0);
Collection<StubModelElement> functions = stubModelHandler.getElementsOfType("FPath::Step");
assertEquals(2, functions.size()); // functions: size, required, bound
}
}