| //------------------------------------------------------------------------------ |
| // 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.Domain; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodPlugin; |
| import org.eclipse.epf.uma.ecore.util.OppositeFeature; |
| import org.eclipse.epf.uma.util.AssociationHelper; |
| |
| /** |
| * Test case for incoming 0..1 feature varaibility. |
| * |
| * @author Jinhua Xi |
| * @since 1.0 |
| */ |
| public class Incoming01FeatureTest extends VariablityBaseTestCase { |
| |
| /** |
| * @param name |
| */ |
| public Incoming01FeatureTest(String name) { |
| super(name); |
| } |
| |
| public void test_workProduct_Domain() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Domain d1 = LibraryTestHelper.createDomain(plugin, "d1"); |
| Domain d2 = LibraryTestHelper.createDomain(plugin, "d2"); |
| 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_Domains; |
| |
| // since 1.2, this is a to-many feature, not to-one |
| // case 1 |
| d1.getWorkProducts().add(a1); |
| d2.getWorkProducts().add(a2); |
| List items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); |
| assertEquals(1, items.size()); |
| assertEquals(d1, items.get(0)); |
| |
| items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); |
| assertEquals(1, items.size()); |
| assertEquals(d2, items.get(0)); |
| |
| // case 2: |
| LibraryTestHelper.setContributes(d2, d1); |
| items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); |
| assertEquals(1, items.size()); |
| assertEquals(d1, items.get(0)); |
| |
| items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); |
| assertEquals(1, items.size()); |
| assertEquals(d1, items.get(0)); |
| |
| // case 3: |
| // if d2 replaces d1, it's outgoing to-many association is repalced, |
| // i.e the end result is d2 -> a2, but a1 does not have a domain |
| LibraryTestHelper.setReplaces(d2, d1); |
| items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); |
| assertEquals(0, items.size()); |
| |
| items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); |
| assertEquals(1, items.size()); |
| assertEquals(d2, items.get(0)); |
| |
| // case 4: |
| LibraryTestHelper.setExtends(d2, d1); |
| items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); |
| assertEquals(2, items.size()); |
| assertEquals(d1, items.get(0)); |
| assertEquals(d2, items.get(1)); |
| |
| items = ConfigurationHelper.calc0nFeatureValue(a2, ofeature, realizer); |
| assertEquals(1, items.size()); |
| assertEquals(d2, items.get(0)); |
| } |
| |
| public void test_workProduct_Domain_with_contributors() { |
| MethodPlugin plugin = LibraryTestHelper.createMethodPlugin("plugin 1"); |
| ContentPackage pkg = LibraryTestHelper.createContentPackage(plugin, "p1"); |
| Domain d1 = LibraryTestHelper.createDomain(plugin, "d1"); |
| Domain d2 = LibraryTestHelper.createDomain(plugin, "d2"); |
| Domain d3 = LibraryTestHelper.createDomain(plugin, "d3"); |
| 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_Domains; |
| |
| // case 1 |
| d2.getWorkProducts().add(a2); |
| LibraryTestHelper.setContributes(a2, a1); |
| List items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); |
| assertEquals(1, items.size()); |
| assertEquals(d2, items.get(0)); |
| |
| // case 2: |
| d1.getWorkProducts().add(a1); |
| d2.getWorkProducts().add(a2); |
| LibraryTestHelper.setContributes(a2, a1); |
| items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); |
| assertEquals(2, items.size()); |
| assertTrue(items.contains(d1)); |
| assertTrue(items.contains(d2)); |
| |
| // case 3: more than contributors, return null |
| d1.getWorkProducts().remove(a1); |
| d2.getWorkProducts().add(a2); |
| d3.getWorkProducts().add(a3); |
| LibraryTestHelper.setContributes(a3, a1); |
| items = ConfigurationHelper.calc0nFeatureValue(a1, ofeature, realizer); |
| assertEquals(2, items.size()); |
| assertTrue(items.contains(d2)); |
| assertTrue(items.contains(d3)); |
| } |
| |
| } |