blob: 3f5431f8110a725dd5845b4f8ad9967912d59cf5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2014 EclipseSource Muenchen GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Philip Langer - initial API and implementation
******************************************************************************/
package org.eclipse.emf.emfstore.modelmutator.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.emfstore.internal.modelmutator.mutation.AttributeChangeMutation;
import org.eclipse.emf.emfstore.modelmutator.ESMutationException;
import org.eclipse.emf.emfstore.modelmutator.ESMutationFactory;
import org.eclipse.emf.emfstore.modelmutator.ESRandomChangeMode;
import org.eclipse.emf.emfstore.modelmutator.ESReferenceChangeMutation;
import org.junit.Test;
/**
* Unit tests for {@link AttributeChangeMutation}.
*
* @author Philip Langer
*/
public class ReferenceChangeMutationTest extends AbstractMutationTest {
@Test
public void addValueForGivenReferenceAndContainer() throws ESMutationException {
ESMutationFactory.referenceChange(utilForEPackageWithTwoClasses).setRandomChangeMode(ESRandomChangeMode.ADD)
.setNewReferenceValue(getFirstEClass()).setTargetObject(getSecondEClass())
.setTargetFeature(E_PACKAGE.getEClass_ESuperTypes()).apply();
assertTrue(getSecondEClass().getESuperTypes().contains(getFirstEClass()));
}
@Test
public void removeValueFromGivenReferenceAndContainer() throws ESMutationException {
getFirstEClass().getESuperTypes().add(getSecondEClass());
ESMutationFactory.referenceChange(utilForEPackageWithTwoClasses).setRandomChangeMode(ESRandomChangeMode.DELETE)
.setTargetObject(getFirstEClass()).setTargetFeature(E_PACKAGE.getEClass_ESuperTypes()).apply();
assertFalse(getFirstEClass().getESuperTypes().contains(getSecondEClass()));
}
@Test
public void reorderValuesInGivenReferenceAndContainer() throws ESMutationException {
final ESReferenceChangeMutation mutation = ESMutationFactory.referenceChange(utilForEPackageWithTwoClasses)
.setRandomChangeMode(ESRandomChangeMode.REORDER).setTargetObject(ePackageWithTwoClasses)
.setTargetFeature(E_PACKAGE.getEPackage_EClassifiers());
final EObject firstEClass = getFirstEClass();
final EObject secondEClass = getSecondEClass();
mutation.apply();
assertEquals(0, ePackageWithTwoClasses.getEClassifiers().indexOf(secondEClass));
assertEquals(1, ePackageWithTwoClasses.getEClassifiers().indexOf(firstEClass));
}
@Test
public void selectTargetContainerForGivenFeature() throws ESMutationException {
final ESReferenceChangeMutation mutation = ESMutationFactory.referenceChange(utilForEPackageWithTwoClasses)
.setRandomChangeMode(ESRandomChangeMode.ADD).setTargetFeature(E_PACKAGE.getEClass_ESuperTypes());
mutation.apply();
assertEquals(E_PACKAGE.getEClass(), mutation.getTargetObject().eClass());
assertTrue(ePackageWithTwoClasses.getEClassifiers().contains(mutation.getTargetObject()));
}
@Test
public void selectTargetFeatureForGivenTargetContainer() throws ESMutationException {
final ESReferenceChangeMutation mutation = ESMutationFactory.referenceChange(utilForEPackageWithTwoClasses)
.setRandomChangeMode(ESRandomChangeMode.ADD).setTargetObject(getFirstEClass());
mutation.apply();
assertEquals(E_PACKAGE.getEClass_ESuperTypes(), mutation.getTargetFeature());
}
@Test
public void unconfiguredAdd() throws ESMutationException {
final ESReferenceChangeMutation mutation = ESMutationFactory.referenceChange(utilForEPackageWithTwoClasses)
.setRandomChangeMode(ESRandomChangeMode.ADD);
mutation.apply();
assertTrue(mutation.getTargetObject() == getFirstEClass() || mutation.getTargetObject() == getSecondEClass());
assertEquals(E_PACKAGE.getEClass_ESuperTypes(), mutation.getTargetFeature());
}
@Test(expected = ESMutationException.class)
public void unconfiguredDelete() throws ESMutationException {
ESMutationFactory.referenceChange(utilForEPackageWithTwoClasses).setRandomChangeMode(ESRandomChangeMode.DELETE)
.apply();
fail("Should have thrown an exception since there is no object to delete from cross-reference");
}
@Test
public void unconfiguredDelete_2() throws ESMutationException {
getFirstEClass().getESuperTypes().add(getSecondEClass());
final ESReferenceChangeMutation mutation = ESMutationFactory.referenceChange(utilForEPackageWithTwoClasses)
.setRandomChangeMode(ESRandomChangeMode.DELETE);
mutation.apply();
assertEquals(getFirstEClass(), mutation.getTargetObject());
assertEquals(E_PACKAGE.getEClass_ESuperTypes(), mutation.getTargetFeature());
}
private EClass getFirstEClass() {
return (EClass) ePackageWithTwoClasses.getEClassifiers().get(0);
}
private EClass getSecondEClass() {
return (EClass) ePackageWithTwoClasses.getEClassifiers().get(1);
}
}