//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 IBM Corporation 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: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.library.tests.variability; import java.util.List; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.epf.library.configuration.ConfigurationHelper; import org.eclipse.epf.library.configuration.DefaultElementRealizer; import org.eclipse.epf.library.configuration.ElementRealizer; import org.eclipse.epf.library.tests.LibraryTestHelper; import org.eclipse.epf.library.util.LibraryUtil; import org.eclipse.epf.uma.Artifact; import org.eclipse.epf.uma.ContentPackage; import org.eclipse.epf.uma.MethodConfiguration; import org.eclipse.epf.uma.MethodElement; import org.eclipse.epf.uma.MethodPlugin; import org.eclipse.epf.uma.Section; import org.eclipse.epf.uma.Task; import org.eclipse.epf.uma.UmaPackage; /** * Test case for 0..n feature varaibility. * * @author Jinhua Xi * @since 1.0 */ public class Outgoing0nFeatureTest extends VariablityBaseTestCase { /** * @param name */ public Outgoing0nFeatureTest(String name) { super(name); } public void test_task_MandatoryInput() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Task t1 = LibraryTestHelper.createTask(pkg, "t1"); Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1"); Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2"); t1.getMandatoryInput().add(a1); t1.getMandatoryInput().add(a2); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_MandatoryInput(); List items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); // how about a2 contributes to a1 LibraryTestHelper.setContributes(a2, a1); items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(a1)); // how about a2 replaces a1 LibraryTestHelper.setReplaces(a2, a1); items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(a2)); // how about a2 extends a1 LibraryTestHelper.setExtends(a2, a1); items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); } public void test_task_MandatoryInput_with_contributor() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Task t1 = LibraryTestHelper.createTask(pkg, "t1"); Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1"); Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2"); t1.getMandatoryInput().add(a1); t1.getMandatoryInput().add(a2); Task t2 = LibraryTestHelper.createTask(pkg, "t2"); Artifact a3 = LibraryTestHelper.createArtifact(pkg, "a3"); Artifact a4 = LibraryTestHelper.createArtifact(pkg, "a4"); t2.getMandatoryInput().add(a3); t2.getMandatoryInput().add(a4); LibraryTestHelper.setContributes(t2, t1); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_MandatoryInput(); List items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(4, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); // how about a2 contributes to a1 LibraryTestHelper.setContributes(a2, a1); items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(3, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); // how about a3 replaces a1 LibraryTestHelper.setReplaces(a3, a1); items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); // how about a4 replaces a1 too: a3 and a3 will be ignored, a2 is resulting to a1, so only get a1 LibraryTestHelper.setReplaces(a4, a1); items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(a1)); } public void test_task_MandatoryInput_with_contributors() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Task t1 = LibraryTestHelper.createTask(pkg, "t1"); Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1"); Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2"); t1.getMandatoryInput().add(a1); t1.getMandatoryInput().add(a2); Task t2 = LibraryTestHelper.createTask(pkg, "t2"); Artifact a3 = LibraryTestHelper.createArtifact(pkg, "a3"); Artifact a4 = LibraryTestHelper.createArtifact(pkg, "a4"); t2.getMandatoryInput().add(a3); t2.getMandatoryInput().add(a4); Task t3 = LibraryTestHelper.createTask(pkg, "t3"); Artifact a5 = LibraryTestHelper.createArtifact(pkg, "a5"); t3.getMandatoryInput().add(a5); LibraryTestHelper.setContributes(t2, t1); LibraryTestHelper.setContributes(t3, t1); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_MandatoryInput(); List items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(5, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); assertTrue(items.contains(a5)); // how about t3 contributes to t2, same result LibraryTestHelper.setContributes(t3, t2); items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(5, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); assertTrue(items.contains(a5)); } public void test_task_MandatoryInput_with_replacers() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Task t1 = LibraryTestHelper.createTask(pkg, "t1"); Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1"); Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2"); t1.getMandatoryInput().add(a1); t1.getMandatoryInput().add(a2); Task t2 = LibraryTestHelper.createTask(pkg, "t2"); Artifact a3 = LibraryTestHelper.createArtifact(pkg, "a3"); Artifact a4 = LibraryTestHelper.createArtifact(pkg, "a4"); t2.getMandatoryInput().add(a3); t2.getMandatoryInput().add(a4); Task t3 = LibraryTestHelper.createTask(pkg, "t3"); Artifact a5 = LibraryTestHelper.createArtifact(pkg, "a5"); t3.getMandatoryInput().add(a5); LibraryTestHelper.setReplaces(t2, t1); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); MethodElement t = ConfigurationHelper.getCalculatedElement(t1, realizer); assertEquals(t2, t); EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_MandatoryInput(); List items = ConfigurationHelper.calc0nFeatureValue(t, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); // how about t3 replaces to t2 LibraryTestHelper.setReplaces(t3, t2); t = ConfigurationHelper.getCalculatedElement(t1, realizer); assertEquals(t3, t); items = ConfigurationHelper.calc0nFeatureValue(t, feature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(a5)); // how about t3 replaces to t1, so t2 and t3 both replaces t1, th ereplacer is ignored LibraryTestHelper.setReplaces(t3, t1); t = ConfigurationHelper.getCalculatedElement(t1, realizer); assertEquals(t1, t); items = ConfigurationHelper.calc0nFeatureValue(t, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); } public void test_task_MandatoryInput_with_extenders() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Task t1 = LibraryTestHelper.createTask(pkg, "t1"); Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1"); Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2"); t1.getMandatoryInput().add(a1); t1.getMandatoryInput().add(a2); Task t2 = LibraryTestHelper.createTask(pkg, "t2"); Artifact a3 = LibraryTestHelper.createArtifact(pkg, "a3"); Artifact a4 = LibraryTestHelper.createArtifact(pkg, "a4"); t2.getMandatoryInput().add(a3); t2.getMandatoryInput().add(a4); Task t3 = LibraryTestHelper.createTask(pkg, "t3"); Artifact a5 = LibraryTestHelper.createArtifact(pkg, "a5"); t3.getMandatoryInput().add(a5); LibraryTestHelper.setExtends(t2, t1); LibraryTestHelper.setExtends(t3, t1); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_MandatoryInput(); List items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); items = ConfigurationHelper.calc0nFeatureValue(t2, feature, realizer); assertEquals(4, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); items = ConfigurationHelper.calc0nFeatureValue(t3, feature, realizer); assertEquals(3, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); assertTrue(items.contains(a5)); // how about t3 extends t2 LibraryTestHelper.setExtends(t3, t2); items = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); items = ConfigurationHelper.calc0nFeatureValue(t2, feature, realizer); assertEquals(4, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); items = ConfigurationHelper.calc0nFeatureValue(t3, feature, realizer); assertEquals(5, items.size()); assertTrue(items.contains(a1)); assertTrue(items.contains(a2)); assertTrue(items.contains(a3)); assertTrue(items.contains(a4)); assertTrue(items.contains(a5)); } // test the sections public void test_task_steps_with_contributors() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Task t1 = LibraryTestHelper.createTask(pkg, "t1"); Task t2 = LibraryTestHelper.createTask(pkg, "t2"); Task t3 = LibraryTestHelper.createTask(pkg, "t3"); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); // these two should generate the same result EStructuralFeature feature = UmaPackage.eINSTANCE.getContentDescription_Sections(); EStructuralFeature feature2 = UmaPackage.eINSTANCE.getTask_Steps(); List items; Section s1_1 = LibraryTestHelper.createSection(t1.getPresentation(), "t1s1", "t1s1"); Section s1_2 = LibraryTestHelper.createSection(t1.getPresentation(), "t1s2", "t1s2"); Section s2_1 = LibraryTestHelper.createSection(t2.getPresentation(), "t2s1", "t2s1"); Section s2_2 = LibraryTestHelper.createSection(t2.getPresentation(), "t2s2", "t2s2"); Section s3_1 = LibraryTestHelper.createSection(t3.getPresentation(), "t3s1", "t3s1"); Section s3_2 = LibraryTestHelper.createSection(t3.getPresentation(), "t3s2", "t3s2"); // case 1 items = ConfigurationHelper.calc0nFeatureValue(t1.getPresentation(), t1, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(s1_1)); assertTrue(items.contains(s1_2)); items = ConfigurationHelper.calc0nFeatureValue(t1, feature2, realizer); assertEquals(2, items.size()); assertTrue(items.contains(s1_1)); assertTrue(items.contains(s1_2)); // case 2 LibraryTestHelper.setContributes(t2, t1); items = ConfigurationHelper.calc0nFeatureValue(t1.getPresentation(), t1, feature, realizer); assertEquals(4, items.size()); assertTrue(items.contains(s1_1)); assertTrue(items.contains(s1_2)); assertTrue(items.contains(s2_1)); assertTrue(items.contains(s2_2)); items = ConfigurationHelper.calc0nFeatureValue(t1, feature2, realizer); assertEquals(4, items.size()); assertTrue(items.contains(s1_1)); assertTrue(items.contains(s1_2)); assertTrue(items.contains(s2_1)); assertTrue(items.contains(s2_2)); } // test the sections for replacers public void test_task_steps_with_replacers() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Task t1 = LibraryTestHelper.createTask(pkg, "t1"); Task t2 = LibraryTestHelper.createTask(pkg, "t2"); Task t3 = LibraryTestHelper.createTask(pkg, "t3"); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); // these two should generate the same result EStructuralFeature feature = UmaPackage.eINSTANCE.getContentDescription_Sections(); EStructuralFeature feature2 = UmaPackage.eINSTANCE.getTask_Steps(); List items; Task t; Section s1_1 = LibraryTestHelper.createSection(t1.getPresentation(), "t1s1", "t1s1"); Section s1_2 = LibraryTestHelper.createSection(t1.getPresentation(), "t1s2", "t1s2"); Section s2_1 = LibraryTestHelper.createSection(t2.getPresentation(), "t2s1", "t2s1"); Section s2_2 = LibraryTestHelper.createSection(t2.getPresentation(), "t2s2", "t2s2"); Section s3_1 = LibraryTestHelper.createSection(t3.getPresentation(), "t3s1", "t3s1"); Section s3_2 = LibraryTestHelper.createSection(t3.getPresentation(), "t3s2", "t3s2"); LibraryTestHelper.setReplaces(t2, t1); t = (Task)ConfigurationHelper.getCalculatedElement(t1, realizer); assertEquals(t2, t); items = ConfigurationHelper.calc0nFeatureValue(t.getPresentation(), t, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(s2_1)); assertTrue(items.contains(s2_2)); items = ConfigurationHelper.calc0nFeatureValue(t, feature2, realizer); assertEquals(2, items.size()); assertTrue(items.contains(s2_1)); assertTrue(items.contains(s2_2)); } // test the sections public void test_task_steps_with_extenders() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Task t1 = LibraryTestHelper.createTask(pkg, "t1"); Task t2 = LibraryTestHelper.createTask(pkg, "t2"); Task t3 = LibraryTestHelper.createTask(pkg, "t3"); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); // these two should generate the same result EStructuralFeature feature = UmaPackage.eINSTANCE.getContentDescription_Sections(); EStructuralFeature feature2 = UmaPackage.eINSTANCE.getTask_Steps(); List items; Section s1_1 = LibraryTestHelper.createSection(t1.getPresentation(), "t1s1", "t1s1"); Section s1_2 = LibraryTestHelper.createSection(t1.getPresentation(), "t1s2", "t1s2"); Section s2_1 = LibraryTestHelper.createSection(t2.getPresentation(), "t2s1", "t2s1"); Section s2_2 = LibraryTestHelper.createSection(t2.getPresentation(), "t2s2", "t2s2"); // Section s3_1 = LibraryTestHelper.createSection(t3.getPresentation(), "t3s1", "t3s1"); // Section s3_2 = LibraryTestHelper.createSection(t3.getPresentation(), "t3s2", "t3s2"); LibraryTestHelper.setExtends(t2, t1); LibraryTestHelper.setExtends(t3, t1); // case 1 items = ConfigurationHelper.calc0nFeatureValue(t2.getPresentation(), t2, feature, realizer); assertEquals(4, items.size()); assertTrue(items.contains(s1_1)); assertTrue(items.contains(s1_2)); assertTrue(items.contains(s2_1)); assertTrue(items.contains(s2_2)); items = ConfigurationHelper.calc0nFeatureValue(t2, feature2, realizer); assertEquals(4, items.size()); assertTrue(items.contains(s1_1)); assertTrue(items.contains(s1_2)); assertTrue(items.contains(s2_1)); assertTrue(items.contains(s2_2)); // case 2, t3 has no steps, this was once a bug since the contentDescription object is not created // and the realization failed items = ConfigurationHelper.calc0nFeatureValue(t3.getPresentation(), t3, feature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(s1_1)); assertTrue(items.contains(s1_2)); items = ConfigurationHelper.calc0nFeatureValue(t3, feature2, realizer); assertEquals(2, items.size()); assertTrue(items.contains(s1_1)); assertTrue(items.contains(s1_2)); } }