Skip to content

Package: DefaultCreateNewModelElementStrategyProvider_PTest$TestEClassSelectionStrategyProvider

DefaultCreateNewModelElementStrategyProvider_PTest$TestEClassSelectionStrategyProvider

nameinstructionbranchcomplexitylinemethod
DefaultCreateNewModelElementStrategyProvider_PTest.TestEClassSelectionStrategyProvider(DefaultCreateNewModelElementStrategyProvider_PTest, Double, EClassSelectionStrategy)
M: 0 C: 12
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
bid()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
create()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2018 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * eugen - initial API and implementation
13: * Christian W. Damus - bug 529138
14: ******************************************************************************/
15: package org.eclipse.emf.ecp.ui.view.swt.test;
16:
17: import static java.lang.Double.POSITIVE_INFINITY;
18: import static java.util.Collections.singleton;
19: import static org.hamcrest.CoreMatchers.instanceOf;
20: import static org.hamcrest.CoreMatchers.is;
21: import static org.hamcrest.MatcherAssert.assertThat;
22: import static org.junit.Assert.assertTrue;
23: import static org.mockito.Matchers.any;
24: import static org.mockito.Matchers.anyCollectionOf;
25: import static org.mockito.Matchers.isNull;
26: import static org.mockito.Matchers.same;
27: import static org.mockito.Mockito.calls;
28: import static org.mockito.Mockito.inOrder;
29: import static org.mockito.Mockito.mock;
30: import static org.mockito.Mockito.when;
31:
32: import java.util.Collection;
33: import java.util.Collections;
34: import java.util.HashMap;
35: import java.util.Map;
36:
37: import org.eclipse.emf.ecore.EClass;
38: import org.eclipse.emf.ecore.EEnum;
39: import org.eclipse.emf.ecore.EObject;
40: import org.eclipse.emf.ecore.EPackage;
41: import org.eclipse.emf.ecore.EReference;
42: import org.eclipse.emf.ecore.EcoreFactory;
43: import org.eclipse.emf.ecore.EcorePackage;
44: import org.eclipse.emf.ecore.impl.DynamicEObjectImpl;
45: import org.eclipse.emf.ecore.resource.Resource;
46: import org.eclipse.emf.ecp.ui.view.swt.reference.CreateNewModelElementStrategy;
47: import org.eclipse.emf.ecp.ui.view.swt.reference.CreateNewModelElementStrategy.Provider;
48: import org.eclipse.emf.ecp.ui.view.swt.reference.DefaultCreateNewModelElementStrategyProvider;
49: import org.eclipse.emf.ecp.ui.view.swt.reference.EClassSelectionStrategy;
50: import org.eclipse.emfforms.bazaar.Bazaar;
51: import org.eclipse.emfforms.bazaar.BazaarContext;
52: import org.eclipse.emfforms.bazaar.Bid;
53: import org.eclipse.emfforms.bazaar.Create;
54: import org.eclipse.emfforms.common.Optional;
55: import org.junit.Before;
56: import org.junit.BeforeClass;
57: import org.junit.Test;
58: import org.osgi.framework.Bundle;
59: import org.osgi.framework.BundleContext;
60: import org.osgi.framework.FrameworkUtil;
61: import org.osgi.framework.ServiceReference;
62:
63: /**
64: * @author eugen
65: *
66: */
67: public class DefaultCreateNewModelElementStrategyProvider_PTest {
68:
69:         private DefaultCreateNewModelElementStrategyProvider provider;
70:         private static BundleContext bundleContext;
71:         private ServiceReference<Provider> serviceReference;
72:         private Bazaar<CreateNewModelElementStrategy> bazaar;
73:
74:         private BazaarContext context;
75:
76:         @BeforeClass
77:         public static void prepare() {
78:                 final Bundle bundle = FrameworkUtil.getBundle(DefaultCreateNewModelElementStrategyProvider_PTest.class);
79:                 bundleContext = bundle.getBundleContext();
80:         }
81:
82:         @Before
83:         public void setup() {
84:                 serviceReference = bundleContext.getServiceReference(CreateNewModelElementStrategy.Provider.class);
85:                 provider = (DefaultCreateNewModelElementStrategyProvider) bundleContext.getService(serviceReference);
86:                 final Bazaar.Builder<CreateNewModelElementStrategy> builder = Bazaar.Builder.with(singleton(provider));
87:                 bazaar = builder.build();
88:                 final Map<String, ?> values = new HashMap<String, Object>();
89:                 values.put(EObject.class.getName(), null);
90:                 values.put(EReference.class.getName(), null);
91:                 context = BazaarContext.Builder.with(values).build();
92:         }
93:
94:         @Test
95:         public void testDefault() {
96:                 final CreateNewModelElementStrategy createProduct = bazaar
97:                         .createProduct(context);
98:
99:                 final Optional<EObject> createNewModelElement = createProduct.createNewModelElement(null,
100:                         EcorePackage.eINSTANCE.getEClass_EAllAttributes());
101:                 assertTrue(createNewModelElement.isPresent());
102:         }
103:
104:         @Test
105:         public void testDynamicEMF() {
106:                 final CreateNewModelElementStrategy createProduct = bazaar
107:                         .createProduct(context);
108:                 final EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
109:                 ePackage.setName("test");
110:                 ePackage.setNsPrefix("test");
111:                 ePackage.setNsURI("test");
112:                 final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
113:                 eClass.setName("MyClass");
114:                 final EReference eReference = EcoreFactory.eINSTANCE.createEReference();
115:                 eReference.setName("test");
116:                 eReference.setEType(eClass);
117:                 eReference.setUpperBound(-1);
118:                 ePackage.getEClassifiers().add(eClass);
119:
120:                 EPackage.Registry.INSTANCE.put(ePackage.getNsURI(), ePackage);
121:
122:                 final Optional<EObject> createNewModelElement = createProduct.createNewModelElement(null,
123:                         eReference);
124:                 assertTrue(createNewModelElement.isPresent());
125:                 assertTrue(createNewModelElement.get() instanceof DynamicEObjectImpl);
126:
127:                 EPackage.Registry.INSTANCE.remove(ePackage.getNsURI());
128:         }
129:
130:         @Test
131:         public void testEClassSelectionStrategy() {
132:                 final EClassSelectionStrategy strategy = forceEClass(EcorePackage.eINSTANCE.getEPackage());
133:                 final TestEClassSelectionStrategyProvider selectionStrategyProvider = new TestEClassSelectionStrategyProvider(
134:                         POSITIVE_INFINITY, strategy);
135:                 provider.addEClassSelectionStrategyProvider(selectionStrategyProvider);
136:
137:                 final CreateNewModelElementStrategy createProduct = bazaar
138:                         .createProduct(context);
139:
140:                 final Optional<EObject> createNewModelElement = createProduct.createNewModelElement(null,
141:                         EcorePackage.eINSTANCE.getEClass_EAllAttributes());
142:                 assertTrue(EPackage.class.isInstance(createNewModelElement.get()));
143:
144:                 inOrder(strategy).verify(strategy, calls(1)).collectEClasses(isNull(EObject.class),
145:                         same(EcorePackage.eINSTANCE.getEClass_EAllAttributes()),
146:                         anyCollectionOf(EClass.class));
147:                 provider.removeEClassSelectionStrategyProvider(selectionStrategyProvider);
148:         }
149:
150:         /**
151:          * Regression test for <a href="http://eclip.se/529138">bug 529138</a>, usage of
152:          * child creation descriptors from the EMF.Edit item providers in creation of
153:          * new objects.
154:          *
155:          * @see <a href="http://eclip.se/529138">bug 529138</a>
156:          */
157:         @Test
158:         public void createNewElementWithChildCreationDescriptor() {
159:
160:                 // Set up an item provider to create a template-based child descriptor.
161:                 // Create a container object in the context of an editing domain in order to let the
162:                 // framework get child creation descriptors
163:                 final EEnum template = EcoreFactory.eINSTANCE.createEEnum();
164:                 template.setName("NewEnum1");
165:                 final Resource res = new EMFEditNewChildFactoryBuilder()
166:                         .addTemplate(EPackage.class, EcorePackage.Literals.EPACKAGE__ECLASSIFIERS, template)
167:                         .buildResource();
168:                 final EPackage testPackage = EcoreFactory.eINSTANCE.createEPackage();
169:                 res.getContents().add(testPackage);
170:
171:                 // We don't want a user class selection prompt dialog, so force the EEnum class
172:                 final EClassSelectionStrategy strategy = forceEClass(EcorePackage.Literals.EENUM);
173:                 final TestEClassSelectionStrategyProvider selectionStrategyProvider = new TestEClassSelectionStrategyProvider(
174:                         POSITIVE_INFINITY, strategy);
175:                 provider.addEClassSelectionStrategyProvider(selectionStrategyProvider);
176:
177:                 // Run the test
178:                 final CreateNewModelElementStrategy createProduct = bazaar.createProduct(context);
179:
180:                 final Optional<EObject> newObject = createProduct.createNewModelElement(testPackage,
181:                         EcorePackage.Literals.EPACKAGE__ECLASSIFIERS);
182:                 assertThat(newObject.isPresent(), is(true));
183:                 assertThat(newObject.get(), instanceOf(EEnum.class));
184:                 final EEnum type = (EEnum) newObject.get();
185:
186:                 // The item provider configured the new object
187:                 assertThat(type.getName(), is("NewEnum1"));
188:                 provider.removeEClassSelectionStrategyProvider(selectionStrategyProvider);
189:         }
190:
191:         //
192:         // Test framework
193:         //
194:
195:         /**
196:          * Create a mock EClass selection strategy (suitable for verification) that forces
197:          * selection of the given class.
198:          *
199:          * @param eClass the class to force
200:          * @return the mocl strategy
201:          */
202:         EClassSelectionStrategy forceEClass(EClass eClass) {
203:                 final EClassSelectionStrategy result = mock(EClassSelectionStrategy.class);
204:                 final Collection<EClass> eClasses = Collections.singleton(eClass);
205:                 when(result.collectEClasses(any(EObject.class), any(EReference.class),
206:                         anyCollectionOf(EClass.class))).thenReturn(eClasses);
207:
208:                 return result;
209:         }
210:
211:         public class TestEClassSelectionStrategyProvider implements EClassSelectionStrategy.Provider {
212:                 private final Double bid;
213:                 private final EClassSelectionStrategy strategy;
214:
215:                 TestEClassSelectionStrategyProvider(Double bid, EClassSelectionStrategy strategy) {
216:                         super();
217:
218:                         this.bid = bid;
219:                         this.strategy = strategy;
220:                 }
221:
222:                 @Bid
223:                 public Double bid() {
224:                         return bid;
225:                 }
226:
227:                 @Create
228:                 public EClassSelectionStrategy create() {
229:                         return strategy;
230:                 }
231:         }
232: }