blob: ec8fa92db9486354423fe9e88605bcb5dc39eef3 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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.Checklist;
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.RoleSet;
import org.eclipse.epf.uma.Section;
import org.eclipse.epf.uma.Task;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.ecore.util.OppositeFeature;
import org.eclipse.epf.uma.util.AssociationHelper;
/**
* record all bugs relating to rariability so that we can do regression test on those issues.
*
* @author Jinhua Xi
* @since 1.0
*
*/
public class RegressionTest extends VariablityBaseTestCase {
public RegressionTest(String name) {
super(name);
}
/**
* 140875Inability to add responsible for relationship to a work product
*
If I make a role, R2, in a plug-in, P2, responsible for a work product, WP2,
that contributes to a work product, WP1, in another plug-in, P1, that
responsibility does not appear to be added. Specifically, the fact that R2 is
responsibile for WP1 is not displayed in the Browse perspective for a
configuration that contains both plug-ins. Also, the fact that R2 is
responsible for WP2 is not displayed in the Preview tab for R2 or WP2
If the base does not have an incoming relationship, then it should be able to
be contributed. In this example, WP1 did not have a responsible role
relationship.
*
*/
public void test_140875() {
// this should not be an issue any more since 1.0m4.
// WP --> Role is to many association now.
MethodPlugin plugin1 = LibraryTestHelper.createMethodPlugin("plugin 1");
ContentPackage pkg1 = LibraryTestHelper.createContentPackage(plugin1, "p1");
MethodPlugin plugin2 = LibraryTestHelper.createMethodPlugin("plugin 2");
ContentPackage pkg2 = LibraryTestHelper.createContentPackage(plugin2, "p2");
plugin2.getBases().add(plugin1);
// Role r1 = LibraryTestHelper.createRole(pkg1, "r1");
Artifact wp1 = LibraryTestHelper.createArtifact(pkg1, "wp1");
Role r2 = LibraryTestHelper.createRole(pkg2, "r2");
Artifact wp2 = LibraryTestHelper.createArtifact(pkg2, "wp2");
r2.getResponsibleFor().add(wp2);
LibraryTestHelper.setContributes(wp2, wp1);
MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1");
config.getMethodPluginSelection().add(plugin1);
config.getMethodPackageSelection().add(pkg1);
config.getMethodPluginSelection().add(plugin2);
config.getMethodPackageSelection().add(pkg2);
LibraryUtil.validateMethodConfiguration(config);
ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config);
List items;
EStructuralFeature feature = UmaPackage.eINSTANCE.getRole_ResponsibleFor();
items = ConfigurationHelper.calc0nFeatureValue(r2, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(wp1));
OppositeFeature ofeature = AssociationHelper.WorkProduct_ResponsibleRoles;
items = ConfigurationHelper.calc0nFeatureValue(wp2, ofeature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(r2));
}
/**
* 143871 - An extending checklist with no items does not realize the base checklist items
*
Have a base task, Task A, with some steps.
Extend it with a new Task B, which has no steps.
Browsing Task B should show the steps of Task A, but it does not.
If Task B is subsequently assigned some steps, then all will be realized in the
browser. Further, if the Task B's steps are then deleted, the realization will
still show Task A's steps.
The description applies to checklists, and should read:
Have a base checklist, Checklist A, with some checklist items.
Extend it with a new Checklist B, which has no items.
Browsing Checklist B should show the steps of Checklist A, but it does not.
If Checklist B is subsequently assigned some items, then all will be realized
in the browser. Further, if the Checklist B's items are then deleted, the
realization will still show Checklist A's items.
*/
public void test_143871_task_steps() {
MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1");
ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1");
Task t1 = LibraryTestHelper.createTask(pkg, "t1");
Task t2 = LibraryTestHelper.createTask(pkg, "t2");
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");
LibraryTestHelper.setExtends(t2, t1);
items = ConfigurationHelper.calc0nFeatureValue(t2.getPresentation(), t2, feature, realizer);
assertEquals(2, items.size());
assertTrue(items.contains(s1_1));
assertTrue(items.contains(s1_2));
items = ConfigurationHelper.calc0nFeatureValue(t2, feature2, realizer);
assertEquals(2, items.size());
assertTrue(items.contains(s1_1));
assertTrue(items.contains(s1_2));
// then set the sections for task 2
Section s2_1 = LibraryTestHelper.createSection(t2.getPresentation(), "t2s1", "t2s1");
Section s2_2 = LibraryTestHelper.createSection(t2.getPresentation(), "t2s2", "t2s2");
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));
}
public void test_143871_checklist_items() {
MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1");
ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1");
Checklist c1 = LibraryTestHelper.createChecklist(pkg, "c1");
Checklist c2 = LibraryTestHelper.createChecklist(pkg, "c2");
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.getContentDescription_Sections();
List items;
Section s1_1 = LibraryTestHelper.createSection(c1.getPresentation(), "c1s1", "c1s1");
Section s1_2 = LibraryTestHelper.createSection(c1.getPresentation(), "c1s2", "c1s2");
LibraryTestHelper.setExtends(c2, c1);
items = ConfigurationHelper.calc0nFeatureValue(c2.getPresentation(), c2, feature, realizer);
assertEquals(2, items.size());
assertTrue(items.contains(s1_1));
assertTrue(items.contains(s1_2));
// then set the sections for checklist 2
Section s2_1 = LibraryTestHelper.createSection(c2.getPresentation(), "c2s1", "c2s1");
Section s2_2 = LibraryTestHelper.createSection(c2.getPresentation(), "c2s2", "c2s2");
items = ConfigurationHelper.calc0nFeatureValue(c2.getPresentation(), c2, 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));
}
/**
* 146153 - Variability: Incoming to-many associations are not preserved in the case of role replacement and extension
*
STEPS:
1. create roleA and roleB. Assign them to rolesetA and rolesetB respectively
2. set roleA to replace roleB and browse
results=> browsing shows roleA in rolesetA only.
expect results=> roleA should be in rolesetA and rolesetB
Similar issue when roleA is extending roleB
*
*/
public void test_146153_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");
RoleSet rs1 = LibraryTestHelper.createRoleSet(plugin, "rs1");
RoleSet rs2 = LibraryTestHelper.createRoleSet(plugin, "rs2");
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.getRoleSet_Roles();
OppositeFeature ofeature = AssociationHelper.Role_RoleSets;
List items;
rs1.getRoles().add(r1);
rs2.getRoles().add(r2);
LibraryTestHelper.setReplaces(r2, r1);
items = ConfigurationHelper.calc0nFeatureValue(rs1, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(r2));
items = ConfigurationHelper.calc0nFeatureValue(rs2, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(r2));
items = ConfigurationHelper.calc0nFeatureValue(r2, ofeature, realizer);
assertEquals(2, items.size());
assertTrue(items.contains(rs1));
assertTrue(items.contains(rs2));
}
public void test_146153_with_contributor() {
MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1");
ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1");
Role r1 = LibraryTestHelper.createRole(pkg, "r1");
Role r2 = LibraryTestHelper.createRole(pkg, "r2");
RoleSet rs1 = LibraryTestHelper.createRoleSet(plugin, "rs1");
RoleSet rs2 = LibraryTestHelper.createRoleSet(plugin, "rs2");
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.getRoleSet_Roles();
OppositeFeature ofeature = AssociationHelper.Role_RoleSets;
List items;
rs1.getRoles().add(r1);
rs2.getRoles().add(r2);
LibraryTestHelper.setContributes(r2, r1);
items = ConfigurationHelper.calc0nFeatureValue(rs1, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(r1));
items = ConfigurationHelper.calc0nFeatureValue(rs2, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(r1));
items = ConfigurationHelper.calc0nFeatureValue(r1, ofeature, realizer);
assertEquals(2, items.size());
assertTrue(items.contains(rs1));
assertTrue(items.contains(rs2));
}
public void test_146153_with_extender() {
MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1");
ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1");
Role r1 = LibraryTestHelper.createRole(pkg, "r1");
Role r2 = LibraryTestHelper.createRole(pkg, "r2");
RoleSet rs1 = LibraryTestHelper.createRoleSet(plugin, "rs1");
RoleSet rs2 = LibraryTestHelper.createRoleSet(plugin, "rs2");
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.getRoleSet_Roles();
OppositeFeature ofeature = AssociationHelper.Role_RoleSets;
List items;
rs1.getRoles().add(r1);
rs2.getRoles().add(r2);
LibraryTestHelper.setExtends(r2, r1);
items = ConfigurationHelper.calc0nFeatureValue(rs1, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(r1));
items = ConfigurationHelper.calc0nFeatureValue(rs2, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(r2));
items = ConfigurationHelper.calc0nFeatureValue(r1, ofeature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(rs1));
items = ConfigurationHelper.calc0nFeatureValue(r2, ofeature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(rs2));
}
/**
* R00382120 - Authoring: Extending a base that has been replaced, does not extend the replacement
* Let A, B, and C be elements or categories.
1. Let A extend B.
2. Let C replace B. (order does not matter)
Result:
A extends the associations of B, even though B is being replaced.
Should be:
A extends the associations of the replacement, C.
*
*/
public void test_R00382120_task_MandatoryInput_with_replacers() {
MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1");
ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1");
Task tA = LibraryTestHelper.createTask(pkg, "t1");
Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1");
Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2");
tA.getMandatoryInput().add(a1);
tA.getMandatoryInput().add(a2);
Task tB = LibraryTestHelper.createTask(pkg, "t2");
Artifact a3 = LibraryTestHelper.createArtifact(pkg, "a3");
Artifact a4 = LibraryTestHelper.createArtifact(pkg, "a4");
tB.getMandatoryInput().add(a3);
tB.getMandatoryInput().add(a4);
Task tC = LibraryTestHelper.createTask(pkg, "t3");
Artifact a5 = LibraryTestHelper.createArtifact(pkg, "a5");
tC.getMandatoryInput().add(a5);
LibraryTestHelper.setExtends(tA, tB);
LibraryTestHelper.setReplaces(tC, tB);
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(tA, feature, realizer);
assertEquals(3, items.size());
assertTrue(items.contains(a1));
assertTrue(items.contains(a2));
assertTrue(items.contains(a5));
}
/**
* R00382327 - replaced element does not show incoming relationships
* e.g. replace a work product: the published page does not show the Tasks
* the workproduct is input/output to.
* It should list all the Tasks from the replaced element.
*
*/
public void test_R00382327_task_MandatoryInput_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");
Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1");
Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2");
// t1, t3 -> a1, t2->a2, a2 -replace->a1
// a1's tasks should be t1, t2,t3
t1.getMandatoryInput().add(a1);
t3.getMandatoryInput().add(a1);
t2.getMandatoryInput().add(a2);
LibraryTestHelper.setReplaces(a2, a1);
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_MandatoryInputTo_Tasks;
List items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer);
assertEquals(3, items.size());
assertTrue(items.contains(t1));
assertTrue(items.contains(t2));
assertTrue(items.contains(t3));
}
/**
* R00382972 - Authoring: When sub-artifact extends parent artifact,
* that sub artifact has infinite loop in configuration explorer tree.
*/
public void test_R00382972_artifact_SubArtifacts() {
MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1");
ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1");
Artifact a1 = LibraryTestHelper.createArtifact(pkg, "a1");
Artifact a2 = LibraryTestHelper.createArtifact(pkg, "a2");
// a1 contains a2, a2 extends a1
// what's a1's childres? a2
// what's a2's children? a2? NOOOO!
a1.getContainedArtifacts().add(a2);
LibraryTestHelper.setExtends(a2, a1);
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.getArtifact_ContainedArtifacts();
List items = ConfigurationHelper.calc0nFeatureValue(a1, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(a2));
// a2's contained arfifacts should contain the ones from the base, which include itself
// should not contain itself
items = ConfigurationHelper.calc0nFeatureValue(a2, feature, realizer);
assertEquals(0, items.size());
}
/**
* R00383528 - Browsing: A replacing role does not pick up the task(s) for which the replaced role was primary performer
*
* Let Role A be primary performer for Task A,
Role B be primary performer for Task B.
Now have Role B replace Role A.
Browse Role B and should expect it to be the primary performer for Task A as well as Task B.
It only shows Task B.
Browse Task A and it correctly shows that Role B is the primary performer.
*/
public void R00383528_role_tasks_with_repalcer() {
MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1");
ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1");
Task tA = LibraryTestHelper.createTask(pkg, "t1");
Role rA = LibraryTestHelper.createRole(pkg, "r1");
Task tB = LibraryTestHelper.createTask(pkg, "t2");
Role rB = LibraryTestHelper.createRole(pkg, "r2");
tA.getPerformedBy().add(rA);
tB.getPerformedBy().add(rB);
LibraryTestHelper.setReplaces(rB, rA);
MethodConfiguration config = LibraryTestHelper.createConfiguration("config 1");
config.getMethodPluginSelection().add(plugin);
config.getMethodPackageSelection().add(pkg);
LibraryUtil.validateMethodConfiguration(config);
ElementRealizer realizer = DefaultElementRealizer.newElementRealizer(config);
// outgoing feature
EStructuralFeature feature = UmaPackage.eINSTANCE.getTask_PerformedBy();
MethodElement r = ConfigurationHelper.calc01FeatureValue(tA, feature, realizer);
assertEquals(rB, r);
r = ConfigurationHelper.calc01FeatureValue(tB, feature, realizer);
assertEquals(rB, r);
// incoming feature
OppositeFeature ofeature = AssociationHelper.Role_Primary_Tasks;
List items = ConfigurationHelper.calc0nFeatureValue(rB, feature, realizer);
assertEquals(2, items.size());
assertTrue(items.contains(tA));
assertTrue(items.contains(tB));
}
/**
* 146153 - Variability: Incoming to-many associations are not preserved in the case of role replacement
*
* STEPS:
1. create roleA and roleB. Assign them to rolesetA and rolesetB respectively
2. set roleA to replace roleB and browse
results=> browsing shows roleA in rolesetA only.
expect results=> roleA should be in rolesetA and rolesetB
*
*/
public void test_146153_role_roleset_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");
RoleSet rs1 = LibraryTestHelper.createRoleSet(plugin, "rs1");
RoleSet rs2 = LibraryTestHelper.createRoleSet(plugin, "rs2");
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.Role_RoleSets;
List items;
// case 1
rs1.getRoles().add(r1);
rs2.getRoles().add(r2);
LibraryTestHelper.setReplaces(r2, r1);
items = ConfigurationHelper.calc0nFeatureValue(r2, ofeature, realizer);
assertEquals(2, items.size());
assertTrue(items.contains(rs1));
assertTrue(items.contains(rs2));
}
/**
* 152230 - Browsing: Role<-->WP relationship shows inconsistancy
* 1. create role1 responsible for wp1
2. create role2 responsible for wp2
3. has wp2 replacs wp1, and wp1 contribute to wp
4. browsing shows that
in wp, it shows that both role1 and role2 are responsible
in role1, the relationship shows it is responsible for wp
but in role2, the relationship shows no wp
To be consistant, wp should be showing in role2's relationship diagram.
*/
public void test_152230_role_wp() {
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 wp1 = LibraryTestHelper.createArtifact(pkg, "wp1");
Artifact wp2 = LibraryTestHelper.createArtifact(pkg, "wp2");
Artifact wp = LibraryTestHelper.createArtifact(pkg, "wp");
r1.getResponsibleFor().add(wp1);
r2.getResponsibleFor().add(wp2);
LibraryTestHelper.setContributes(wp1, wp);
LibraryTestHelper.setReplaces(wp2, wp1);
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.getRole_ResponsibleFor();
OppositeFeature ofeature = AssociationHelper.WorkProduct_ResponsibleRoles;
List items;
// both r1 and r2 responsible for wp
items = ConfigurationHelper.calc0nFeatureValue(r1, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(wp));
items = ConfigurationHelper.calc0nFeatureValue(r2, feature, realizer);
assertEquals(1, items.size());
assertTrue(items.contains(wp));
items = ConfigurationHelper.calc0nFeatureValue(wp, ofeature, realizer);
assertEquals(2, items.size());
assertTrue(items.contains(r1));
assertTrue(items.contains(r2));
}
}