/** * */ package com.sap.furcas.parsergenerator.tcs.t2m.validation; import static junit.framework.Assert.assertEquals; 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.OperatorList; import com.sap.furcas.metamodel.FURCAS.TCS.Priority; import com.sap.furcas.metamodel.FURCAS.TCS.stubs.ConcreteSyntaxStub; import com.sap.furcas.metamodel.FURCAS.TCS.stubs.OperatorListStub; import com.sap.furcas.metamodel.FURCAS.TCS.stubs.OperatorStub; import com.sap.furcas.metamodel.FURCAS.TCS.stubs.PriorityStub; import com.sap.furcas.parsergenerator.tcs.t2m.grammar.SemanticErrorBucket; /** * */ public class TestOperatorListValidation { @Test public void testEmpty() throws Exception { OperatorListValidation validator = new OperatorListValidation(); ConcreteSyntaxStub syntaxStub = new ConcreteSyntaxStub(); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); validator.validate(syntaxStub, null, errorBucket); assertEquals(0, errorBucket.getErrors().size()); EList<OperatorList> opListList = new BasicEList<OperatorList>(); syntaxStub.operatorListList = opListList; validator.validate(syntaxStub, null, errorBucket); assertEquals(0, errorBucket.getErrors().size()); OperatorListStub opList = new OperatorListStub(); opListList.add(opList ); validator.validate(syntaxStub, null, errorBucket); assertEquals(0, errorBucket.getErrors().size()); EList<Priority> prioList = new BasicEList<Priority>(); opList.priorities = prioList; validator.validate(syntaxStub, null, errorBucket); assertEquals(0, errorBucket.getErrors().size()); } @Test public void testOnePriority() throws Exception { // setup EList<Priority> prioList = new BasicEList<Priority>(); PriorityStub prio = new PriorityStub(); OperatorStub operator1 = new OperatorStub(); prio.operators.add(operator1 ); prioList.add(prio); ConcreteSyntaxStub syntaxStub = getSyntaxStub(prioList); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); // not using a dummy, it's just a bean class // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); assertEquals(0, errorBucket.getErrors().size()); } @Test public void testTwoPriorities() throws Exception { // setup EList<Priority> prioList = new BasicEList<Priority>(); PriorityStub prio2 = new PriorityStub(); OperatorStub operator2 = new OperatorStub(); prio2.operators.add(operator2 ); prio2.value = 1; prioList.add(prio2); PriorityStub prio = new PriorityStub(); OperatorStub operator1 = new OperatorStub(); prio.operators.add(operator1 ); prioList.add(prio); ConcreteSyntaxStub syntaxStub = getSyntaxStub(prioList); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); // not using a dummy, it's just a bean class // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); assertEquals(0, errorBucket.getErrors().size()); } @Test public void testthreeListsDifferentName() throws Exception { // two anonymous lists are not allowed ConcreteSyntaxStub syntaxStub = new ConcreteSyntaxStub(); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); EList<OperatorList> opListList = new BasicEList<OperatorList>(); syntaxStub.operatorListList = opListList; OperatorListStub opList = new OperatorListStub(); opList.name = "test"; opListList.add(opList ); OperatorListStub opList2 = new OperatorListStub(); opList2.name = "test2"; opListList.add(opList2 ); OperatorListStub opList3 = new OperatorListStub(); // anonymous opListList.add(opList3 ); // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); assertEquals(0, errorBucket.getErrors().size()); } /****** negative cases ******/ @Test public void testTwoAnonymousLists() throws Exception { // two anonymous lists are not allowed ConcreteSyntaxStub syntaxStub = new ConcreteSyntaxStub(); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); EList<OperatorList> opListList = new BasicEList<OperatorList>(); syntaxStub.operatorListList = opListList; OperatorListStub opList = new OperatorListStub(); opListList.add(opList ); OperatorListStub opList2 = new OperatorListStub(); opListList.add(opList2 ); // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); assertEquals(1, errorBucket.getErrors().size()); } @Test public void testTwoListsSameName() throws Exception { // two anonymous lists are not allowed ConcreteSyntaxStub syntaxStub = new ConcreteSyntaxStub(); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); EList<OperatorList> opListList = new BasicEList<OperatorList>(); syntaxStub.operatorListList = opListList; OperatorListStub opList = new OperatorListStub(); opList.name = "test"; opListList.add(opList ); OperatorListStub opList2 = new OperatorListStub(); opList2.name = "test"; opListList.add(opList2 ); // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); assertEquals(1, errorBucket.getErrors().size()); } @Test public void testNegativePriority() throws Exception { // setup EList<Priority> prioList = new BasicEList<Priority>(); PriorityStub prio = new PriorityStub(); OperatorStub operator1 = new OperatorStub(); prio.operators.add(operator1 ); prio.value = -1; prioList.add(prio); ConcreteSyntaxStub syntaxStub = getSyntaxStub(prioList); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); // not using a dummy, it's just a bean class // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); assertEquals(1, errorBucket.getErrors().size()); } @Test public void testDoublePriorities() throws Exception { // setup (using priority 0 twice) EList<Priority> prioList = new BasicEList<Priority>(); PriorityStub prio2 = new PriorityStub(); OperatorStub operator2 = new OperatorStub(); prio2.operators.add(operator2 ); prioList.add(prio2); PriorityStub prio = new PriorityStub(); OperatorStub operator1 = new OperatorStub(); prio.operators.add(operator1 ); prioList.add(prio); ConcreteSyntaxStub syntaxStub = getSyntaxStub(prioList); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); // not using a dummy, it's just a bean class // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); // expect one error assertEquals(1, errorBucket.getErrors().size()); } @Test public void testMissingPriority1() throws Exception { // setup (using values 0 and 2) EList<Priority> prioList = new BasicEList<Priority>(); PriorityStub prio2 = new PriorityStub(); OperatorStub operator2 = new OperatorStub(); prio2.operators.add(operator2 ); prio2.value = 2; prioList.add(prio2); PriorityStub prio = new PriorityStub(); OperatorStub operator1 = new OperatorStub(); prio.operators.add(operator1 ); prioList.add(prio); ConcreteSyntaxStub syntaxStub = getSyntaxStub(prioList); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); // not using a dummy, it's just a bean class // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); assertEquals(1, errorBucket.getErrors().size()); } @Test public void testMissingPriority0() throws Exception { // setup (using values 1 and 2) EList<Priority> prioList = new BasicEList<Priority>(); PriorityStub prio2 = new PriorityStub(); OperatorStub operator2 = new OperatorStub(); prio2.operators.add(operator2 ); prio2.value = 2; prioList.add(prio2); PriorityStub prio = new PriorityStub(); OperatorStub operator1 = new OperatorStub(); prio.operators.add(operator1 ); prio.value = 1; prioList.add(prio); ConcreteSyntaxStub syntaxStub = getSyntaxStub(prioList); SemanticErrorBucket errorBucket = new SemanticErrorBucket(); // not using a dummy, it's just a bean class // class under test OperatorListValidation validator = new OperatorListValidation(); validator.validate(syntaxStub, null, errorBucket); assertEquals(1, errorBucket.getErrors().size()); } /** * @param prioList * @return */ private ConcreteSyntaxStub getSyntaxStub(EList<Priority> prioList) { ConcreteSyntaxStub syntaxStub = new ConcreteSyntaxStub(); EList<OperatorList> opListList = new BasicEList<OperatorList>(); syntaxStub.operatorListList = opListList; OperatorListStub opList = new OperatorListStub(); opListList.add(opList ); opList.priorities = prioList; return syntaxStub; } }