/** * */ package com.sap.furcas.parsergenerator.tcs.t2m.grammar; import static com.sap.furcas.parsergenerator.testutils.RuleComparisonHelper.tokens; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.junit.Test; import com.sap.furcas.metamodel.FURCAS.TCS.EnumLiteralMapping; import com.sap.furcas.metamodel.FURCAS.TCS.stubs.EnumLiteralMappingStub; import com.sap.furcas.metamodel.FURCAS.TCS.stubs.EnumTemplateStub; import com.sap.furcas.parsergenerator.tcs.t2m.grammar.handlerStub.ANTLR3WriterStub; import com.sap.furcas.parsergenerator.tcs.t2m.grammar.handlerStub.MetaLookupStub; import com.sap.furcas.parsergenerator.tcs.t2m.grammar.handlerStub.MetaModelElementResolutionHelperStub; import com.sap.furcas.parsergenerator.tcs.t2m.grammar.handlerStub.RuleBufferFactoryStub; import com.sap.furcas.parsergenerator.tcs.t2m.grammar.handlerStub.TemplateNamingHelperStub; import com.sap.furcas.runtime.common.interfaces.IMetaModelLookup; import com.sap.furcas.runtime.tcs.TemplateNamingHelper; import com.sap.furcas.test.testutils.StringListHelper; /** * Probably one of the most important tests for DSL Engineering. */ public class TestEnumerationTemplateHandler { @Test public void testAddElement() throws Exception { ANTLR3WriterStub writerStub = new ANTLR3WriterStub(); TemplateNamingHelperStub namingStub = new TemplateNamingHelperStub(); IMetaModelLookup metaLookupStub = new MetaLookupStub(); MetaModelElementResolutionHelperStub resolutionHelperStub = new MetaModelElementResolutionHelperStub(); // Class under test EnumerationTemplateHandler enumHandler = new EnumerationTemplateHandler(writerStub, metaLookupStub, namingStub, resolutionHelperStub); EnumTemplateStub template = new EnumTemplateStub(); template.names = StringListHelper.list("enumerationName"); template.automatic = false; EList<EnumLiteralMapping> mappings = new BasicEList<EnumLiteralMapping>(); template.mappings = mappings ; mappings.add(new EnumLiteralMappingStub("literal", "'sequenceElement'")); mappings.add(new EnumLiteralMappingStub("literal2", "'sequenceElement2'")); RuleBodyBufferFactory ruleBodyBufferFactory = new RuleBufferFactoryStub(); enumHandler.addTemplate(template, ruleBodyBufferFactory); assertTrue(writerStub.rules.size() == 1); String result =writerStub.rules.get(0).toString(); String expected = "enumerationName returns[Object ret2] @init{java.lang.Object ret=null;}" + " :" + " (('sequenceElement'){ret = createEnumLiteral(\"[enumerationName]\", \"literal\");} | ('sequenceElement2'){ret = createEnumLiteral(\"[enumerationName]\", \"literal2\");}) " + "{ " + " ret2=ret; " + " } ;"; List tokens = tokens( expected); List tokens2 = tokens( result); assertEquals(expected + " != " + result, tokens, tokens2); } @Test public void testAutomatic() throws Exception { ANTLR3WriterStub writerStub = new ANTLR3WriterStub(); MetaLookupStub metaLookupStub = new MetaLookupStub(); TemplateNamingHelper namingStub = new TemplateNamingHelperStub(); MetaModelElementResolutionHelperStub resolutionHelperStub = new MetaModelElementResolutionHelperStub(); // Class under test EnumerationTemplateHandler enumHandler = new EnumerationTemplateHandler(writerStub, metaLookupStub, namingStub, resolutionHelperStub); EnumTemplateStub template = new EnumTemplateStub(); template.names = StringListHelper.list("enumerationName"); // not implemented yet, waiting for TCS to explain what this is for. template.automatic = true; metaLookupStub.enumLiterals = new ArrayList<String>(); metaLookupStub.enumLiterals.add("test1"); metaLookupStub.enumLiterals.add("test2"); RuleBodyBufferFactory ruleBodyBufferFactory = new RuleBufferFactoryStub(); enumHandler.addTemplate(template, ruleBodyBufferFactory); String result =writerStub.rules.get(0).toString(); String expected = "enumerationName returns[Object ret2] @init{java.lang.Object ret=null;}" + " :" + " (('test1'){ret = createEnumLiteral(\"[enumerationName]\", \"test1\");} | ('test2'){ret = createEnumLiteral(\"[enumerationName]\", \"test2\");}) " + "{ " + " ret2=ret; " + " } ;"; List tokens = tokens( expected); List tokens2 = tokens( result); assertEquals(expected + " != " + result, tokens, tokens2); } }