//------------------------------------------------------------------------------ // 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.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.MethodPlugin; import org.eclipse.epf.uma.Role; import org.eclipse.epf.uma.ecore.util.OppositeFeature; import org.eclipse.epf.uma.util.AssociationHelper; /** * Test case for incoming 0..n feature varaibility. * * @author Jinhua Xi * @since 1.0 */ public class Incoming0nFeatureTest extends VariablityBaseTestCase { /** * @param name */ public Incoming0nFeatureTest(String name) { super(name); } /** * since 1.0m4, a work product can have multiple roles * */ public void test_workProduct_ResponsibleRoles() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Role r1 = LibraryTestHelper.createRole(pkg, "r1"); Role r2 = LibraryTestHelper.createRole(pkg, "r2"); Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1"); Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2"); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); OppositeFeature ofeature = AssociationHelper.WorkProduct_ResponsibleRoles; List items; List list = r1.getResponsibleFor(); list.add(a1); list.add(a1); // case 1 r1.getResponsibleFor().add(a1); r2.getResponsibleFor().add(a2); items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(r1)); items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(r2)); // case 2: r1.getResponsibleFor().add(a1); r2.getResponsibleFor().add(a2); LibraryTestHelper.setContributes(r2, r1); items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(r1)); items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(r1)); // case 3: // since r2 replaces r1, the end result is r2 -> a2, // r1 does not exist any more, so a1 has no responsible role r1.getResponsibleFor().add(a1); r2.getResponsibleFor().add(a2); LibraryTestHelper.setReplaces(r2, r1); items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); assertEquals(0, items.size()); items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(r2)); // case 4: r1.getResponsibleFor().add(a1); r2.getResponsibleFor().add(a2); LibraryTestHelper.setExtends(r2, r1); items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(r1)); assertTrue(items.contains(r2)); items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(r2)); // case 5: both r1 and r2 responsible for a1 r1.getResponsibleFor().clear(); r2.getResponsibleFor().clear(); r1.getResponsibleFor().add(a1); r2.getResponsibleFor().add(a1); LibraryTestHelper.setExtends(r2, r1); items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); assertEquals(2, items.size()); // this need to wait till the opposite feature change from phong is delivered assertTrue(items.contains(r1)); assertTrue(items.contains(r2)); items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); assertEquals(0, items.size()); } public void test_workProduct_ResponsibleRoles_with_contributors() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Role r1 = LibraryTestHelper.createRole(pkg, "r1"); Role r2 = LibraryTestHelper.createRole(pkg, "r2"); Role r3 = LibraryTestHelper.createRole(pkg, "r3"); Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1"); Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2"); Artifact a3 = LibraryTestHelper.createArtifact(pkg, "a3"); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); OppositeFeature ofeature = AssociationHelper.WorkProduct_ResponsibleRoles; List items; // case 1 r2.getResponsibleFor().add(a2); LibraryTestHelper.setContributes(a2, a1); items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); assertEquals(1, items.size()); assertTrue(items.contains(r2)); // case 2: r1.getResponsibleFor().add(a1); r2.getResponsibleFor().add(a2); LibraryTestHelper.setContributes(a2, a1); items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(r1)); assertTrue(items.contains(r2)); } public void test_workProduct_ResponsibleRoles_with_replacer() { MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); Role r1 = LibraryTestHelper.createRole(pkg, "r1"); Role r2 = LibraryTestHelper.createRole(pkg, "r2"); // Role r3 = LibraryTestHelper.createRole(pkg, "r3"); Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1"); Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2"); // Artifact a3 = LibraryTestHelper.createArtifact(pkg, "a3"); MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); config.getMethodPluginSelection().add(plugin); config.getMethodPackageSelection().add(pkg); LibraryUtil.validateMethodConfiguration(config); ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); OppositeFeature ofeature = AssociationHelper.WorkProduct_ResponsibleRoles; List items; // case 1 r1.getResponsibleFor().add(a1); r2.getResponsibleFor().add(a2); LibraryTestHelper.setReplaces(a2, a1); items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); assertEquals(2, items.size()); assertTrue(items.contains(r1)); assertTrue(items.contains(r2)); } }