| //------------------------------------------------------------------------------ |
| // 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.ContentPackage; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.MethodPlugin; |
| import org.eclipse.epf.uma.Role; |
| import org.eclipse.epf.uma.Task; |
| import org.eclipse.epf.uma.UmaPackage; |
| |
| /** |
| * Test case for 0..1 feature varaibility. |
| * |
| * @author Jinhua Xi |
| * @since 1.0 |
| */ |
| public class Outgoing01FeatureTest extends VariablityBaseTestCase { |
| |
| /** |
| * @param name |
| */ |
| public Outgoing01FeatureTest(String name) { |
| super(name); |
| } |
| |
| |
| public void test_task_performedBy() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Task t1 = LibraryTestHelper.createTask(pkg, "t1"); |
| Role r1 = LibraryTestHelper.createRole(pkg, "r1"); |
| |
| t1.getPerformedBy().add(r1); |
| |
| 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_PerformedBy(); |
| //MethodElement r = ConfigurationHelper.calc01FeatureValue(t1, feature, realizer); |
| List<MethodElement> list = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); |
| assertEquals(r1, list.get(0)); |
| } |
| |
| public void test_task_performedBy_with_contributor() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Task t1 = LibraryTestHelper.createTask(pkg, "t1"); |
| Role r1 = LibraryTestHelper.createRole(pkg, "r1"); |
| Task t2 = LibraryTestHelper.createTask(pkg, "t2"); |
| Role r2 = LibraryTestHelper.createRole(pkg, "r2"); |
| |
| t1.getPerformedBy().add(r1); |
| t2.getPerformedBy().add(r2); |
| |
| // t2 contributes to t1, since t1 already has a to-one association, |
| // the one from the contributor is ignored |
| 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_PerformedBy(); |
| //MethodElement r = ConfigurationHelper.calc01FeatureValue(t1, feature, realizer); |
| //assertEquals(r1, r); |
| List<MethodElement> list = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); |
| assertEquals(r1, list.get(0)); |
| } |
| |
| public void test_task_performedBy_from_contributor() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Task t1 = LibraryTestHelper.createTask(pkg, "t1"); |
| // Role r1 = LibraryTestHelper.createRole(pkg, "r1"); |
| Task t2 = LibraryTestHelper.createTask(pkg, "t2"); |
| Role r2 = LibraryTestHelper.createRole(pkg, "r2"); |
| |
| // don't set performer in t1, so it will get from the contributor |
| //t1.setPerformedBy(r1); |
| t2.getPerformedBy().add(r2); |
| |
| // t2 contributes to t1, since t1 does not have a to-one association, |
| // the one from the contributor is used |
| 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_PerformedBy(); |
| //MethodElement r = ConfigurationHelper.calc01FeatureValue(t1, feature, realizer); |
| //assertEquals(r2, r); |
| List<MethodElement> list = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); |
| assertEquals(r2, list.get(0)); |
| } |
| |
| public void test_task_performedBy_with_contributors() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Task t1 = LibraryTestHelper.createTask(pkg, "t1"); |
| // Role r1 = LibraryTestHelper.createRole(pkg, "r1"); |
| Task t2 = LibraryTestHelper.createTask(pkg, "t2"); |
| Role r2 = LibraryTestHelper.createRole(pkg, "r2"); |
| |
| Task t3 = LibraryTestHelper.createTask(pkg, "t3"); |
| Role r3 = LibraryTestHelper.createRole(pkg, "r3"); |
| |
| // don't set performer in t1, so it will get from the contributor |
| t2.getPerformedBy().add(r2); |
| t3.getPerformedBy().add(r3); |
| |
| // t2 and t3 both contribute to t1, even though t1 does not have a to-one association, |
| // the ones from the contributors are ignored since there are more than one |
| 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_PerformedBy(); |
| MethodElement r = ConfigurationHelper.calc01FeatureValue(t1, feature, realizer); |
| assertEquals(null, r); |
| } |
| |
| public void test_task_performedBy_with_replacer() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Task t1 = LibraryTestHelper.createTask(pkg, "t1"); |
| Role r1 = LibraryTestHelper.createRole(pkg, "r1"); |
| Task t2 = LibraryTestHelper.createTask(pkg, "t2"); |
| Role r2 = LibraryTestHelper.createRole(pkg, "r2"); |
| |
| t1.getPerformedBy().add(r1); |
| t2.getPerformedBy().add(r2); |
| |
| 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); // if this fail, the remaining code will not be executed |
| |
| EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_PerformedBy(); |
| //MethodElement r = ConfigurationHelper.calc01FeatureValue(t, feature, realizer); |
| //assertEquals(r2, r); |
| List<MethodElement> list = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); |
| assertEquals(r1, list.get(0)); |
| } |
| |
| public void test_task_performedBy_with_replacer_no_performer() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Task t1 = LibraryTestHelper.createTask(pkg, "t1"); |
| Role r1 = LibraryTestHelper.createRole(pkg, "r1"); |
| Task t2 = LibraryTestHelper.createTask(pkg, "t2"); |
| Role r2 = LibraryTestHelper.createRole(pkg, "r2"); |
| |
| t1.getPerformedBy().add(r1); |
| |
| // t2 has no primary performer |
| // t2.setPerformedBy(r2); |
| |
| 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); // if this fail, the remaining code will not be executed |
| |
| EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_PerformedBy(); |
| MethodElement r = ConfigurationHelper.calc01FeatureValue(t, feature, realizer); |
| |
| if (ElementRealizer.isExtendReplaceEnabled() ) { |
| assertEquals(r1, r); |
| } else { |
| assertEquals(null, r); |
| } |
| } |
| |
| public void test_task_performedBy_with_replacers() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Task t1 = LibraryTestHelper.createTask(pkg, "t1"); |
| Role r1 = LibraryTestHelper.createRole(pkg, "r1"); |
| Task t2 = LibraryTestHelper.createTask(pkg, "t2"); |
| Role r2 = LibraryTestHelper.createRole(pkg, "r2"); |
| Task t3 = LibraryTestHelper.createTask(pkg, "t3"); |
| Role r3 = LibraryTestHelper.createRole(pkg, "r3"); |
| |
| t1.getPerformedBy().add(r1); |
| t2.getPerformedBy().add(r2); |
| t3.getPerformedBy().add(r3); |
| |
| LibraryTestHelper.setReplaces(t2, t1); |
| LibraryTestHelper.setReplaces(t3, t1); |
| |
| MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1"); |
| config.getMethodPluginSelection().add(plugin); |
| config.getMethodPackageSelection().add(pkg); |
| LibraryUtil.validateMethodConfiguration(config); |
| ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config); |
| |
| // if more than one replacer, all replacers are ignored |
| MethodElement t = ConfigurationHelper.getCalculatedElement(t1, realizer); |
| assertEquals(t1, t); |
| |
| EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_PerformedBy(); |
| //MethodElement r = ConfigurationHelper.calc01FeatureValue(t, feature, realizer); |
| //assertEquals(r1, r); |
| List<MethodElement> list = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); |
| assertEquals(r1, list.get(0)); |
| } |
| |
| |
| public void test_task_performedBy_with_extenders() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Task t1 = LibraryTestHelper.createTask(pkg, "t1"); |
| Role r1 = LibraryTestHelper.createRole(pkg, "r1"); |
| Task t2 = LibraryTestHelper.createTask(pkg, "t2"); |
| Role r2 = LibraryTestHelper.createRole(pkg, "r2"); |
| // Task t3 = LibraryTestHelper.createTask(pkg, "t3"); |
| // Role r3 = LibraryTestHelper.createRole(pkg, "r3"); |
| |
| LibraryTestHelper.setExtends(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_PerformedBy(); |
| MethodElement r; |
| |
| // case 1: |
| //t1.getPerformedBy().add(null); |
| t2.getPerformedBy().add(r2); |
| //r = ConfigurationHelper.calc01FeatureValue(t1, feature, realizer); |
| //assertEquals(null, r); |
| List<MethodElement> list = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); |
| assertTrue(list.isEmpty()); |
| |
| //r = ConfigurationHelper.calc01FeatureValue(t2, feature, realizer); |
| //assertEquals(r2, r); |
| list = ConfigurationHelper.calc0nFeatureValue(t2, feature, realizer); |
| assertEquals(r2, list.get(0)); |
| |
| // case 2: |
| t1.getPerformedBy().add(r1); |
| t2.getPerformedBy().add(r1); |
| |
| //r = ConfigurationHelper.calc01FeatureValue(t1, feature, realizer); |
| //assertEquals(r1, r); |
| list = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); |
| assertEquals(r1, list.get(0)); |
| |
| //r = ConfigurationHelper.calc01FeatureValue(t2, feature, realizer); |
| //assertEquals(r2, r); |
| list = ConfigurationHelper.calc0nFeatureValue(t2, feature, realizer); |
| assertTrue(list.size() == 2); |
| assertEquals(r2, list.get(0)); |
| assertEquals(r1, list.get(1)); |
| |
| // case 3: |
| t1.getPerformedBy().clear(); |
| t2.getPerformedBy().clear(); |
| t1.getPerformedBy().add(r1); |
| //t2.getPerformedBy().add(null); |
| |
| //r = ConfigurationHelper.calc01FeatureValue(t1, feature, realizer); |
| //assertEquals(r1, r); |
| list = ConfigurationHelper.calc0nFeatureValue(t1, feature, realizer); |
| assertEquals(r1, list.get(0)); |
| |
| //r = ConfigurationHelper.calc01FeatureValue(t2, feature, realizer); |
| //assertEquals(r1, r); |
| list = ConfigurationHelper.calc0nFeatureValue(t2, feature, realizer); |
| assertEquals(r1, list.get(0)); |
| |
| } |
| } |