package com.sap.furcas.parsergenerator.tcs.injection;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.ArrayList;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import com.sap.furcas.metamodel.FURCAS.TCS.ClassTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.EnumerationTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.OperatorTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.Template;
import com.sap.furcas.metamodel.FURCAS.TCS.Token;
import com.sap.furcas.runtime.common.exceptions.ModelAdapterException;
import com.sap.furcas.test.fixture.ScenarioFixtureData;
public class TestEnumSample extends AbstractTCSInjectionTest {
@BeforeClass
public static void doSetUp() throws Exception {
setup(ScenarioFixtureData.ENUMTEST_TCS, ScenarioFixtureData.ENUMERATION_METAMODEL);
}
@Test
public void testSyntax() {
// now check the generated model is okay
assertNotNull(syntax);
assertEquals("EnumTest", syntax.getName());
assertEquals(0, modelParsingResult.getErrors().size());
}
@Test
public void testTemplates() {
List<Template> templates = syntax.getTemplates();
assertNotNull(templates);
assertEquals(7, templates.size());
int operatoredCount = 0;
int enumerationCount = 0;
int classCount = 0;
for (Template template : templates) {
if (template instanceof ClassTemplate) {
// ClassTemplate new_name = (ClassTemplate) template;
classCount++;
} else if (template instanceof EnumerationTemplate) {
// ClassTemplate new_name = (ClassTemplate) template;
enumerationCount++;
} else if (template instanceof OperatorTemplate) {
// ClassTemplate new_name = (ClassTemplate) template;
operatoredCount++;
}
}
assertEquals(4, classCount);
assertEquals(2, enumerationCount);
assertEquals(0, operatoredCount);
}
@Test
public void testEnumTemplates() {
List<Template> templates = syntax.getTemplates();
ArrayList<EnumerationTemplate> enumTemplates = new ArrayList<EnumerationTemplate>();
for (Template template : templates) {
if (template instanceof EnumerationTemplate) {
EnumerationTemplate etemplate = (EnumerationTemplate) template;
enumTemplates.add(etemplate);
}
}
EnumerationTemplate e1 = enumTemplates.get(0);
assertEquals(list("Planet"), e1.getNames());
assertEquals(3, e1.getMappings().size());
assertEquals("mercury", e1.getMappings().get(0).getLiteral().getName());
assertEquals("venus", e1.getMappings().get(1).getLiteral().getName());
assertEquals("mars", e1.getMappings().get(2).getLiteral().getName());
EnumerationTemplate e2 = enumTemplates.get(1);
assertEquals(list("Speed"), e2.getNames());
assertEquals(3, e2.getMappings().size());
}
/**
* Expects: <TCS:Keyword location="26:5-26:14" literalRefs="/0/@templates.3/@templateSequence/@elements.0" value="article"/>
* <TCS:Keyword location="36:5-36:13" literalRefs="/0/@templates.5/@templateSequence/@elements.0" value="author"/>
* <TCS:Keyword location="36:14-36:17"
* literalRefs="/0/@templates.5/@templateSequence/@elements.1 /0/@templates.6/@templateSequence/@elements.1" value="="/>
* <TCS:Keyword location="36:23-36:26" literalRefs="/0/@templates.5/@templateSequence/@elements.3" value="."/> <TCS:Keyword
* location="40:5-40:11" literalRefs="/0/@templates.6/@templateSequence/@elements.0" value="year"/>
*
* @throws ModelAdapterException
*/
@Test
public void testKeywords() throws ModelAdapterException {
assertEquals(8, syntax.getKeywords().size());
}
@Test
public void testTokens() {
List<Token> tokens = syntax.getTokens();
assertNotNull(tokens);
assertEquals(1, tokens.size());
}
private static List<String> list(String entry) {
ArrayList<String> list = new ArrayList<String>();
list.add(entry);
return list;
}
}