package com.sap.furcas.parser.tcs.scenario; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import java.io.File; import java.util.Collection; import java.util.Iterator; 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 Problem language, which acts like a log file. */ public class TestProblem extends GeneratedParserBasedTest { private static final String LANGUAGE = "Problem"; private static final File TCS = ScenarioFixtureData.PROBLEM_TCS; private static final File[] METAMODELS = { ScenarioFixtureData.PROBLEM_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 syntax errors cause parsing errors * * @throws Exception */ @Test public void testSampleDirect() throws Exception { String sample = "error 'testerror' at 'somewhere';\n" + "warning 'testwarning' at 'somewhereelse';\n"; StubModelAdapter stubModelHandler = parsingHelper.parseString(sample, 0); Collection<StubModelElement> problems = stubModelHandler.getElementsOfType("Problem::Problem"); assertEquals(2, problems.size()); Iterator<StubModelElement> it = problems.iterator(); StubModelElement element = it.next(); StubModelElement element2 = it.next(); StubModelElement severity = (StubModelElement) element.get("severity"); StubModelElement severity2 = (StubModelElement) element2.get("severity"); assertNotSame(severity.type, severity2.type); if (!"error".equals(severity.type)) { StubModelElement temp = severity; severity = severity2; severity2 = temp; temp = element; element = element2; element2 = temp; } assertEquals("error", severity.type); assertEquals("testerror", element.get("description")); assertEquals("somewhere", element.get("location")); assertEquals("warning", severity2.type); assertEquals("testwarning", element2.get("description")); assertEquals("somewhereelse", element2.get("location")); } }