package org.dresdenocl.metrics.test.constraintmetric;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Map;
import org.dresdenocl.metrics.OclMetrics;
import org.dresdenocl.metrics.metric.ConstraintMetric;
import org.dresdenocl.metrics.test.AbstractMetricTest;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.dresdenocl.language.ocl.resource.ocl.Ocl22Parser;
import org.dresdenocl.pivotmodel.Constraint;
/**
* Contains test cases for {@link OclMetrics}.
*
* @author Claas Wilke
*
*/
public class TestOperationCallExpMetric extends AbstractMetricTest {
@BeforeClass
public static void setUp() throws Exception {
AbstractMetricTest.setUp();
}
@AfterClass
public static void tearDown() {
AbstractMetricTest.tearDown();
}
@Test
public void testConstraintMetric01() throws Exception {
constraintsUnderTest = Ocl22Parser.INSTANCE.parseOclString(
"context Type1 inv: not true", modelUnderTest);
Constraint constraint = constraintsUnderTest.get(0);
ConstraintMetric metric = OclMetrics.computeMetric(constraint);
assertNotNull(metric);
assertEquals(constraint, metric.getReferredConstraint());
assertEquals(2, metric.getExpressionCount());
assertEquals(2, metric.getExpressionDepth());
assertEquals(0, metric.getNumberOfIfExpressions());
assertEquals(0, metric.getNumberOfLetExpressions());
assertNull(metric.getCalledProperties());
assertNotNull(metric.getUsedLiterals());
assertNull(metric.getUsedIterators());
Map<String, Integer> calledOperations = metric.getCalledOperations();
assertEquals(1, calledOperations.size());
assertTrue(calledOperations.containsKey("Boolean.not(..)"));
assertEquals(new Integer(1), calledOperations.get("Boolean.not(..)"));
}
@Test
public void testConstraintMetric02() throws Exception {
constraintsUnderTest = Ocl22Parser.INSTANCE.parseOclString(
"context Type1 inv: true or false", modelUnderTest);
Constraint constraint = constraintsUnderTest.get(0);
ConstraintMetric metric = OclMetrics.computeMetric(constraint);
assertNotNull(metric);
assertEquals(constraint, metric.getReferredConstraint());
assertEquals(3, metric.getExpressionCount());
assertEquals(2, metric.getExpressionDepth());
assertEquals(0, metric.getNumberOfIfExpressions());
assertEquals(0, metric.getNumberOfLetExpressions());
assertNull(metric.getCalledProperties());
assertNotNull(metric.getUsedLiterals());
assertNull(metric.getUsedIterators());
Map<String, Integer> calledOperations = metric.getCalledOperations();
assertEquals(1, calledOperations.size());
assertTrue(calledOperations.containsKey("Boolean.or(..)"));
assertEquals(new Integer(1), calledOperations.get("Boolean.or(..)"));
}
@Test
public void testConstraintMetric03() throws Exception {
constraintsUnderTest = Ocl22Parser.INSTANCE.parseOclString(
"context Type1::op1() post: prop1 = prop1@pre", modelUnderTest);
Constraint constraint = constraintsUnderTest.get(0);
ConstraintMetric metric = OclMetrics.computeMetric(constraint);
assertNotNull(metric);
assertEquals(constraint, metric.getReferredConstraint());
assertEquals(6, metric.getExpressionCount());
assertEquals(4, metric.getExpressionDepth());
assertEquals(0, metric.getNumberOfIfExpressions());
assertEquals(0, metric.getNumberOfLetExpressions());
assertNotNull(metric.getCalledProperties());
assertNull(metric.getUsedLiterals());
assertNull(metric.getUsedIterators());
Map<String, Integer> calledOperations = metric.getCalledOperations();
assertEquals(2, calledOperations.size());
assertTrue(calledOperations.containsKey("OclAny@pre()"));
assertEquals(new Integer(1), calledOperations.get("OclAny@pre()"));
assertTrue(calledOperations.containsKey("OclAny.=(..)"));
assertEquals(new Integer(1), calledOperations.get("OclAny.=(..)"));
}
}