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; /** * Simple Test for the custom Expression language that uses lots of conditionals. */ public class TestConditionalExpression extends GeneratedParserBasedTest { private static final String LANGUAGE = "ExpressionConditional"; private static final File TCS = ScenarioFixtureData.EXPRESSION_CONDITIONAL_TCS; private static final File[] METAMODELS = { ScenarioFixtureData.EXPRESSION_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 testAcceptSamples() throws Exception { // samples don't make much sense unless you understand the templates of the syntax parsingHelper.parseString("fourty-two", 0); parsingHelper.parseString("noInt", 0); parsingHelper.parseString("-twelve", 0); parsingHelper.parseString("nothing", 0); parsingHelper.parseString("Hello", 0); parsingHelper.parseString("trueS", 0); parsingHelper.parseString("falseS", 0); parsingHelper.parseString("falseS, trueS, Hello, nothing, -twelve, fourty-two", 0); } @Test public void testIntValConditional() throws Exception { StubModelAdapter stubModelHandler = parsingHelper.parseString("fourty-two", 0); Collection<StubModelElement> values = stubModelHandler.getElementsOfType("expression::ValueExpression"); assertEquals(1, values.size()); StubModelElement element = values.iterator().next(); assertEquals(new Integer(42), element.get("value")); // in this case, we should still get a ValueExpression, but with value property not set stubModelHandler = parsingHelper.parseString("noInt", 0); values = stubModelHandler.getElementsOfType("expression::ValueExpression"); assertEquals(1, values.size()); element = values.iterator().next(); assertEquals(null, element.get("value")); } @Test public void testNegIntValConditional() throws Exception { // here, 2 properties should be set in the then case, and one in the else case StubModelAdapter stubModelHandler = parsingHelper.parseString("-twelve", 0); Collection<StubModelElement> values = stubModelHandler.getElementsOfType("expression::NegativeIntExpression"); assertEquals(1, values.size()); StubModelElement element = values.iterator().next(); assertEquals(new Integer(12), element.get("value")); assertEquals(Boolean.TRUE, element.get("isNegative")); stubModelHandler = parsingHelper.parseString("nothing", 0); values = stubModelHandler.getElementsOfType("expression::NegativeIntExpression"); assertEquals(1, values.size()); element = values.iterator().next(); assertEquals(Boolean.FALSE, element.get("isNegative")); } @Test public void testStringValConditional() throws Exception { StubModelAdapter stubModelHandler = parsingHelper.parseString("Hello", 0); Collection<StubModelElement> values = stubModelHandler.getElementsOfType("expression::StringExpression"); assertEquals(1, values.size()); StubModelElement element = values.iterator().next(); assertEquals("World", element.get("value")); // in this case, we should still get a StringExpression, but with value property not set stubModelHandler = parsingHelper.parseString("Bye", 0); values = stubModelHandler.getElementsOfType("expression::StringExpression"); assertEquals(1, values.size()); element = values.iterator().next(); assertEquals(null, element.get("value")); } @Test public void testBoolConditional() throws Exception { StubModelAdapter stubModelHandler = parsingHelper.parseString("trueS", 0); Collection<StubModelElement> values = stubModelHandler.getElementsOfType("expression::BooleanExpression"); assertEquals(1, values.size()); StubModelElement element = values.iterator().next(); assertEquals(Boolean.TRUE, element.get("value")); // in this case, we should still get a BooleanExpression, but with value false stubModelHandler = parsingHelper.parseString("falseS", 0); values = stubModelHandler.getElementsOfType("expression::BooleanExpression"); assertEquals(1, values.size()); element = values.iterator().next(); assertEquals(Boolean.FALSE, element.get("value")); } }