package com.sap.furcas.parsergenerator.tcs.injection;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import com.sap.furcas.metamodel.FURCAS.TCS.Associativity;
import com.sap.furcas.metamodel.FURCAS.TCS.ClassTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.EnumerationTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.OperatorList;
import com.sap.furcas.metamodel.FURCAS.TCS.OperatorTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.Priority;
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 TestATLSample extends AbstractTCSInjectionTest {
@BeforeClass
public static void doSetUp() throws Exception {
setup(ScenarioFixtureData.ATL_TCS, ScenarioFixtureData.ATL_METAMODEL);
}
@Test
public void testSyntax() {
// now check the generated model is okay
assertNotNull(syntax);
assertEquals("ATL", syntax.getName());
assertEquals(0, modelParsingResult.getErrors().size());
}
@Test
public void testTemplates() {
List<Template> templates = syntax.getTemplates();
assertNotNull(templates);
assertEquals(85, 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(74, classCount);
assertEquals(0, enumerationCount);
assertEquals(6, operatoredCount);
}
/**
* test against bugs in operator List parsing
*/
@Test
public void testOperatorList() {
List<OperatorList> opListList = syntax.getOperatorLists();
assertNotNull(opListList);
assertEquals(1, opListList.size());
OperatorList opList = opListList.get(0);
assertNotNull(opList);
assertNull(opList.getName());
List<Priority> prioList = opList.getPriorities();
assertNotNull(prioList);
assertEquals(6, prioList.size());
Priority prio0 = prioList.get(0);
assertNotNull(prio0);
assertEquals(new Integer(0), prio0.getValue());
assertEquals(Associativity.LEFT, prio0.getAssociativity());
assertEquals(2, prio0.getOperators().size());
assertEquals(new Integer(2), prio0.getOperators().get(0).getArity());
assertEquals(new Integer(2), prio0.getOperators().get(1).getArity());
Priority prio1 = prioList.get(1);
assertNotNull(prio1);
assertEquals(new Integer(1), prio1.getValue());
assertEquals(Associativity.LEFT, prio1.getAssociativity());
assertEquals(2, prio1.getOperators().size());
assertEquals(new Integer(1), prio1.getOperators().get(0).getArity());
assertEquals(new Integer(1), prio1.getOperators().get(1).getArity());
}
/**
* 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(57, syntax.getKeywords().size());
}
@Test
public void testTokens() {
List<Token> tokens = syntax.getTokens();
assertNotNull(tokens);
assertEquals(1, tokens.size());
}
}