/** * */ package com.sap.furcas.runtime.parser.impl; import static junit.framework.Assert.assertEquals; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import org.junit.Ignore; import org.junit.Test; import com.sap.furcas.parser.tcs.TCSParserFacadeFactory; import com.sap.furcas.runtime.parser.IModelAdapter; import com.sap.furcas.runtime.parser.ParserFacade; import com.sap.furcas.runtime.parser.testbase.stubs.StubModelAdapter; import com.sap.furcas.test.fixture.ScenarioFixtureData; import com.sap.furcas.utils.projects.FileReadHelper; /** * Test class to make sure a generated Parser notifies an Observer of all required events and none more. */ public class TestObservation { @Test public void testTcsParserWithBibText() throws Exception { ParserFacade facade = TCSParserFacadeFactory.INSTANCE.createTCSParserFacade(); File syntaxDefFile = ScenarioFixtureData.BIBTEXT_TCS; InputStream in = new FileInputStream(syntaxDefFile); StubModelAdapter modelHandler = new StubModelAdapter(); ConsistencyChecksObserver testObserver = new ConsistencyChecksObserver(); // SystemOutObserver testObserver = new SystemOutObserver(); facade.parseProductionRule(in, modelHandler, null, null, testObserver); assertEquals(0, testObserver.errorsInRule.size()); assertEquals(112, testObserver.tokensConsumed.size()); assertEquals(0, testObserver.errorTokensConsumed.size()); assertEquals(0, testObserver.ruleContextStack.size()); assertEquals(0, testObserver.sequenceContextStack.size()); assertEquals(58, testObserver.elementsResolved.size()); assertEquals(11, testObserver.outOfContextResolved.size()); assertEquals(0, testObserver.sequenceElementsEnteredNotLeft); assertEquals(0, testObserver.injectorActionsEnteredNotleft); } @Test public void testTcsParserWithTCS() throws Exception { ParserFacade facade = TCSParserFacadeFactory.INSTANCE.createTCSParserFacade(); File syntaxDefFile = ScenarioFixtureData.TCS_OBSOLETE_TCS; InputStream in = new FileInputStream(syntaxDefFile); IModelAdapter modelHandler = new StubModelAdapter(); ConsistencyChecksObserver testObserver = new ConsistencyChecksObserver(); // SystemOutObserver testObserver = new SystemOutObserver(); facade.parseProductionRule(in, modelHandler, null, null, testObserver); assertEquals(0, testObserver.errorsInRule.size()); assertEquals(1516, testObserver.tokensConsumed.size()); assertEquals(0, testObserver.errorTokensConsumed.size()); assertEquals(0, testObserver.ruleContextStack.size()); assertEquals(0, testObserver.sequenceContextStack.size()); assertEquals(1113, testObserver.elementsResolved.size()); assertEquals(254, testObserver.outOfContextResolved.size()); assertEquals(0, testObserver.sequenceElementsEnteredNotLeft); assertEquals(0, testObserver.injectorActionsEnteredNotleft); } @Test public void testTcsParserWithTCSSeparator() throws Exception { ParserFacade facade = TCSParserFacadeFactory.INSTANCE.createTCSParserFacade(); String input = "syntax test{template ->name1::name2::name3;}"; InputStream in = new ByteArrayInputStream(input.getBytes()); IModelAdapter modelHandler = new StubModelAdapter(); ConsistencyChecksObserver testObserver = new ConsistencyChecksObserver(); // SystemOutObserver testObserver = new SystemOutObserver(); facade.parseProductionRule(in, modelHandler, "furcas_tcs_concretesyntax", null, testObserver); } @Test public void testTcsParserWithTCSDelegationObserver() throws Exception { ParserFacade facade = TCSParserFacadeFactory.INSTANCE.createTCSParserFacade(); File syntaxDefFile = ScenarioFixtureData.TCS_OBSOLETE_TCS; InputStream in = new FileInputStream(syntaxDefFile); IModelAdapter modelHandler = new StubModelAdapter(); DelegationParsingObserver delegationObserver = new DelegationParsingObserver(); ConsistencyChecksObserver testObserver = new ConsistencyChecksObserver(); delegationObserver.addParsingObserver(testObserver); // SystemOutObserver testObserver = new SystemOutObserver(); facade.parseProductionRule(in, modelHandler, null, null, delegationObserver); assertEquals(0, testObserver.errorsInRule.size()); assertEquals(1516, testObserver.tokensConsumed.size()); assertEquals(0, testObserver.errorTokensConsumed.size()); assertEquals(0, testObserver.ruleContextStack.size()); assertEquals(0, testObserver.sequenceContextStack.size()); assertEquals(1113, testObserver.elementsResolved.size()); assertEquals(254, testObserver.outOfContextResolved.size()); assertEquals(0, testObserver.sequenceElementsEnteredNotLeft); assertEquals(0, testObserver.injectorActionsEnteredNotleft); } @Test @Ignore("long running Test") public void testTcsParserWithPartialTCSInLoop() throws Exception { File syntaxDefFile = ScenarioFixtureData.TCS_OBSOLETE_TCS; // InputStream fileInin = new FileInputStream(syntaxDefFile); byte[] oldBytes = FileReadHelper.readBytesFromFile(syntaxDefFile); for (int j = 0; j < oldBytes.length; j++) { byte[] loopBytes = new byte[j]; System.arraycopy(oldBytes, 0, loopBytes, 0, j); ByteArrayInputStream in = new ByteArrayInputStream(loopBytes); ParserFacade facade = TCSParserFacadeFactory.INSTANCE.createTCSParserFacade(); IModelAdapter modelHandler = new StubModelAdapter(); ConsistencyChecksObserver testObserver = new ConsistencyChecksObserver(); // SystemOutObserver testObserver = new SystemOutObserver(); facade.parseProductionRule(in, modelHandler, null, null, testObserver); } } @Test public void testTcsParserWithATL() throws Exception { ParserFacade facade = TCSParserFacadeFactory.INSTANCE.createTCSParserFacade(); File syntaxDefFile = ScenarioFixtureData.ATL_TCS; InputStream in = new FileInputStream(syntaxDefFile); IModelAdapter modelHandler = new StubModelAdapter(); ConsistencyChecksObserver testObserver = new ConsistencyChecksObserver(); // SystemOutObserver testObserver = new SystemOutObserver(); facade.parseProductionRule(in, modelHandler, null, null, testObserver); assertEquals(0, testObserver.errorsInRule.size()); assertEquals(1732, testObserver.tokensConsumed.size()); assertEquals(0, testObserver.errorTokensConsumed.size()); assertEquals(0, testObserver.ruleContextStack.size()); assertEquals(0, testObserver.sequenceContextStack.size()); assertEquals(1074, testObserver.elementsResolved.size()); assertEquals(234, testObserver.outOfContextResolved.size()); assertEquals(0, testObserver.sequenceElementsEnteredNotLeft); assertEquals(0, testObserver.injectorActionsEnteredNotleft); } // @Test // public void testNoAlt() throws Exception { // String invalidSample = "syntax MyLanguage { \n" // +"template Attribute abstract abstract;\n" // +"}"; // InputStream in = new ByteArrayInputStream(invalidSample.getBytes()); // // Connection con = MOINTCSMetaConnectionProvider.getTestConnection(); // //SystemOutObserver testObserver = new SystemOutObserver(); // ModelInjectionResult modelParsingResult = // TCS2MOINInjectorFacade.parseSyntaxDefinition(in, con, null, // testObserver); // assertNotNull(modelParsingResult); // assertNotNull(modelParsingResult.getResult().getErrors()); // assertEquals(1, modelParsingResult.getResult().getErrors().size()); // ParsingError e1 = modelParsingResult.getResult().getErrors().get(0); // assertEquals(2, e1.getLine()); // assertEquals(28, e1.getPosition()); // assertEquals(2, e1.getEndLine()); // assertEquals(36, e1.getEndPosition()); // } }