package com.sap.runlet.expressionpad.tests;
import java.util.List;
import com.sap.runlet.abstractinterpreter.operationaltransformation.Change;
import com.sap.runlet.abstractinterpreter.repository.ChangeSetImpl;
import com.sap.runlet.abstractinterpreter.repository.FixedSnapshot;
import com.sap.runlet.abstractinterpreter.repository.Snapshot;
import com.sap.runlet.abstractinterpreter.util.ModelAdapter;
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 class TestInMemoryRepository extends RunletInMemoryRepository {
public TestInMemoryRepository(ModelAdapter<Association, AssociationEnd, SapClass, TypeDefinition, ClassTypeDefinition> modelAdapter) {
super(modelAdapter);
}
/**
* If <tt>from</tt> and <tt>to</tt> are connected by a predecessor path,
* this method will return the changes that happened from the one to the
* other, otherwise <tt>null</tt>.
*/
private Change<Association, AssociationEnd, SapClass, TypeDefinition, ClassTypeDefinition> getChanges(Snapshot from, Snapshot to) {
Change<Association, AssociationEnd, SapClass, TypeDefinition, ClassTypeDefinition> result = null;
List<Snapshot> path = getPath(from, to);
if (path != null) {
result = getChanges(path);
}
return result;
}
public boolean doesChangeSetProduceEqualResults(Snapshot from, Snapshot to) {
Change<Association, AssociationEnd, SapClass, TypeDefinition, ClassTypeDefinition> recordedChange = getChanges(from, to);
Snapshot snapshotObtainedByReapplying = apply(new ChangeSetImpl<Association, AssociationEnd, SapClass, TypeDefinition, ClassTypeDefinition>(
recordedChange, getModelAdapter()), new FixedSnapshot(from));
return testSnapshotEquality(to, snapshotObtainedByReapplying);
}
}