blob: e706bfca449e12c970405a7241c1eca3c2433e59 [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.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));
}
}