package school.base.test.scope;
import static org.junit.Assert.assertTrue;
import java.util.Collection;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecore.resource.Resource;
import org.junit.Ignore;
import org.junit.Test;
import school.Course;
import school.SchoolClass;
import school.SchoolPackage;
import school.Student;
import school.Teacher;
import school.base.test.SchoolBaseParameterizedTest;
import school.base.test.util.ModelManager;
public class ParameterizedScopeTest extends SchoolBaseParameterizedTest {
public ParameterizedScopeTest(Notifier notifier) {
super(notifier);
}
@Test
public void instancesOfTeacherTest() {
Collection<EObject> teachers = navigationHelper.getDirectInstances(SchoolPackage.Literals.TEACHER);
//there are 6 teachers in the two school models together
if (notifier instanceof EObject || notifier instanceof Resource) {
assertTrue(teachers.size() == 5);
}
else {
assertTrue(teachers.size() == 6);
}
}
/**
* Tests whether the courses of all teachers are cotained in the collection of all courses.
*/
@Ignore(value = "ResourceSet scope remark")
@Test
public void coursesOfTeachersTest() {
Collection<EObject> teachers = navigationHelper.getDirectInstances(SchoolPackage.Literals.TEACHER);
int courseCount = 0;
for (EObject teacher : teachers) {
for (Setting setting : navigationHelper.getInverseReferences(teacher)) {
if (setting.getEObject() instanceof Course) {
courseCount++;
}
}
}
if (notifier instanceof EObject || notifier instanceof Resource) {
assertTrue(courseCount == 5);
}
else {
assertTrue(courseCount == 6);
}
}
@Test
public void schoolClassTest() {
Collection<EObject> schoolClasses = navigationHelper.getDirectInstances(SchoolPackage.Literals.SCHOOL_CLASS);
int teacherCount = 0;
for (EObject schoolClass : schoolClasses) {
for (Setting setting : navigationHelper.getInverseReferences(schoolClass)) {
if (setting.getEObject() instanceof Teacher) {
teacherCount++;
}
}
}
if (notifier instanceof EObject || notifier instanceof Resource) {
assertTrue(teacherCount == 4);
}
else {
assertTrue(teacherCount == 5);
}
}
@Test
public void studentOfSchoolTest() {
int studentCount = 0;
// pattern studentOfSchool(S, Sch) {
// Student.schoolClass.courses.school(S, Sch);
// }
EObject school = ModelManager.getModel().getResources().get(0).getContents().get(0);
for (Setting schoolInverseRef : navigationHelper.getInverseReferences(school)) {
if (schoolInverseRef.getEObject() instanceof Course) {
for (Setting courseInverseRef : navigationHelper
.getInverseReferences(schoolInverseRef.getEObject())) {
if (courseInverseRef.getEObject() instanceof SchoolClass) {
for (Setting schoolClassInverseRef : navigationHelper
.getInverseReferences(courseInverseRef
.getEObject())) {
if (schoolClassInverseRef.getEObject() instanceof Student) {
studentCount++;
}
}
}
}
}
}
//there are 5 students in the first school model
if (notifier instanceof EObject || notifier instanceof Resource) {
assertTrue(studentCount == 5);
}
else {
assertTrue(studentCount == 6);
}
}
}