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