package school.base.test.feature;
import static org.junit.Assert.assertTrue;
import java.util.Collection;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.transaction.RecordingCommand;
import org.junit.Test;
import school.School;
import school.SchoolPackage;
import school.Student;
import school.base.test.SchoolBaseParameterizedTest;
import school.base.test.util.ModelManager;
/**
* Test cases used to test the {@link EStructuralFeature} related getters of EMF-IncQuery Base.
*
* @author Tamas Szabo
*
*/
public class FeatureTest extends SchoolBaseParameterizedTest {
public FeatureTest(Notifier notifier) {
super(notifier);
}
/**
* Finding all students in the model
*/
@Test
public void holderTest() {
Collection<EObject> result = navigationHelper.getHoldersOfFeature(SchoolPackage.eINSTANCE.getStudent_Name());
for (EObject obj : ModelManager.getAllContents(notifier)) {
if (obj instanceof Student) {
assertTrue(result.contains(obj));
}
}
}
/**
* Removing all students from the model and resolving feature holders after that
*/
@Test
public void holderModTest() {
try {
final Command command = new RecordingCommand(ModelManager.demandCreateTransactionalEditingDomain(notifier)) {
@Override
protected void doExecute() {
//years and courses have references to students
//remove all of them from the ResourceSet
School firstSchool = (School) ModelManager.getModel().getResources().get(0).getContents().get(0);
School secondSchool = (School) ModelManager.getModel().getResources().get(1).getContents().get(0);
firstSchool.getCourses().clear();
firstSchool.getYears().clear();
secondSchool.getCourses().clear();
secondSchool.getYears().clear();
}
};
ModelManager.demandCreateTransactionalEditingDomain(notifier).getCommandStack().execute(command);
Collection<EObject> result = navigationHelper.getHoldersOfFeature(SchoolPackage.eINSTANCE.getStudent_Name());
assertTrue(result.isEmpty());
}
finally {
ModelManager.demandCreateTransactionalEditingDomain(notifier).getCommandStack().undo();
}
}
private static final String SCHOOL_NAME = "Budapest University of Technology and Economics";
/**
* Feature holder resolving based on String literal
*/
@Test
public void stringValueTest() {
Collection<EObject> result = navigationHelper.findByFeatureValue(SCHOOL_NAME, SchoolPackage.Literals.SCHOOL__NAME);
assertTrue(result.size() == 1);
}
/**
* Feature holder resolving based on Integer value
*/
@Test
public void integerValueTest() {
Collection<EObject> result = navigationHelper.findByFeatureValue(2011, SchoolPackage.Literals.YEAR__STARTING_DATE);
assertTrue(result.size() == 1);
}
}