| /******************************************************************************* |
| * 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.internal.modelmutator.mutation; |
| |
| import static org.junit.Assert.*; |
| import static org.eclipse.emf.emfstore.internal.modelmutator.mutation.MutationPredicates.*; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.emf.emfstore.internal.modelmutator.mutation.MutationTargetSelector; |
| import org.eclipse.emf.emfstore.modelmutator.ESMutationException; |
| import org.eclipse.emf.emfstore.modelmutator.test.AbstractMutationTest; |
| import org.junit.Test; |
| |
| /** |
| * @author Philip Langer |
| * |
| */ |
| public class MutationTargetSelectorTest extends AbstractMutationTest { |
| |
| @Test |
| public void isSelectionValidForInvalidCombinationOfFeatureAndObject() { |
| |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.setTargetFeature(E_PACKAGE.getEEnum_ELiterals()); |
| selector.setTargetObject(ePackageWithTwoClasses); |
| assertFalse(selector.isValid()); |
| } |
| |
| @Test |
| public void isSelectionValidForValidCombinationOfFeatureAndObject() { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.setTargetFeature(E_PACKAGE.getEClass_ESuperTypes()); |
| selector.setTargetObject(ePackageWithTwoClasses.getEClassifiers() |
| .get(0)); |
| assertTrue(selector.isValid()); |
| } |
| |
| @Test |
| public void isSelectionValidForInvalidTargetFeaturePredicate() { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.getTargetFeaturePredicates().add(IS_CONTAINMENT_REFERENCE); |
| selector.setTargetFeature(E_PACKAGE.getEClass_ESuperTypes()); |
| selector.setTargetObject(ePackageWithTwoClasses.getEClassifiers() |
| .get(0)); |
| assertFalse(selector.isValid()); |
| } |
| |
| @Test |
| public void isSelectionValidForInvalidTargetObjectPredicate() { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.getTargetObjectPredicates().add(hasMaxNumberOfContainments(1)); |
| selector.setTargetFeature(E_PACKAGE.getEPackage_EClassifiers()); |
| selector.setTargetObject(ePackageWithTwoClasses); |
| assertFalse(selector.isValid()); |
| } |
| |
| @Test |
| public void isSelectionValidForValidTargetObjectButInvalidTargetFeaturePredicate() { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.getTargetFeaturePredicates() |
| .add(hasMaxNumberOfContainments(1)); |
| selector.getTargetFeaturePredicates().add(IS_CONTAINMENT_REFERENCE); |
| selector.setTargetFeature(E_PACKAGE.getEClass_ESuperTypes()); |
| selector.setTargetObject(ePackageWithTwoClasses.getEClassifiers() |
| .get(0)); |
| assertFalse(selector.isValid()); |
| } |
| |
| @Test |
| public void isSelectionValidForInvalidTargetObjectButValidTargetFeaturePredicate() { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.getTargetObjectPredicates().add(hasMaxNumberOfContainments(0)); |
| selector.getTargetFeaturePredicates().add(IS_CONTAINMENT_REFERENCE); |
| selector.setTargetFeature(E_PACKAGE.getEPackage_EClassifiers()); |
| selector.setTargetObject(ePackageWithTwoClasses); |
| assertFalse(selector.isValid()); |
| } |
| |
| @Test |
| public void isSelectionValidForValidTargetObjectPredicate() { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.getTargetObjectPredicates().add(hasMaxNumberOfContainments(0)); |
| selector.getTargetFeaturePredicates().add(IS_CONTAINMENT_REFERENCE); |
| selector.setTargetFeature(E_PACKAGE.getEClass_EStructuralFeatures()); |
| selector.setTargetObject(ePackageWithTwoClasses.getEClassifiers() |
| .get(0)); |
| assertTrue(selector.isValid()); |
| } |
| |
| @Test |
| public void isSelectionValidForInvalidOriginalFeatureValuePredicate() { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.setTargetFeature(E_PACKAGE.getEPackage_EClassifiers()); |
| selector.setTargetObject(ePackageWithTwoClasses); |
| selector.getOriginalFeatureValuePredicates().add( |
| isListWithSpecifiedSize(0)); |
| assertFalse(selector.isValid()); |
| } |
| |
| @Test |
| public void isSelectionValidForValidOriginalFeatureValuePredicate() { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.setTargetFeature(E_PACKAGE.getEPackage_EClassifiers()); |
| selector.setTargetObject(ePackageWithTwoClasses); |
| selector.getOriginalFeatureValuePredicates().add( |
| isListWithSpecifiedSize(2)); |
| assertTrue(selector.isValid()); |
| } |
| |
| @Test |
| public void findingTargetObjectByFeature() throws ESMutationException { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.setTargetFeature(E_PACKAGE.getEPackage_EClassifiers()); |
| |
| selector.doSelection(); |
| EObject targetObject = selector.getTargetObject(); |
| assertEquals(ePackageWithTwoClasses, targetObject); |
| assertEquals(E_PACKAGE.getEPackage_EClassifiers(), |
| selector.getTargetFeature()); |
| |
| selector = new MutationTargetSelector(utilForEPackageWithTwoClasses); |
| selector.setTargetFeature(E_PACKAGE.getEClass_EStructuralFeatures()); |
| selector.doSelection(); |
| targetObject = selector.getTargetObject(); |
| assertTrue(ePackageWithTwoClasses.getEClassifiers().contains( |
| targetObject)); |
| assertEquals(E_PACKAGE.getEClass_EStructuralFeatures(), |
| selector.getTargetFeature()); |
| } |
| |
| @Test |
| public void findingTargetFeatureByObject() throws ESMutationException { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.setTargetObject(ePackageWithTwoClasses); |
| |
| selector.doSelection(); |
| EStructuralFeature targetFeature = selector.getTargetFeature(); |
| assertTrue(ePackageWithTwoClasses.eClass().getEAllStructuralFeatures() |
| .contains(targetFeature)); |
| assertEquals(ePackageWithTwoClasses, selector.getTargetObject()); |
| } |
| |
| @Test |
| public void findingTargetFeatureAndTargetObjectByPredicates() |
| throws ESMutationException { |
| MutationTargetSelector selector = new MutationTargetSelector( |
| utilForEPackageWithTwoClasses); |
| selector.getTargetFeaturePredicates().add(IS_CONTAINMENT_REFERENCE); |
| selector.getTargetObjectPredicates().add(hasMaxNumberOfContainments(0)); |
| |
| selector.doSelection(); |
| EObject targetObject = selector.getTargetObject(); |
| EStructuralFeature targetReference = selector.getTargetFeature(); |
| assertTrue(IS_CONTAINMENT_REFERENCE.apply(targetReference)); |
| assertTrue(hasMaxNumberOfContainments(0).apply(targetObject)); |
| } |
| |
| } |