package com.sap.finex.expressionpad.tests;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import junit.framework.TestCase;
import structure.Association;
import structure.Field;
import structure.FinexClass;
import structure.Type;
import com.sap.finex.expressionpad.FinexEvaluator;
import com.sap.finex.interpreter.Activator;
import com.sap.finex.interpreter.FinexInMemoryRepository;
import com.sap.finex.interpreter.objects.FinexNativeObject;
import com.sap.runlet.abstractinterpreter.objects.RunletObject;
import com.sap.runlet.abstractinterpreter.repository.Repository;
public abstract class FinexTestCase extends TestCase {
protected FinexEvaluator main;
protected void setUp() throws Exception {
super.setUp();
main = new FinexEvaluator("finex.stdlib", createRepository());
}
/**
* Factory method for repository used by interpreters. This implementation
* returns the default {@link RunletInMemoryRepository} implementation.
*/
protected Repository<Association, Field, FinexClass, Type, FinexClass> createRepository() {
return new FinexInMemoryRepository(Activator.getDefault().getModelAdapter());
}
public void assertNOEquals(Object expected, RunletObject<Field, Type, FinexClass> runletObject) {
assertTrue(runletObject instanceof FinexNativeObject);
FinexNativeObject no = (FinexNativeObject) runletObject;
assertEquals(expected, no.getNativeObject());
}
protected void assertMultiObjectOfNativeObjectsEqualsIgnoringOrdering(Object[] expected, RunletObject<Field, Type, FinexClass> multiObjectOfNativeObjects) {
Set<Object> found = new HashSet<Object>();
assertEquals("Expected same size of "+multiObjectOfNativeObjects+" and "+expected+" but were "+
multiObjectOfNativeObjects.size()+" and "+expected.length+", respectively",
expected.length, multiObjectOfNativeObjects.size());
for (RunletObject<Field, Type, FinexClass> o : multiObjectOfNativeObjects) {
if (o.size() > 0) { // not empty object?
found.add(((FinexNativeObject) o).getNativeObject());
}
}
assertEquals(new HashSet<Object>(Arrays.asList(expected)), found);
}
}