Skip to content

Package: FeaturePathDomainModelReferenceConverter_Test

FeaturePathDomainModelReferenceConverter_Test

nameinstructionbranchcomplexitylinemethod
FeaturePathDomainModelReferenceConverter_Test()
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
convertToValueProperty_editingDomain()
M: 0 C: 61
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
convertToValueProperty_editingDomain_NoReferencePath()
M: 0 C: 37
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 13
100%
M: 0 C: 1
100%
createValidDMR()
M: 0 C: 31
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
createValidEObject()
M: 0 C: 14
100%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 0 C: 5
100%
M: 0 C: 1
100%
createValidEObject(EClass)
M: 0 C: 14
100%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 0 C: 5
100%
M: 0 C: 1
100%
createVirtualResource()
M: 0 C: 40
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
find(String)
M: 0 C: 14
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getEditingDomain(EObject)
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%
setUp()
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
setupClass()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
testConvertToListProperty()
M: 0 C: 56
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testConvertToListPropertyNoFeature()
M: 7 C: 15
68%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 5
71%
M: 0 C: 1
100%
testConvertToListPropertyNoReferencePath()
M: 0 C: 32
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
testConvertToListPropertyNull()
M: 7 C: 8
53%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 2
50%
M: 0 C: 1
100%
testConvertToListPropertyWrongReferenceType()
M: 9 C: 8
47%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 2
50%
M: 0 C: 1
100%
testConvertToValueProperty()
M: 0 C: 56
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testConvertToValuePropertyListReferenceFirstInPath()
M: 7 C: 39
85%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 11
85%
M: 0 C: 1
100%
testConvertToValuePropertyListReferenceInPath()
M: 7 C: 39
85%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 11
85%
M: 0 C: 1
100%
testConvertToValuePropertyNoFeature()
M: 7 C: 15
68%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 5
71%
M: 0 C: 1
100%
testConvertToValuePropertyNoReferencePath()
M: 0 C: 32
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
testConvertToValuePropertyNull()
M: 7 C: 8
53%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 2
50%
M: 0 C: 1
100%
testConvertToValuePropertyWrongReferenceType()
M: 7 C: 23
77%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 4
67%
M: 0 C: 1
100%
testGetSetting()
M: 0 C: 71
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 21
100%
M: 0 C: 1
100%
testGetSettingFeatureHasNoType()
M: 7 C: 67
91%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 18
90%
M: 0 C: 1
100%
testGetSettingInvalidFeatureInPath()
M: 7 C: 32
82%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 10
83%
M: 0 C: 1
100%
testGetSettingListReferenceInPath()
M: 7 C: 54
89%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 16
89%
M: 0 C: 1
100%
testGetSettingMissingObjectInPath()
M: 7 C: 54
89%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 16
89%
M: 0 C: 1
100%
testGetSettingNoFeature()
M: 7 C: 15
68%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 5
71%
M: 0 C: 1
100%
testGetSettingNoReferencePath()
M: 0 C: 29
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
testGetSettingNull()
M: 7 C: 8
53%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 2
50%
M: 0 C: 1
100%
testGetSettingObjectDoesNotHaveFeature()
M: 7 C: 21
75%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 6
75%
M: 0 C: 1
100%
testGetSettingUnresolvedFeature()
M: 7 C: 83
92%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 23
92%
M: 0 C: 1
100%
testGetSettingUnresolvedReferenceInPath()
M: 7 C: 83
92%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 23
92%
M: 0 C: 1
100%
testGetSettingWrongReferenceType()
M: 9 C: 8
47%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 2
50%
M: 0 C: 1
100%
testIsApplicable()
M: 0 C: 19
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
testIsApplicableNull()
M: 6 C: 8
57%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 2
50%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2019 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: * Lucas Koehler - initial API and implementation
13: * Christian W. Damus - bug 553224
14: ******************************************************************************/
15: package org.eclipse.emfforms.internal.core.services.databinding.featurepath;
16:
17: import static org.junit.Assert.assertEquals;
18: import static org.junit.Assert.assertTrue;
19: import static org.mockito.Mockito.mock;
20:
21: import java.util.LinkedList;
22: import java.util.regex.Pattern;
23:
24: import org.eclipse.core.databinding.property.list.IListProperty;
25: import org.eclipse.core.databinding.property.value.IValueProperty;
26: import org.eclipse.emf.common.command.BasicCommandStack;
27: import org.eclipse.emf.common.util.URI;
28: import org.eclipse.emf.databinding.IEMFListProperty;
29: import org.eclipse.emf.databinding.IEMFValueProperty;
30: import org.eclipse.emf.ecore.EClass;
31: import org.eclipse.emf.ecore.EObject;
32: import org.eclipse.emf.ecore.EPackage;
33: import org.eclipse.emf.ecore.EReference;
34: import org.eclipse.emf.ecore.EStructuralFeature;
35: import org.eclipse.emf.ecore.EStructuralFeature.Setting;
36: import org.eclipse.emf.ecore.EcoreFactory;
37: import org.eclipse.emf.ecore.resource.Resource;
38: import org.eclipse.emf.ecore.resource.ResourceSet;
39: import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
40: import org.eclipse.emf.ecore.util.EcoreUtil;
41: import org.eclipse.emf.ecore.xmi.XMLResource;
42: import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
43: import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
44: import org.eclipse.emf.ecp.view.spi.model.VControl;
45: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
46: import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
47: import org.eclipse.emf.ecp.view.spi.model.VView;
48: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
49: import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
50: import org.eclipse.emf.edit.domain.EditingDomain;
51: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
52: import org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter;
53: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.A;
54: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.B;
55: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.C;
56: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.D;
57: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.TestFactory;
58: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.TestPackage;
59: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
60: import org.eclipse.emfforms.spi.core.services.databinding.DomainModelReferenceConverter;
61: import org.hamcrest.CustomTypeSafeMatcher;
62: import org.hamcrest.Matcher;
63: import org.junit.Before;
64: import org.junit.BeforeClass;
65: import org.junit.Rule;
66: import org.junit.Test;
67: import org.junit.rules.ExpectedException;
68:
69: /**
70: * JUnit test for {@link FeaturePathDomainModelReferenceConverter}.
71: *
72: * @author Lucas Koehler
73: *
74: */
75: public class FeaturePathDomainModelReferenceConverter_Test {
76:
77:         private FeaturePathDomainModelReferenceConverter converter;
78:         private static EObject validEObject;
79:
80:         @Rule
81:         public final ExpectedException thrown = ExpectedException.none();
82:
83:         @BeforeClass
84:         public static void setupClass() {
85:                 validEObject = createValidEObject();
86:         }
87:
88:         private static EObject createValidEObject() {
89:                 final Resource resource = createVirtualResource();
90:                 final EObject domainObject = EcoreFactory.eINSTANCE.createEObject();
91:•                if (resource != null) {
92:                         resource.getContents().add(domainObject);
93:                 }
94:                 return domainObject;
95:         }
96:
97:         private static Resource createVirtualResource() {
98:                 final ResourceSet rs = new ResourceSetImpl();
99:                 rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl()); //$NON-NLS-1$
100:                 final AdapterFactoryEditingDomain domain = new AdapterFactoryEditingDomain(
101:                         new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE),
102:                         new BasicCommandStack(), rs);
103:                 rs.eAdapters().add(new AdapterFactoryEditingDomain.EditingDomainProvider(domain));
104:                 final Resource resource = rs.createResource(URI.createURI("VIRTUAL_URI.xmi")); //$NON-NLS-1$
105:                 return resource;
106:         }
107:
108:         private static EObject createValidEObject(EClass eClass) {
109:                 final Resource resource = createVirtualResource();
110:                 final EObject domainObject = EcoreUtil.create(eClass);
111:•                if (resource != null) {
112:                         resource.getContents().add(domainObject);
113:                 }
114:                 return domainObject;
115:         }
116:
117:         private static EditingDomain getEditingDomain(EObject object) throws DatabindingFailedException {
118:                 return AdapterFactoryEditingDomain.getEditingDomainFor(object);
119:         }
120:
121:         private static VFeaturePathDomainModelReference createValidDMR() {
122:                 final Resource resource = createVirtualResource();
123:                 final VView view = VViewFactory.eINSTANCE.createView();
124:                 final VControl control = VViewFactory.eINSTANCE.createControl();
125:                 view.getChildren().add(control);
126:                 resource.getContents().add(view);
127:                 final VFeaturePathDomainModelReference result = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
128:                 control.setDomainModelReference(result);
129:                 ((XMLResource) resource).setID(result, "theDMR"); //$NON-NLS-1$
130:                 return result;
131:         }
132:
133:         static Matcher<String> find(String regex) {
134:                 return new CustomTypeSafeMatcher<String>("matches '" + regex + "'") { //$NON-NLS-1$//$NON-NLS-2$
135:                         @Override
136:                         protected boolean matchesSafely(String item) {
137:                                 final java.util.regex.Matcher m = Pattern.compile(regex).matcher(item);
138:                                 return m.find();
139:                         }
140:                 };
141:         }
142:
143:         /**
144:          * Set up that is executed before every test.
145:          */
146:         @Before
147:         public void setUp() {
148:                 converter = new FeaturePathDomainModelReferenceConverter();
149:
150:         }
151:
152:         /**
153:          * Test method for
154:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#isApplicable(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference)}
155:          * .
156:          */
157:         @Test
158:         public void testIsApplicable() {
159:                 // The FeaturePathDomainModelReferenceConverter is the standard converter for VFeaturePathDomainModelReference
160:                 // with a low priority.
161:                 assertEquals(0.0, converter.isApplicable(mock(VFeaturePathDomainModelReference.class)), 0d);
162:
163:                 // The FeaturePathDomainModelReferenceConverter is not applicable other references than
164:                 // VFeaturePathDomainModelReferences
165:                 assertEquals(DomainModelReferenceConverter.NOT_APPLICABLE,
166:                         converter.isApplicable(mock(VDomainModelReference.class)), 0d);
167:         }
168:
169:         /**
170:          * Test method for
171:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#isApplicable(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference)}
172:          * .
173:          */
174:         @Test
175:         public void testIsApplicableNull() {
176:                 thrown.expect(IllegalArgumentException.class);
177:                 thrown.expectMessage("must not be null"); //$NON-NLS-1$
178:
179:                 converter.isApplicable(null);
180:         }
181:
182:         /**
183:          * Test method for
184:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToValueProperty(VDomainModelReference,EObject)}
185:          * .
186:          *
187:          * @throws DatabindingFailedException if the databinding failed
188:          */
189:         @Test
190:         public void testConvertToValueProperty() throws DatabindingFailedException {
191:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
192:                         .createFeaturePathDomainModelReference();
193:                 // create reference path to the attribute
194:                 final LinkedList<EReference> referencePath = new LinkedList<EReference>();
195:                 referencePath.add(TestPackage.eINSTANCE.getA_B());
196:                 referencePath.add(TestPackage.eINSTANCE.getB_C());
197:                 referencePath.add(TestPackage.eINSTANCE.getC_D());
198:
199:                 final EStructuralFeature feature = TestPackage.eINSTANCE.getD_X();
200:
201:                 pathReference.getDomainModelEReferencePath().addAll(referencePath);
202:                 pathReference.setDomainModelEFeature(feature);
203:
204:                 final IValueProperty valueProperty = converter.convertToValueProperty(pathReference, validEObject);
205:
206:                 // The converter should return an IEMFValueProperty
207:                 assertTrue(valueProperty instanceof IEMFValueProperty);
208:
209:                 final IEMFValueProperty emfProperty = (IEMFValueProperty) valueProperty;
210:
211:                 // Check EStructuralFeature of the property.
212:                 assertEquals(feature, emfProperty.getStructuralFeature());
213:
214:                 // Check correct path.
215:                 final String expected = "A.b<B> => B.c<C> => C.d<D> => D.x<EString>"; //$NON-NLS-1$
216:                 assertEquals(expected, emfProperty.toString());
217:         }
218:
219:         /**
220:          * Test method for
221:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToValueProperty(VDomainModelReference,EObject)}
222:          * .
223:          *
224:          * @throws DatabindingFailedException if the databinding failed
225:          */
226:         @Test
227:         public void testConvertToValuePropertyNoReferencePath() throws DatabindingFailedException {
228:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
229:                         .createFeaturePathDomainModelReference();
230:
231:                 final EStructuralFeature feature = TestPackage.eINSTANCE.getD_X();
232:                 pathReference.setDomainModelEFeature(feature);
233:
234:                 final IValueProperty valueProperty = converter.convertToValueProperty(pathReference, validEObject);
235:
236:                 // The converter should return an IEMFValueProperty
237:                 assertTrue(valueProperty instanceof IEMFValueProperty);
238:
239:                 final IEMFValueProperty emfProperty = (IEMFValueProperty) valueProperty;
240:
241:                 // Check EStructuralFeature of the property.
242:                 assertEquals(feature, emfProperty.getStructuralFeature());
243:
244:                 // Check correct path.
245:                 final String expected = "D.x<EString>"; //$NON-NLS-1$
246:                 assertEquals(expected, emfProperty.toString());
247:         }
248:
249:         /**
250:          * Test method for
251:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToValueProperty(VDomainModelReference,EObject)}
252:          * .
253:          *
254:          * @throws DatabindingFailedException if the databinding failed
255:          */
256:         @Test
257:         public void testConvertToValuePropertyNoFeature() throws DatabindingFailedException {
258:                 thrown.expect(DatabindingFailedException.class);
259:                 thrown.expectMessage("field domainModelEFeature"); //$NON-NLS-1$
260:                 thrown.expectMessage("must not be null"); //$NON-NLS-1$
261:
262:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
263:                         .createFeaturePathDomainModelReference();
264:                 converter.convertToValueProperty(pathReference, validEObject);
265:         }
266:
267:         /**
268:          * Test method for
269:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToValueProperty(VDomainModelReference,EObject)}
270:          * .
271:          *
272:          * @throws DatabindingFailedException if the databinding failed
273:          */
274:         @Test
275:         public void testConvertToValuePropertyNull() throws DatabindingFailedException {
276:                 thrown.expect(IllegalArgumentException.class);
277:                 thrown.expectMessage("must not be null"); //$NON-NLS-1$
278:
279:                 converter.convertToValueProperty(null, validEObject);
280:         }
281:
282:         /**
283:          * Test method for
284:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToValueProperty(VDomainModelReference,EObject)}
285:          * .
286:          *
287:          * @throws DatabindingFailedException if the databinding failed
288:          */
289:         @Test
290:         public void testConvertToValuePropertyWrongReferenceType() throws DatabindingFailedException {
291:                 final VDomainModelReference dmr = mock(VDomainModelReference.class);
292:
293:                 thrown.expect(IllegalArgumentException.class);
294:                 thrown.expectMessage("DomainModelReference " + dmr.toString()); //$NON-NLS-1$
295:                 thrown.expectMessage("is not an instance of VFeaturePathDomainModelReference"); //$NON-NLS-1$
296:
297:                 converter.convertToValueProperty(dmr, validEObject);
298:         }
299:
300:         @Test
301:         public void testConvertToValuePropertyListReferenceFirstInPath() throws DatabindingFailedException {
302:                 thrown.expect(DatabindingFailedException.class);
303:                 thrown.expectMessage("not a single reference: A.bList (test)"); //$NON-NLS-1$
304:                 thrown.expectMessage("DMR is VFeaturePathDomainModelReferenceImpl@"); //$NON-NLS-1$
305:
306:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
307:                         .createFeaturePathDomainModelReference();
308:                 // create reference path to the attribute
309:                 final LinkedList<EReference> referencePath = new LinkedList<EReference>();
310:                 referencePath.add(TestPackage.Literals.A__BLIST);
311:                 referencePath.add(TestPackage.Literals.B__C);
312:                 referencePath.add(TestPackage.Literals.C__D);
313:
314:                 pathReference.getDomainModelEReferencePath().addAll(referencePath);
315:                 pathReference.setDomainModelEFeature(TestPackage.Literals.D__X);
316:
317:                 converter.convertToValueProperty(pathReference, validEObject);
318:         }
319:
320:         @Test
321:         public void testConvertToValuePropertyListReferenceInPath() throws DatabindingFailedException {
322:                 thrown.expect(DatabindingFailedException.class);
323:                 thrown.expectMessage("not a single reference: B.cList (test)"); //$NON-NLS-1$
324:                 thrown.expectMessage("DMR is VFeaturePathDomainModelReferenceImpl@"); //$NON-NLS-1$
325:
326:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
327:                         .createFeaturePathDomainModelReference();
328:                 // create reference path to the attribute
329:                 final LinkedList<EReference> referencePath = new LinkedList<EReference>();
330:                 referencePath.add(TestPackage.Literals.A__B);
331:                 referencePath.add(TestPackage.Literals.B__CLIST);
332:                 referencePath.add(TestPackage.Literals.C__D);
333:
334:                 pathReference.getDomainModelEReferencePath().addAll(referencePath);
335:                 pathReference.setDomainModelEFeature(TestPackage.Literals.D__X);
336:
337:                 converter.convertToValueProperty(pathReference, validEObject);
338:         }
339:
340:         @Test
341:         public void convertToValueProperty_editingDomain() throws DatabindingFailedException {
342:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
343:                         .createFeaturePathDomainModelReference();
344:                 // create reference path to the attribute
345:                 final LinkedList<EReference> referencePath = new LinkedList<EReference>();
346:                 referencePath.add(TestPackage.eINSTANCE.getA_B());
347:                 referencePath.add(TestPackage.eINSTANCE.getB_C());
348:                 referencePath.add(TestPackage.eINSTANCE.getC_D());
349:                 final EObject domain = createValidEObject(TestPackage.Literals.A);
350:
351:                 final EStructuralFeature feature = TestPackage.eINSTANCE.getD_X();
352:
353:                 pathReference.getDomainModelEReferencePath().addAll(referencePath);
354:                 pathReference.setDomainModelEFeature(feature);
355:
356:                 final IValueProperty valueProperty = converter.convertToValueProperty(pathReference, TestPackage.Literals.A,
357:                         getEditingDomain(domain));
358:
359:                 // The converter should return an IEMFValueProperty
360:                 assertTrue(valueProperty instanceof IEMFValueProperty);
361:
362:                 final IEMFValueProperty emfProperty = (IEMFValueProperty) valueProperty;
363:
364:                 // Check EStructuralFeature of the property.
365:                 assertEquals(feature, emfProperty.getStructuralFeature());
366:
367:                 // Check correct path.
368:                 final String expected = "A.b<B> => B.c<C> => C.d<D> => D.x<EString>"; //$NON-NLS-1$
369:                 assertEquals(expected, emfProperty.toString());
370:         }
371:
372:         @Test
373:         public void convertToValueProperty_editingDomain_NoReferencePath() throws DatabindingFailedException {
374:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
375:                         .createFeaturePathDomainModelReference();
376:
377:                 final EStructuralFeature feature = TestPackage.eINSTANCE.getD_X();
378:                 pathReference.setDomainModelEFeature(feature);
379:                 final EObject domain = createValidEObject(TestPackage.Literals.D);
380:
381:                 final IValueProperty valueProperty = converter.convertToValueProperty(pathReference, TestPackage.Literals.D,
382:                         getEditingDomain(domain));
383:
384:                 // The converter should return an IEMFValueProperty
385:                 assertTrue(valueProperty instanceof IEMFValueProperty);
386:
387:                 final IEMFValueProperty emfProperty = (IEMFValueProperty) valueProperty;
388:
389:                 // Check EStructuralFeature of the property.
390:                 assertEquals(feature, emfProperty.getStructuralFeature());
391:
392:                 // Check correct path.
393:                 final String expected = "D.x<EString>"; //$NON-NLS-1$
394:                 assertEquals(expected, emfProperty.toString());
395:         }
396:
397:         /**
398:          * Test method for
399:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToListProperty(VDomainModelReference,EObject)}
400:          * .
401:          *
402:          * @throws DatabindingFailedException if the databinding failed
403:          */
404:         @Test
405:         public void testConvertToListProperty() throws DatabindingFailedException {
406:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
407:                         .createFeaturePathDomainModelReference();
408:                 // create reference path to the list
409:                 final LinkedList<EReference> referencePath = new LinkedList<EReference>();
410:                 referencePath.add(TestPackage.eINSTANCE.getA_B());
411:                 referencePath.add(TestPackage.eINSTANCE.getB_C());
412:                 referencePath.add(TestPackage.eINSTANCE.getC_D());
413:
414:                 final EStructuralFeature feature = TestPackage.eINSTANCE.getD_YList();
415:
416:                 pathReference.getDomainModelEReferencePath().addAll(referencePath);
417:                 pathReference.setDomainModelEFeature(feature);
418:
419:                 final IListProperty listProperty = converter.convertToListProperty(pathReference, validEObject);
420:
421:                 // The converter should return an IEMFListProperty
422:                 assertTrue(listProperty instanceof IEMFListProperty);
423:
424:                 final IEMFListProperty emfProperty = (IEMFListProperty) listProperty;
425:
426:                 // Check EStructuralFeature of the property.
427:                 assertEquals(feature, emfProperty.getStructuralFeature());
428:
429:                 // Check correct path.
430:                 final String expected = "A.b<B> => B.c<C> => C.d<D> => D.yList[]<EInt>"; //$NON-NLS-1$
431:                 assertEquals(expected, emfProperty.toString());
432:         }
433:
434:         /**
435:          * Test method for
436:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToListProperty(VDomainModelReference,EObject)}
437:          * .
438:          *
439:          * @throws DatabindingFailedException if the databinding failed
440:          */
441:         @Test
442:         public void testConvertToListPropertyNoFeature() throws DatabindingFailedException {
443:                 thrown.expect(DatabindingFailedException.class);
444:                 thrown.expectMessage("field domainModelEFeature"); //$NON-NLS-1$
445:                 thrown.expectMessage("must not be null"); //$NON-NLS-1$
446:
447:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
448:                         .createFeaturePathDomainModelReference();
449:                 converter.convertToListProperty(pathReference, validEObject);
450:         }
451:
452:         /**
453:          * Test method for
454:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToListProperty(VDomainModelReference,EObject)}
455:          * .
456:          *
457:          * @throws DatabindingFailedException if the databinding failed
458:          */
459:         @Test
460:         public void testConvertToListPropertyNoReferencePath() throws DatabindingFailedException {
461:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
462:                         .createFeaturePathDomainModelReference();
463:
464:                 final EStructuralFeature feature = TestPackage.eINSTANCE.getD_YList();
465:                 pathReference.setDomainModelEFeature(feature);
466:
467:                 final IListProperty listProperty = converter.convertToListProperty(pathReference, validEObject);
468:
469:                 // The converter should return an IEMFListProperty
470:                 assertTrue(listProperty instanceof IEMFListProperty);
471:
472:                 final IEMFListProperty emfProperty = (IEMFListProperty) listProperty;
473:
474:                 // Check EStructuralFeature of the property.
475:                 assertEquals(feature, emfProperty.getStructuralFeature());
476:
477:                 // Check correct path.
478:                 final String expected = "D.yList[]<EInt>"; //$NON-NLS-1$
479:                 assertEquals(expected, emfProperty.toString());
480:         }
481:
482:         /**
483:          * Test method for
484:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToListProperty(VDomainModelReference,EObject)}
485:          * .
486:          *
487:          * @throws DatabindingFailedException if the databinding failed
488:          */
489:         @Test
490:         public void testConvertToListPropertyNull() throws DatabindingFailedException {
491:                 thrown.expect(IllegalArgumentException.class);
492:                 thrown.expectMessage("must not be null"); //$NON-NLS-1$
493:
494:                 converter.convertToListProperty(null, validEObject);
495:         }
496:
497:         /**
498:          * Test method for
499:          * {@link org.eclipse.emfforms.core.services.databinding.featurepath.FeaturePathDomainModelReferenceConverter#convertToListProperty(VDomainModelReference,EObject)}
500:          * .
501:          *
502:          * @throws DatabindingFailedException if the databinding failed
503:          */
504:         @Test
505:         public void testConvertToListPropertyWrongReferenceType() throws DatabindingFailedException {
506:                 thrown.expect(IllegalArgumentException.class);
507:                 thrown.expectMessage("not an instance of VFeaturePathDomainModelReference"); //$NON-NLS-1$
508:
509:                 converter.convertToListProperty(mock(VDomainModelReference.class), validEObject);
510:         }
511:
512:         @Test
513:         public void testGetSetting() throws DatabindingFailedException {
514:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
515:                         .createFeaturePathDomainModelReference();
516:                 // create reference path to the attribute
517:                 final LinkedList<EReference> referencePath = new LinkedList<EReference>();
518:                 referencePath.add(TestPackage.eINSTANCE.getA_B());
519:                 referencePath.add(TestPackage.eINSTANCE.getB_C());
520:                 referencePath.add(TestPackage.eINSTANCE.getC_D());
521:
522:                 final EStructuralFeature feature = TestPackage.eINSTANCE.getD_X();
523:
524:                 pathReference.getDomainModelEReferencePath().addAll(referencePath);
525:                 pathReference.setDomainModelEFeature(feature);
526:
527:                 final A a = TestFactory.eINSTANCE.createA();
528:                 final B b = TestFactory.eINSTANCE.createB();
529:                 final C c = TestFactory.eINSTANCE.createC();
530:                 final D d = TestFactory.eINSTANCE.createD();
531:
532:                 final String expected = "My Value"; //$NON-NLS-1$
533:
534:                 a.setB(b);
535:                 b.setC(c);
536:                 c.setD(d);
537:                 d.setX(expected);
538:
539:                 final Setting setting = converter.getSetting(pathReference, a);
540:
541:                 // Check value.
542:                 assertEquals(expected, setting.get(true));
543:         }
544:
545:         @Test
546:         public void testGetSettingNoReferencePath() throws DatabindingFailedException {
547:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
548:                         .createFeaturePathDomainModelReference();
549:
550:                 final EStructuralFeature feature = TestPackage.eINSTANCE.getD_X();
551:                 pathReference.setDomainModelEFeature(feature);
552:
553:                 final D d = TestFactory.eINSTANCE.createD();
554:                 final String expected = "My Value"; //$NON-NLS-1$
555:                 d.setX(expected);
556:
557:                 final Setting setting = converter.getSetting(pathReference, d);
558:
559:                 // Check value.
560:                 assertEquals(expected, setting.get(true));
561:         }
562:
563:         @Test
564:         public void testGetSettingNoFeature() throws DatabindingFailedException {
565:                 thrown.expect(DatabindingFailedException.class);
566:                 thrown.expectMessage("field domainModelEFeature"); //$NON-NLS-1$
567:                 thrown.expectMessage("must not be null"); //$NON-NLS-1$
568:
569:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
570:                         .createFeaturePathDomainModelReference();
571:                 converter.getSetting(pathReference, validEObject);
572:         }
573:
574:         @Test
575:         public void testGetSettingNull() throws DatabindingFailedException {
576:                 thrown.expect(IllegalArgumentException.class);
577:                 thrown.expectMessage("must not be null"); //$NON-NLS-1$
578:
579:                 converter.getSetting(null, validEObject);
580:         }
581:
582:         @Test
583:         public void testGetSettingWrongReferenceType() throws DatabindingFailedException {
584:                 thrown.expect(IllegalArgumentException.class);
585:                 thrown.expectMessage("not an instance of VFeaturePathDomainModelReference"); //$NON-NLS-1$
586:
587:                 converter.getSetting(mock(VDomainModelReference.class), validEObject);
588:         }
589:
590:         @Test
591:         public void testGetSettingInvalidFeatureInPath() throws DatabindingFailedException {
592:                 thrown.expect(DatabindingFailedException.class);
593:                 thrown.expectMessage("EClass D (test) has no such feature DExtended.a (test)"); //$NON-NLS-1$
594:                 thrown.expectMessage(find(
595:                         "The DMR is VFeaturePathDomainModelReferenceImpl@\\p{XDigit}+ \\(changeListener: null\\)<VIRTUAL_URI\\.xmi#theDMR>")); //$NON-NLS-1$
596:                 thrown.expectMessage(
597:                         find("resolved EObject is DImpl@\\p{XDigit}+ \\(x: null, yList: null\\)<VIRTUAL_URI\\.xmi#/>")); //$NON-NLS-1$
598:
599:                 final D d = (D) createValidEObject(TestPackage.Literals.D);
600:                 final VFeaturePathDomainModelReference reference = createValidDMR();
601:                 reference.getDomainModelEReferencePath().add(TestPackage.Literals.DEXTENDED__A);
602:                 reference.setDomainModelEFeature(TestPackage.Literals.A__B);
603:                 converter.getSetting(reference, d);
604:         }
605:
606:         @Test
607:         public void testGetSettingUnresolvedFeature() throws DatabindingFailedException {
608:                 final EPackage pkg = EcoreFactory.eINSTANCE.createEPackage();
609:                 pkg.setName("gone"); //$NON-NLS-1$
610:                 pkg.setNsPrefix("gone"); //$NON-NLS-1$
611:                 pkg.setNsURI("http://www.eclipse.org/ecp/test/gone"); //$NON-NLS-1$
612:                 final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
613:                 eClass.setName("Gone"); //$NON-NLS-1$
614:                 final EReference ref = EcoreFactory.eINSTANCE.createEReference();
615:                 ref.setName("ref"); //$NON-NLS-1$
616:                 ref.setEType(eClass);
617:                 eClass.getEStructuralFeatures().add(ref);
618:                 pkg.getEClassifiers().add(eClass);
619:                 final Resource resource = new EcoreResourceFactoryImpl().createResource(URI.createURI(pkg.getNsURI()));
620:                 resource.getContents().add(pkg);
621:
622:                 thrown.expect(DatabindingFailedException.class);
623:                 thrown.expectMessage("domainModelEFeature Gone.ref (http://www.eclipse.org/ecp/test/gone)"); //$NON-NLS-1$
624:                 thrown.expectMessage(find(
625:                         "DMR VFeaturePathDomainModelReferenceImpl@\\p{XDigit}+ \\(changeListener: null\\)<VIRTUAL_URI\\.xmi#theDMR>")); //$NON-NLS-1$
626:                 thrown.expectMessage("is a proxy"); //$NON-NLS-1$
627:
628:                 final D d = (D) createValidEObject(TestPackage.Literals.D);
629:                 final VFeaturePathDomainModelReference reference = createValidDMR();
630:                 reference.getDomainModelEReferencePath().add(TestPackage.Literals.DEXTENDED__A);
631:                 reference.setDomainModelEFeature(ref);
632:
633:                 // Unload the package to proxify everything
634:                 resource.unload();
635:
636:                 converter.getSetting(reference, d);
637:         }
638:
639:         @Test
640:         public void testGetSettingUnresolvedReferenceInPath() throws DatabindingFailedException {
641:                 final EPackage pkg = EcoreFactory.eINSTANCE.createEPackage();
642:                 pkg.setName("gone"); //$NON-NLS-1$
643:                 pkg.setNsPrefix("gone"); //$NON-NLS-1$
644:                 pkg.setNsURI("http://www.eclipse.org/ecp/test/gone"); //$NON-NLS-1$
645:                 final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
646:                 eClass.setName("Gone"); //$NON-NLS-1$
647:                 final EReference ref = EcoreFactory.eINSTANCE.createEReference();
648:                 ref.setName("ref"); //$NON-NLS-1$
649:                 ref.setEType(eClass);
650:                 eClass.getEStructuralFeatures().add(ref);
651:                 pkg.getEClassifiers().add(eClass);
652:                 final Resource resource = new EcoreResourceFactoryImpl().createResource(URI.createURI(pkg.getNsURI()));
653:                 resource.getContents().add(pkg);
654:
655:                 thrown.expect(DatabindingFailedException.class);
656:                 thrown.expectMessage("path reference Gone.ref (http://www.eclipse.org/ecp/test/gone)"); //$NON-NLS-1$
657:                 thrown.expectMessage(find(
658:                         "DMR VFeaturePathDomainModelReferenceImpl@\\p{XDigit}+ \\(changeListener: null\\)<VIRTUAL_URI\\.xmi#theDMR>")); //$NON-NLS-1$
659:                 thrown.expectMessage("is a proxy"); //$NON-NLS-1$
660:
661:                 final D d = (D) createValidEObject(TestPackage.Literals.D);
662:                 final VFeaturePathDomainModelReference reference = createValidDMR();
663:                 reference.getDomainModelEReferencePath().add(ref);
664:                 reference.setDomainModelEFeature(TestPackage.Literals.A__B);
665:
666:                 // Unload the package to proxify everything
667:                 resource.unload();
668:
669:                 converter.getSetting(reference, d);
670:         }
671:
672:         @Test
673:         public void testGetSettingListReferenceInPath() throws DatabindingFailedException {
674:                 thrown.expect(DatabindingFailedException.class);
675:                 thrown.expectMessage("not a single reference: B.cList (test)"); //$NON-NLS-1$
676:                 thrown.expectMessage("DMR is VFeaturePathDomainModelReferenceImpl@"); //$NON-NLS-1$
677:                 thrown.expectMessage(
678:                         find("resolved EObject is BImpl@\\p{XDigit}+<VIRTUAL_URI\\.xmi#//@b>")); //$NON-NLS-1$
679:
680:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
681:                         .createFeaturePathDomainModelReference();
682:                 // create reference path to the attribute
683:                 final LinkedList<EReference> referencePath = new LinkedList<EReference>();
684:                 referencePath.add(TestPackage.Literals.A__B);
685:                 referencePath.add(TestPackage.Literals.B__CLIST);
686:                 referencePath.add(TestPackage.Literals.C__D);
687:
688:                 pathReference.getDomainModelEReferencePath().addAll(referencePath);
689:                 pathReference.setDomainModelEFeature(TestPackage.Literals.D__X);
690:
691:                 final A a = (A) createValidEObject(TestPackage.Literals.A);
692:                 final B b = TestFactory.eINSTANCE.createB();
693:                 a.setB(b);
694:                 converter.getSetting(pathReference, a);
695:         }
696:
697:         @Test
698:         public void testGetSettingMissingObjectInPath() throws DatabindingFailedException {
699:                 thrown.expect(DatabindingFailedException.class);
700:                 thrown.expectMessage("DMR is VFeaturePathDomainModelReferenceImpl@"); //$NON-NLS-1$
701:                 thrown.expectMessage(
702:                         find("resolved EObject is BImpl@\\p{XDigit}+<VIRTUAL_URI\\.xmi#//@b>")); //$NON-NLS-1$
703:                 thrown.expectMessage("Reference being resolved is B.c (test)"); //$NON-NLS-1$
704:
705:                 final VFeaturePathDomainModelReference pathReference = VViewFactory.eINSTANCE
706:                         .createFeaturePathDomainModelReference();
707:                 // create reference path to the attribute
708:                 final LinkedList<EReference> referencePath = new LinkedList<EReference>();
709:                 referencePath.add(TestPackage.Literals.A__B);
710:                 referencePath.add(TestPackage.Literals.B__C);
711:                 referencePath.add(TestPackage.Literals.C__D);
712:
713:                 pathReference.getDomainModelEReferencePath().addAll(referencePath);
714:                 pathReference.setDomainModelEFeature(TestPackage.Literals.D__X);
715:
716:                 final A a = (A) createValidEObject(TestPackage.Literals.A);
717:                 final B b = TestFactory.eINSTANCE.createB();
718:                 a.setB(b);
719:                 converter.getSetting(pathReference, a);
720:         }
721:
722:         @Test
723:         public void testGetSettingFeatureHasNoType() throws DatabindingFailedException {
724:                 final EPackage pkg = EcoreFactory.eINSTANCE.createEPackage();
725:                 pkg.setName("untyped"); //$NON-NLS-1$
726:                 pkg.setNsPrefix("ut"); //$NON-NLS-1$
727:                 pkg.setNsURI("http://www.eclipse.org/ecp/test/untyped"); //$NON-NLS-1$
728:                 final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
729:                 eClass.setName("Untyped"); //$NON-NLS-1$
730:                 final EReference ref = EcoreFactory.eINSTANCE.createEReference();
731:                 ref.setName("untyped"); //$NON-NLS-1$
732:                 // Don't set a type (that's the point)
733:                 eClass.getEStructuralFeatures().add(ref);
734:                 pkg.getEClassifiers().add(eClass);
735:                 final Resource resource = new EcoreResourceFactoryImpl().createResource(URI.createURI(pkg.getNsURI()));
736:                 resource.getContents().add(pkg);
737:
738:                 thrown.expect(DatabindingFailedException.class);
739:                 thrown.expectMessage("in DMR VFeaturePathDomainModelReferenceImpl@"); //$NON-NLS-1$
740:                 thrown.expectMessage("eType of the feature Untyped.untyped (http://www.eclipse.org/ecp/test/untyped) is null"); //$NON-NLS-1$
741:
742:                 final VFeaturePathDomainModelReference dmr = createValidDMR();
743:                 dmr.setDomainModelEFeature(ref);
744:
745:                 final EObject untyped = createValidEObject(eClass);
746:                 converter.getSetting(dmr, untyped);
747:         }
748:
749:         @Test
750:         public void testGetSettingObjectDoesNotHaveFeature() throws DatabindingFailedException {
751:                 thrown.expect(DatabindingFailedException.class);
752:                 thrown.expectMessage(find("resolved EObject BImpl@\\p{XDigit}+<VIRTUAL_URI.xmi#/>")); //$NON-NLS-1$
753:                 thrown.expectMessage("doesn't have the feature C.d (test)"); //$NON-NLS-1$
754:
755:                 final VFeaturePathDomainModelReference dmr = createValidDMR();
756:                 dmr.setDomainModelEFeature(TestPackage.Literals.C__D);
757:
758:                 final EObject b = createValidEObject(TestPackage.Literals.B);
759:                 converter.getSetting(dmr, b);
760:         }
761:
762: }