/** * */ package com.sap.furcas.parsergenerator.tcs.t2m.grammar; import static org.junit.Assert.assertEquals; import org.junit.Test; import com.sap.furcas.metamodel.FURCAS.TCS.stubs.ConcreteSyntaxStub; import com.sap.furcas.parsergenerator.TCSSyntaxContainerBean; import com.sap.furcas.parsergenerator.tcs.t2m.grammar.handlerStub.ANTLR3WriterStub; import com.sap.furcas.parsergenerator.tcs.t2m.grammar.handlerStub.MetaLookupStub; import com.sap.furcas.runtime.common.exceptions.MetaModelLookupException; import com.sap.furcas.runtime.parser.exceptions.SyntaxParsingException; import com.sap.furcas.test.testutils.StringListHelper; /** * */ public class TestGrammarGenerator { /** * Test method for {@link com.sap.furcas.parsergenerator.tcs.t2m.grammar.ANTLRGrammarGenerator#generateGrammar()}. * @throws SyntaxParsingException * @throws MetaModelLookupException */ @Test public void testGenerateGrammarFixedString() throws Exception { ANTLR3WriterStub writerStub = new ANTLR3WriterStub(); MetaLookupStub metaStub = new MetaLookupStub(); ConcreteSyntaxStub syntaxStub = new ConcreteSyntaxStub(); TCSSyntaxContainerBean bean = new TCSSyntaxContainerBean(); bean.setSyntax(syntaxStub); ANTLRGrammarGenerator generator = new ANTLRGrammarGenerator(); // first test name has not been set generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals(null, writerStub.grammarName); // test name has been set syntaxStub.name = "SyntaxName"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("SyntaxName", writerStub.grammarName); String replacedLexer = ANTLRGrammarGenerator.DEFAULT_LEXER.replaceAll("%protected", "fragment") .replaceAll("%options", "//") .replaceAll("%v3", "") .replaceAll("%v2.*", ""); assertEquals(replacedLexer, writerStub.fixedString); // test substitution of %protected with fragment syntaxStub.lexer = "test%protectederror"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("testfragmenterror", writerStub.fixedString); // test substitution of %options with // syntaxStub.lexer = "test%optionstest"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("test//test", writerStub.fixedString); // test elimination of v2s and v3s syntaxStub.lexer = "test%v3"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("test", writerStub.fixedString); syntaxStub.lexer = "test%v3test"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("testtest", writerStub.fixedString); syntaxStub.lexer = "test%v2HelloWorld"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("test", writerStub.fixedString); syntaxStub.lexer = "test%v2HelloWorld\n"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("test\n", writerStub.fixedString); syntaxStub.lexer = "test%v2Hello\nWorld"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("test\nWorld", writerStub.fixedString); syntaxStub.lexer = "Hello%v2error\nWorld%v2something\n%v2other"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("Hello\nWorld\n", writerStub.fixedString); // assert k = 1 means backtrack = true is set syntaxStub.syntaxK = 1; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("k = 1;", writerStub.grammarOptions); syntaxStub.syntaxK = -1; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("backtrack = true;", writerStub.grammarOptions); syntaxStub.syntaxK = 0; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals(null, writerStub.grammarOptions); syntaxStub.syntaxK = 2; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals("k = 2;", writerStub.grammarOptions); } @Test public void testGenerateGrammarAdditionalLexerMembers() throws Exception { ANTLR3WriterStub writerStub = new ANTLR3WriterStub(); MetaLookupStub metaStub = new MetaLookupStub(); ConcreteSyntaxStub syntaxStub = new ConcreteSyntaxStub(); TCSSyntaxContainerBean bean = new TCSSyntaxContainerBean(); bean.setSyntax(syntaxStub); ANTLRGrammarGenerator generator = new ANTLRGrammarGenerator(); syntaxStub.lexer = "test1@lexer::members [[testcontent]]test2"; generator.generateGrammar(writerStub, metaStub, bean, null, null); assertEquals(StringListHelper.list("testcontent"), writerStub.additionalMembers); assertEquals("test1test2", writerStub.fixedString); } }