Skip to content

Package: EMFFormsDatabindingImpl_Test

EMFFormsDatabindingImpl_Test

nameinstructionbranchcomplexitylinemethod
EMFFormsDatabindingImpl_Test()
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: 11
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
settings_testGetListPropertyAllConsidered()
M: 0 C: 106
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 20
100%
M: 0 C: 1
100%
settings_testGetListPropertyNoApplicableConverter()
M: 9 C: 11
55%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 4
67%
M: 0 C: 1
100%
settings_testGetListPropertyOneApplicable()
M: 0 C: 103
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 20
100%
M: 0 C: 1
100%
settings_testGetListPropertyTwoApplicable()
M: 0 C: 103
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 20
100%
M: 0 C: 1
100%
settings_testGetObservableList()
M: 0 C: 103
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 21
100%
M: 0 C: 1
100%
settings_testGetObservableValue()
M: 0 C: 108
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 22
100%
M: 0 C: 1
100%
settings_testGetSettingNoApplicableConverter()
M: 9 C: 11
55%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 4
67%
M: 0 C: 1
100%
settings_testGetSettingPropertyAllConsidered()
M: 0 C: 89
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
settings_testGetSettingPropertyNull()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
settings_testGetSettingPropertyOneApplicable()
M: 0 C: 87
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
settings_testGetSettingPropertyTwoApplicable()
M: 0 C: 87
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
settings_testGetValuePropertyAllConsidered()
M: 0 C: 105
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 20
100%
M: 0 C: 1
100%
settings_testGetValuePropertyNoApplicableConverter()
M: 8 C: 11
58%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 4
67%
M: 0 C: 1
100%
settings_testGetValuePropertyOneApplicable()
M: 0 C: 102
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 21
100%
M: 0 C: 1
100%
settings_testGetValuePropertyTwoApplicable()
M: 0 C: 102
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 21
100%
M: 0 C: 1
100%
settings_testGetValueProperty_eClass()
M: 0 C: 137
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 29
100%
M: 0 C: 1
100%
settings_testGetValueProperty_eClass_editingDomain()
M: 0 C: 158
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 32
100%
M: 0 C: 1
100%
settings_testGetValueProperty_multipleSegments()
M: 0 C: 138
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 29
100%
M: 0 C: 1
100%
settings_testRemoveDomainModelReferenceSegmentConverter()
M: 8 C: 32
80%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 8
80%
M: 0 C: 1
100%
tearDown()
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
testGetListPropertyAllConsidered()
M: 0 C: 65
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
testGetListPropertyNoApplicableConverter()
M: 9 C: 14
61%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 3
60%
M: 0 C: 1
100%
testGetListPropertyNull()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetListPropertyOneApplicable()
M: 0 C: 90
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testGetListPropertyTwoApplicable()
M: 0 C: 90
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testGetObservableList()
M: 0 C: 89
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
testGetObservableListNullBoth()
M: 7 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetObservableListNullDomainModelReference()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetObservableListNullObject()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetObservableValue()
M: 0 C: 89
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
testGetObservableValueNullBoth()
M: 7 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetObservableValueNullDomainModelReference()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetObservableValueNullObject()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetSettingNoApplicableConverter()
M: 9 C: 30
77%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 6
75%
M: 0 C: 1
100%
testGetSettingPropertyAllConsidered()
M: 0 C: 65
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
testGetSettingPropertyNull()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetSettingPropertyOneApplicable()
M: 0 C: 90
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testGetSettingPropertyTwoApplicable()
M: 0 C: 90
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testGetValuePropertyAllConsidered()
M: 0 C: 65
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
testGetValuePropertyNoApplicableConverter()
M: 9 C: 30
77%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 6
75%
M: 0 C: 1
100%
testGetValuePropertyNull()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetValuePropertyOneApplicable()
M: 0 C: 90
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testGetValuePropertyTwoApplicable()
M: 0 C: 90
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testGetValueProperty_eClass_editingDomain()
M: 99 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 20 C: 0
0%
M: 1 C: 0
0%
testRemoveDomainModelReferenceConverter()
M: 9 C: 42
82%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 8
80%
M: 0 C: 1
100%
testResolveSegment()
M: 0 C: 104
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 21
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: * Lucas Koehler - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.core.services.databinding;
15:
16: import static org.junit.Assert.assertEquals;
17: import static org.mockito.Matchers.any;
18: import static org.mockito.Matchers.eq;
19: import static org.mockito.Matchers.same;
20: import static org.mockito.Mockito.mock;
21: import static org.mockito.Mockito.spy;
22: import static org.mockito.Mockito.verify;
23: import static org.mockito.Mockito.when;
24: import static org.mockito.Mockito.withSettings;
25:
26: import java.util.Optional;
27:
28: import org.eclipse.core.databinding.observable.list.IObservableList;
29: import org.eclipse.core.databinding.observable.value.IObservableValue;
30: import org.eclipse.core.databinding.property.list.IListProperty;
31: import org.eclipse.core.databinding.property.value.IValueProperty;
32: import org.eclipse.emf.common.util.BasicEList;
33: import org.eclipse.emf.common.util.EList;
34: import org.eclipse.emf.databinding.IEMFListProperty;
35: import org.eclipse.emf.databinding.IEMFValueProperty;
36: import org.eclipse.emf.databinding.internal.EMFListPropertyDecorator;
37: import org.eclipse.emf.databinding.internal.EMFValuePropertyDecorator;
38: import org.eclipse.emf.ecore.EClass;
39: import org.eclipse.emf.ecore.EObject;
40: import org.eclipse.emf.ecore.EStructuralFeature.Setting;
41: import org.eclipse.emf.ecore.EcoreFactory;
42: import org.eclipse.emf.ecp.test.common.DefaultRealm;
43: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
44: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReferenceSegment;
45: import org.eclipse.emf.ecp.view.spi.model.VFeatureDomainModelReferenceSegment;
46: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
47: import org.eclipse.emf.ecp.view.spi.model.VViewPackage;
48: import org.eclipse.emf.edit.domain.EditingDomain;
49: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.TestFactory;
50: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.TestPackage;
51: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
52: import org.eclipse.emfforms.spi.core.services.databinding.DomainModelReferenceConverter;
53: import org.eclipse.emfforms.spi.core.services.databinding.emf.DomainModelReferenceConverterEMF;
54: import org.eclipse.emfforms.spi.core.services.databinding.emf.DomainModelReferenceSegmentConverterEMF;
55: import org.eclipse.emfforms.spi.core.services.databinding.emf.SegmentConverterListResultEMF;
56: import org.eclipse.emfforms.spi.core.services.databinding.emf.SegmentConverterValueResultEMF;
57: import org.junit.After;
58: import org.junit.Before;
59: import org.junit.Test;
60:
61: /**
62: * This JUnit test tests the correct functionality of {@link EMFFormsDatabindingImpl}.
63: *
64: * @author Lucas Koehler
65: *
66: */
67: @SuppressWarnings({ "restriction", "rawtypes" })
68: public class EMFFormsDatabindingImpl_Test {
69:
70:         private EMFFormsDatabindingImpl databindingService;
71:         private DefaultRealm realm;
72:
73:         /**
74:          * Set up that is executed before every test.
75:          */
76:         @Before
77:         public void setUp() {
78:                 realm = new DefaultRealm();
79:                 databindingService = new EMFFormsDatabindingImpl();
80:         }
81:
82:         @After
83:         public void tearDown() {
84:                 realm.dispose();
85:         }
86:
87:         /**
88:          * Test method for
89:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableValue(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
90:          * .
91:          *
92:          * @throws DatabindingFailedException if the databinding failed
93:          */
94:         @Test
95:         public void testGetObservableValue() throws DatabindingFailedException {
96:                 databindingService = spy(new EMFFormsDatabindingImpl());
97:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
98:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
99:                 when(reference.getSegments()).thenReturn(segments);
100:                 final EObject eObject = mock(EObject.class);
101:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
102:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class);
103:                 final IObservableValue expectedObservableValue = mock(IObservableValue.class);
104:
105:                 when(converter1.isApplicable(reference)).thenReturn(0d);
106:                 when(converter1.convertToValueProperty(reference, eObject)).thenReturn(expectedResultProperty);
107:                 when(expectedResultProperty.observe(eObject)).thenReturn(expectedObservableValue);
108:
109:                 databindingService.addDomainModelReferenceConverter(converter1);
110:                 final IObservableValue resultObservableValue = databindingService.getObservableValue(reference, eObject);
111:
112:                 verify(databindingService).getValueProperty(reference, eObject);
113:                 verify(expectedResultProperty).observe(eObject);
114:                 assertEquals(expectedObservableValue, resultObservableValue);
115:         }
116:
117:         /**
118:          * Test method for
119:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableValue(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
120:          * .
121:          * <p>
122:          * Tests whether the method returns the correct result for both arguments being <strong>null</strong>.
123:          *
124:          * @throws DatabindingFailedException if the databinding failed
125:          */
126:         @Test(expected = IllegalArgumentException.class)
127:         public void testGetObservableValueNullBoth() throws DatabindingFailedException {
128:                 databindingService.getObservableValue(null, null);
129:         }
130:
131:         /**
132:          * Test method for
133:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableValue(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
134:          * .
135:          * <p>
136:          * Tests whether the method returns the correct result for the VDomainModelReference argument being
137:          * <strong>null</strong>.
138:          *
139:          * @throws DatabindingFailedException if the databinding failed
140:          */
141:         @Test(expected = IllegalArgumentException.class)
142:         public void testGetObservableValueNullDomainModelReference() throws DatabindingFailedException {
143:                 databindingService.getObservableValue(null, mock(EObject.class));
144:         }
145:
146:         /**
147:          * Test method for
148:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableValue(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
149:          * .
150:          * <p>
151:          * Tests whether the method returns the correct result for the EObject argument being <strong>null</strong>.
152:          *
153:          * @throws DatabindingFailedException if the databinding failed
154:          */
155:         @Test(expected = IllegalArgumentException.class)
156:         public void testGetObservableValueNullObject() throws DatabindingFailedException {
157:                 databindingService.getObservableValue(mock(VDomainModelReference.class), null);
158:         }
159:
160:         /**
161:          * Test method for
162:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
163:          * .
164:          *
165:          * @throws DatabindingFailedException if the databinding failed
166:          */
167:         @Test(expected = DatabindingFailedException.class)
168:         public void testGetValuePropertyNoApplicableConverter() throws DatabindingFailedException {
169:                 final VDomainModelReference modelReference = mock(VDomainModelReference.class);
170:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
171:                 when(modelReference.getSegments()).thenReturn(segments);
172:                 final EClass eClass = mock(EClass.class);
173:                 when(eClass.getName()).thenReturn("test"); //$NON-NLS-1$
174:                 when(modelReference.eClass()).thenReturn(eClass);
175:                 databindingService.getValueProperty(modelReference, mock(EObject.class));
176:         }
177:
178:         /**
179:          * Test method for
180:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
181:          * .
182:          * Tests whether the correct converter is used when one is applicable and one is not.
183:          *
184:          * @throws DatabindingFailedException if the databinding failed
185:          */
186:         @Test
187:         public void testGetValuePropertyOneApplicable() throws DatabindingFailedException {
188:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
189:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
190:                 when(reference.getSegments()).thenReturn(segments);
191:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
192:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
193:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class);
194:
195:                 when(converter1.isApplicable(reference)).thenReturn(0d);
196:                 when(converter1.convertToValueProperty(same(reference), any(EObject.class))).thenReturn(expectedResultProperty);
197:                 when(converter2.isApplicable(reference)).thenReturn(DomainModelReferenceConverter.NOT_APPLICABLE);
198:                 when(converter2.convertToValueProperty(same(reference), any(EObject.class))).thenReturn(
199:                         mock(IEMFValueProperty.class));
200:
201:                 databindingService.addDomainModelReferenceConverter(converter1);
202:                 databindingService.addDomainModelReferenceConverter(converter2);
203:                 final IValueProperty valueProperty = databindingService.getValueProperty(reference, mock(EObject.class));
204:                 assertEquals(expectedResultProperty, valueProperty);
205:         }
206:
207:         public void testGetValueProperty_eClass_editingDomain() throws DatabindingFailedException {
208:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
209:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
210:                 when(reference.getSegments()).thenReturn(segments);
211:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
212:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
213:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class);
214:                 final EditingDomain editingDomain = mock(EditingDomain.class);
215:                 final EClass rootEClass = mock(EClass.class);
216:
217:                 when(converter1.isApplicable(reference)).thenReturn(0d);
218:                 when(converter1.convertToValueProperty(reference, rootEClass, editingDomain))
219:                         .thenReturn(expectedResultProperty);
220:                 when(converter2.isApplicable(reference)).thenReturn(DomainModelReferenceConverter.NOT_APPLICABLE);
221:                 when(converter2.convertToValueProperty(reference, rootEClass, editingDomain)).thenReturn(
222:                         mock(IEMFValueProperty.class));
223:
224:                 databindingService.addDomainModelReferenceConverter(converter1);
225:                 databindingService.addDomainModelReferenceConverter(converter2);
226:                 final IValueProperty valueProperty = databindingService.getValueProperty(reference, rootEClass, editingDomain);
227:                 assertEquals(expectedResultProperty, valueProperty);
228:                 verify(converter1).convertToValueProperty(reference, rootEClass, editingDomain);
229:         }
230:
231:         /**
232:          * Test method for
233:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
234:          * .
235:          * Tests whether the correct converter is used when there are two applicable ones with different priorities.
236:          * Also tests whether the correct result is returned.
237:          *
238:          * @throws DatabindingFailedException if the databinding failed
239:          */
240:         @Test
241:         public void testGetValuePropertyTwoApplicable() throws DatabindingFailedException {
242:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
243:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
244:                 when(reference.getSegments()).thenReturn(segments);
245:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
246:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
247:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class);
248:
249:                 when(converter1.isApplicable(reference)).thenReturn(5d);
250:                 when(converter1.convertToValueProperty(same(reference), any(EObject.class))).thenReturn(expectedResultProperty);
251:                 when(converter2.isApplicable(reference)).thenReturn(1d);
252:                 when(converter2.convertToValueProperty(same(reference), any(EObject.class))).thenReturn(
253:                         mock(EMFValuePropertyDecorator.class));
254:
255:                 databindingService.addDomainModelReferenceConverter(converter1);
256:                 databindingService.addDomainModelReferenceConverter(converter2);
257:                 final IValueProperty valueProperty = databindingService.getValueProperty(reference, mock(EObject.class));
258:                 assertEquals(expectedResultProperty, valueProperty);
259:         }
260:
261:         /**
262:          * Test method for
263:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
264:          * .
265:          * Tests whether the {@link EMFFormsDatabindingImpl} considers all {@link DomainModelReferenceConverterEMF}s, that
266:          * are
267:          * registered to it, for its conversions.
268:          *
269:          * @throws DatabindingFailedException if the databinding failed
270:          */
271:         @Test
272:         public void testGetValuePropertyAllConsidered() throws DatabindingFailedException {
273:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
274:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
275:                 when(reference.getSegments()).thenReturn(segments);
276:
277:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
278:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
279:                 final DomainModelReferenceConverterEMF converter3 = mock(DomainModelReferenceConverterEMF.class);
280:
281:                 databindingService.addDomainModelReferenceConverter(converter1);
282:                 databindingService.addDomainModelReferenceConverter(converter2);
283:                 databindingService.addDomainModelReferenceConverter(converter3);
284:
285:                 databindingService.getValueProperty(reference, mock(EObject.class));
286:
287:                 verify(converter1).isApplicable(reference);
288:                 verify(converter2).isApplicable(reference);
289:                 verify(converter3).isApplicable(reference);
290:         }
291:
292:         /**
293:          * Test method for
294:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
295:          * .
296:          * <p>
297:          * Tests whether the method returns the correct result for a <strong>null</strong> argument.
298:          *
299:          * @throws DatabindingFailedException if the databinding failed
300:          */
301:         @Test(expected = IllegalArgumentException.class)
302:         public void testGetValuePropertyNull() throws DatabindingFailedException {
303:                 databindingService.getValueProperty(null, mock(EObject.class));
304:         }
305:
306:         /**
307:          * Test method for
308:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableList(VDomainModelReference, org.eclipse.emf.ecore.EObject)}
309:          * .
310:          *
311:          * @throws DatabindingFailedException if the databinding failed
312:          */
313:         @Test
314:         public void testGetObservableList() throws DatabindingFailedException {
315:                 databindingService = spy(new EMFFormsDatabindingImpl());
316:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
317:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
318:                 when(reference.getSegments()).thenReturn(segments);
319:
320:                 final EObject eObject = mock(EObject.class);
321:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
322:                 final IEMFListProperty expectedResultProperty = mock(IEMFListProperty.class);
323:                 final IObservableList expectedObservableList = mock(IObservableList.class);
324:
325:                 when(converter1.isApplicable(reference)).thenReturn(0d);
326:                 when(converter1.convertToListProperty(reference, eObject)).thenReturn(expectedResultProperty);
327:                 when(expectedResultProperty.observe(eObject)).thenReturn(expectedObservableList);
328:
329:                 databindingService.addDomainModelReferenceConverter(converter1);
330:                 final IObservableList resultObservableList = databindingService.getObservableList(reference, eObject);
331:
332:                 verify(databindingService).getListProperty(reference, eObject);
333:                 verify(expectedResultProperty).observe(eObject);
334:                 assertEquals(expectedObservableList, resultObservableList);
335:         }
336:
337:         /**
338:          * Test method for
339:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableList(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
340:          * .
341:          * <p>
342:          * Tests whether the method returns the correct result for both arguments being <strong>null</strong>.
343:          *
344:          * @throws DatabindingFailedException if the databinding failed
345:          */
346:         @Test(expected = IllegalArgumentException.class)
347:         public void testGetObservableListNullBoth() throws DatabindingFailedException {
348:                 databindingService.getObservableList(null, null);
349:         }
350:
351:         /**
352:          * Test method for
353:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableList(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
354:          * .
355:          * <p>
356:          * Tests whether the method returns the correct result for the VDomainModelReference argument being
357:          * <strong>null</strong>.
358:          *
359:          * @throws DatabindingFailedException if the databinding failed
360:          */
361:         @Test(expected = IllegalArgumentException.class)
362:         public void testGetObservableListNullDomainModelReference() throws DatabindingFailedException {
363:                 databindingService.getObservableList(null, mock(EObject.class));
364:         }
365:
366:         /**
367:          * Test method for
368:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableList(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
369:          * .
370:          * <p>
371:          * Tests whether the method returns the correct result for the EObject argument being <strong>null</strong>.
372:          *
373:          * @throws DatabindingFailedException if the databinding failed
374:          */
375:         @Test(expected = IllegalArgumentException.class)
376:         public void testGetObservableListNullObject() throws DatabindingFailedException {
377:                 databindingService.getObservableList(mock(VDomainModelReference.class), null);
378:         }
379:
380:         /**
381:          * Test method for
382:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getListProperty(VDomainModelReference,EObject)}
383:          * .
384:          *
385:          * @throws DatabindingFailedException if the databinding failed
386:          */
387:         @Test(expected = DatabindingFailedException.class)
388:         public void testGetListPropertyNoApplicableConverter() throws DatabindingFailedException {
389:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
390:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
391:                 when(reference.getSegments()).thenReturn(segments);
392:                 databindingService.getListProperty(reference, mock(EObject.class));
393:         }
394:
395:         /**
396:          * Test method for
397:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getListProperty(VDomainModelReference,EObject)}
398:          * .
399:          * Tests whether the correct converter is used when one is applicable and one is not.
400:          *
401:          * @throws DatabindingFailedException if the databinding failed
402:          */
403:         @Test
404:         public void testGetListPropertyOneApplicable() throws DatabindingFailedException {
405:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
406:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
407:                 when(reference.getSegments()).thenReturn(segments);
408:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
409:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
410:                 final IEMFListProperty expectedResultProperty = mock(IEMFListProperty.class);
411:
412:                 when(converter1.isApplicable(reference)).thenReturn(0d);
413:                 when(converter1.convertToListProperty(same(reference), any(EObject.class))).thenReturn(expectedResultProperty);
414:                 when(converter2.isApplicable(reference)).thenReturn(DomainModelReferenceConverter.NOT_APPLICABLE);
415:                 when(converter2.convertToListProperty(same(reference), any(EObject.class))).thenReturn(
416:                         mock(IEMFListProperty.class));
417:
418:                 databindingService.addDomainModelReferenceConverter(converter1);
419:                 databindingService.addDomainModelReferenceConverter(converter2);
420:                 final IListProperty listProperty = databindingService.getListProperty(reference, mock(EObject.class));
421:                 assertEquals(expectedResultProperty, listProperty);
422:         }
423:
424:         /**
425:          * Test method for
426:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getListProperty(VDomainModelReference,EObject)}
427:          * .
428:          * Tests whether the correct converter is used when there are two applicable ones with different priorities.
429:          * Also tests whether the correct result is returned.
430:          *
431:          * @throws DatabindingFailedException if the databinding failed
432:          */
433:         @Test
434:         public void testGetListPropertyTwoApplicable() throws DatabindingFailedException {
435:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
436:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
437:                 when(reference.getSegments()).thenReturn(segments);
438:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
439:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
440:                 final IEMFListProperty expectedResultProperty = mock(IEMFListProperty.class);
441:
442:                 when(converter1.isApplicable(reference)).thenReturn(5d);
443:                 when(converter1.convertToListProperty(same(reference), any(EObject.class))).thenReturn(expectedResultProperty);
444:                 when(converter2.isApplicable(reference)).thenReturn(1d);
445:                 when(converter2.convertToListProperty(same(reference), any(EObject.class))).thenReturn(
446:                         mock(EMFListPropertyDecorator.class));
447:
448:                 databindingService.addDomainModelReferenceConverter(converter1);
449:                 databindingService.addDomainModelReferenceConverter(converter2);
450:                 final IListProperty listProperty = databindingService.getListProperty(reference, mock(EObject.class));
451:                 assertEquals(expectedResultProperty, listProperty);
452:         }
453:
454:         /**
455:          * Test method for
456:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
457:          * .
458:          * Tests whether the {@link EMFFormsDatabindingImpl} considers all {@link DomainModelReferenceConverter}s, that are
459:          * registered to it, for its conversions.
460:          *
461:          * @throws DatabindingFailedException if the databinding failed
462:          */
463:         @Test
464:         public void testGetListPropertyAllConsidered() throws DatabindingFailedException {
465:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
466:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
467:                 when(reference.getSegments()).thenReturn(segments);
468:
469:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
470:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
471:                 final DomainModelReferenceConverterEMF converter3 = mock(DomainModelReferenceConverterEMF.class);
472:
473:                 databindingService.addDomainModelReferenceConverter(converter1);
474:                 databindingService.addDomainModelReferenceConverter(converter2);
475:                 databindingService.addDomainModelReferenceConverter(converter3);
476:
477:                 databindingService.getListProperty(reference, mock(EObject.class));
478:
479:                 verify(converter1).isApplicable(reference);
480:                 verify(converter2).isApplicable(reference);
481:                 verify(converter3).isApplicable(reference);
482:         }
483:
484:         /**
485:          * Test method for
486:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
487:          * .
488:          * <p>
489:          * Tests whether the method returns the correct result for a <strong>null</strong> argument.
490:          *
491:          * @throws DatabindingFailedException if the databinding failed
492:          */
493:         @Test(expected = IllegalArgumentException.class)
494:         public void testGetListPropertyNull() throws DatabindingFailedException {
495:                 databindingService.getListProperty(null, mock(EObject.class));
496:         }
497:
498:         /**
499:          * Test method for
500:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#removeDomainModelReferenceConverter(DomainModelReferenceConverterEMF)}
501:          * .
502:          *
503:          * @throws DatabindingFailedException if the databinding failed
504:          */
505:         @Test(expected = DatabindingFailedException.class)
506:         public void testRemoveDomainModelReferenceConverter() throws DatabindingFailedException {
507:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
508:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
509:                 when(reference.getSegments()).thenReturn(segments);
510:                 when(reference.eClass()).thenReturn(VViewPackage.eINSTANCE.getFeaturePathDomainModelReference());
511:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
512:
513:                 when(converter1.isApplicable(reference)).thenReturn(5d);
514:
515:                 databindingService.addDomainModelReferenceConverter(converter1);
516:                 databindingService.removeDomainModelReferenceConverter(converter1);
517:                 databindingService.getValueProperty(reference, mock(EObject.class));
518:         }
519:
520:         @Test(expected = DatabindingFailedException.class)
521:         public void testGetSettingNoApplicableConverter() throws DatabindingFailedException {
522:                 final VDomainModelReference modelReference = mock(VDomainModelReference.class);
523:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
524:                 when(modelReference.getSegments()).thenReturn(segments);
525:                 final EClass eClass = mock(EClass.class);
526:                 when(eClass.getName()).thenReturn("test"); //$NON-NLS-1$
527:                 when(modelReference.eClass()).thenReturn(eClass);
528:                 databindingService.getSetting(modelReference, mock(EObject.class));
529:         }
530:
531:         @Test
532:         public void testGetSettingPropertyOneApplicable() throws DatabindingFailedException {
533:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
534:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
535:                 when(reference.getSegments()).thenReturn(segments);
536:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
537:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
538:                 final Setting expectedSetting = mock(Setting.class);
539:
540:                 when(converter1.isApplicable(reference)).thenReturn(0d);
541:                 when(converter1.getSetting(same(reference), any(EObject.class))).thenReturn(expectedSetting);
542:                 when(converter2.isApplicable(reference)).thenReturn(DomainModelReferenceConverter.NOT_APPLICABLE);
543:                 when(converter2.convertToValueProperty(same(reference), any(EObject.class))).thenReturn(
544:                         mock(IEMFValueProperty.class));
545:
546:                 databindingService.addDomainModelReferenceConverter(converter1);
547:                 databindingService.addDomainModelReferenceConverter(converter2);
548:                 final Setting setting = databindingService.getSetting(reference, mock(EObject.class));
549:                 assertEquals(expectedSetting, setting);
550:         }
551:
552:         @Test
553:         public void testGetSettingPropertyTwoApplicable() throws DatabindingFailedException {
554:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
555:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
556:                 when(reference.getSegments()).thenReturn(segments);
557:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
558:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
559:                 final Setting expectedSetting = mock(Setting.class);
560:
561:                 when(converter1.isApplicable(reference)).thenReturn(5d);
562:                 when(converter1.getSetting(same(reference), any(EObject.class))).thenReturn(expectedSetting);
563:                 when(converter2.isApplicable(reference)).thenReturn(1d);
564:                 when(converter2.convertToValueProperty(same(reference), any(EObject.class))).thenReturn(
565:                         mock(EMFValuePropertyDecorator.class));
566:
567:                 databindingService.addDomainModelReferenceConverter(converter1);
568:                 databindingService.addDomainModelReferenceConverter(converter2);
569:                 final Setting setting = databindingService.getSetting(reference, mock(EObject.class));
570:                 assertEquals(expectedSetting, setting);
571:         }
572:
573:         @Test
574:         public void testGetSettingPropertyAllConsidered() throws DatabindingFailedException {
575:                 final VDomainModelReference reference = mock(VDomainModelReference.class);
576:                 final EList<VDomainModelReferenceSegment> segments = new BasicEList<>();
577:                 when(reference.getSegments()).thenReturn(segments);
578:
579:                 final DomainModelReferenceConverterEMF converter1 = mock(DomainModelReferenceConverterEMF.class);
580:                 final DomainModelReferenceConverterEMF converter2 = mock(DomainModelReferenceConverterEMF.class);
581:                 final DomainModelReferenceConverterEMF converter3 = mock(DomainModelReferenceConverterEMF.class);
582:
583:                 databindingService.addDomainModelReferenceConverter(converter1);
584:                 databindingService.addDomainModelReferenceConverter(converter2);
585:                 databindingService.addDomainModelReferenceConverter(converter3);
586:
587:                 databindingService.getSetting(reference, mock(EObject.class));
588:
589:                 verify(converter1).isApplicable(reference);
590:                 verify(converter2).isApplicable(reference);
591:                 verify(converter3).isApplicable(reference);
592:         }
593:
594:         @Test(expected = IllegalArgumentException.class)
595:         public void testGetSettingPropertyNull() throws DatabindingFailedException {
596:                 databindingService.getSetting(null, mock(EObject.class));
597:         }
598:
599:         /**
600:          * Test method for
601:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableValue(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
602:          * .
603:          *
604:          * @throws DatabindingFailedException if the databinding failed
605:          */
606:         @Test
607:         public void settings_testGetObservableValue() throws DatabindingFailedException {
608:                 databindingService = spy(new EMFFormsDatabindingImpl());
609:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
610:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
611:                         .createFeatureDomainModelReferenceSegment();
612:                 reference.getSegments().add(segment);
613:                 final EObject eObject = EcoreFactory.eINSTANCE.createEObject();
614:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
615:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class);
616:                 final SegmentConverterValueResultEMF converterResult = mock(SegmentConverterValueResultEMF.class);
617:                 when(converterResult.getValueProperty()).thenReturn(expectedResultProperty);
618:                 when(converterResult.getNextEClass()).thenReturn(Optional.empty());
619:                 final IObservableValue expectedObservableValue = mock(IObservableValue.class);
620:
621:                 when(converter1.isApplicable(segment)).thenReturn(0d);
622:                 when(converter1.convertToValueProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
623:                         .thenReturn(converterResult);
624:                 when(expectedResultProperty.observe(eObject)).thenReturn(expectedObservableValue);
625:
626:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
627:                 final IObservableValue resultObservableValue = databindingService.getObservableValue(reference, eObject);
628:
629:                 verify(databindingService).getValueProperty(reference, eObject);
630:                 verify(expectedResultProperty).observe(eObject);
631:                 assertEquals(expectedObservableValue, resultObservableValue);
632:         }
633:
634:         /**
635:          * Test method for
636:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
637:          * .
638:          *
639:          * @throws DatabindingFailedException if the databinding failed
640:          */
641:         @Test(expected = DatabindingFailedException.class)
642:         public void settings_testGetValuePropertyNoApplicableConverter() throws DatabindingFailedException {
643:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
644:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
645:                         .createFeatureDomainModelReferenceSegment();
646:                 reference.getSegments().add(segment);
647:                 databindingService.getValueProperty(reference, TestFactory.eINSTANCE.createA());
648:         }
649:
650:         /**
651:          * Test method for
652:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
653:          * .
654:          * Tests whether the correct converter is used when one is applicable and one is not.
655:          *
656:          * @throws DatabindingFailedException if the databinding failed
657:          */
658:         @Test
659:         public void settings_testGetValuePropertyOneApplicable() throws DatabindingFailedException {
660:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
661:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
662:                         .createFeatureDomainModelReferenceSegment();
663:                 reference.getSegments().add(segment);
664:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
665:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
666:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class);
667:                 final SegmentConverterValueResultEMF converterResult = mock(SegmentConverterValueResultEMF.class);
668:                 when(converterResult.getValueProperty()).thenReturn(expectedResultProperty);
669:
670:                 when(converter1.isApplicable(segment)).thenReturn(0d);
671:                 when(converter1.convertToValueProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
672:                         .thenReturn(converterResult);
673:                 when(converter2.isApplicable(segment)).thenReturn(DomainModelReferenceSegmentConverterEMF.NOT_APPLICABLE);
674:                 when(converter2.convertToValueProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
675:                         .thenReturn(mock(SegmentConverterValueResultEMF.class));
676:
677:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
678:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
679:                 final IValueProperty valueProperty = databindingService.getValueProperty(reference,
680:                         TestFactory.eINSTANCE.createA());
681:                 assertEquals(expectedResultProperty, valueProperty);
682:         }
683:
684:         @Test
685:         public void settings_testGetValueProperty_multipleSegments() throws DatabindingFailedException {
686:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
687:                 final VFeatureDomainModelReferenceSegment segment1 = VViewFactory.eINSTANCE
688:                         .createFeatureDomainModelReferenceSegment();
689:                 reference.getSegments().add(segment1);
690:                 final VFeatureDomainModelReferenceSegment segment2 = VViewFactory.eINSTANCE
691:                         .createFeatureDomainModelReferenceSegment();
692:                 reference.getSegments().add(segment2);
693:
694:                 final DomainModelReferenceSegmentConverterEMF converter = mock(DomainModelReferenceSegmentConverterEMF.class);
695:                 final IEMFValueProperty resultProperty1 = mock(IEMFValueProperty.class, withSettings().name("resultProperty1")); //$NON-NLS-1$
696:                 final IEMFValueProperty resultProperty2 = mock(IEMFValueProperty.class, withSettings().name("resultProperty2")); //$NON-NLS-1$
697:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class,
698:                         withSettings().name("expectedResultProperty")); //$NON-NLS-1$
699:                 when(resultProperty1.value(resultProperty2)).thenReturn(expectedResultProperty);
700:
701:                 final SegmentConverterValueResultEMF converterResult1 = mock(SegmentConverterValueResultEMF.class);
702:                 when(converterResult1.getValueProperty()).thenReturn(resultProperty1);
703:                 when(converterResult1.getNextEClass()).thenReturn(Optional.of(TestPackage.Literals.D));
704:
705:                 final SegmentConverterValueResultEMF converterResult2 = mock(SegmentConverterValueResultEMF.class);
706:                 when(converterResult2.getValueProperty()).thenReturn(resultProperty2);
707:                 when(converterResult2.getNextEClass()).thenReturn(Optional.empty());
708:
709:                 when(converter.isApplicable(segment1)).thenReturn(1d);
710:                 when(converter.convertToValueProperty(same(segment1), eq(TestPackage.Literals.C), any(EditingDomain.class)))
711:                         .thenReturn(converterResult1);
712:                 when(converter.convertToValueProperty(same(segment2), eq(TestPackage.Literals.D), any(EditingDomain.class)))
713:                         .thenReturn(converterResult2);
714:
715:                 databindingService.addDomainModelReferenceSegmentConverter(converter);
716:                 final IValueProperty valueProperty = databindingService.getValueProperty(reference,
717:                         TestFactory.eINSTANCE.createC());
718:                 assertEquals(expectedResultProperty, valueProperty);
719:         }
720:
721:         /**
722:          * Test method for
723:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
724:          * .
725:          * Tests whether the correct converter is used when there are two applicable ones with different priorities.
726:          * Also tests whether the correct result is returned.
727:          *
728:          * @throws DatabindingFailedException if the databinding failed
729:          */
730:         @Test
731:         public void settings_testGetValuePropertyTwoApplicable() throws DatabindingFailedException {
732:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
733:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
734:                         .createFeatureDomainModelReferenceSegment();
735:                 reference.getSegments().add(segment);
736:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
737:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
738:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class);
739:                 final SegmentConverterValueResultEMF converterResult = mock(SegmentConverterValueResultEMF.class);
740:                 when(converterResult.getValueProperty()).thenReturn(expectedResultProperty);
741:
742:                 when(converter1.isApplicable(segment)).thenReturn(5d);
743:                 when(converter1.convertToValueProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
744:                         .thenReturn(converterResult);
745:                 when(converter2.isApplicable(segment)).thenReturn(1d);
746:                 when(converter2.convertToValueProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
747:                         .thenReturn(mock(SegmentConverterValueResultEMF.class));
748:
749:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
750:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
751:                 final IValueProperty valueProperty = databindingService.getValueProperty(reference,
752:                         TestFactory.eINSTANCE.createA());
753:                 assertEquals(expectedResultProperty, valueProperty);
754:         }
755:
756:         /**
757:          * Test method for
758:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
759:          * .
760:          * Tests whether the {@link EMFFormsDatabindingImpl} considers all {@link DomainModelReferenceSegmentConverterEMF}s,
761:          * that
762:          * are
763:          * registered to it, for its conversions.
764:          *
765:          * @throws DatabindingFailedException if the databinding failed
766:          */
767:         @Test
768:         public void settings_testGetValuePropertyAllConsidered() throws DatabindingFailedException {
769:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
770:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
771:                         .createFeatureDomainModelReferenceSegment();
772:                 reference.getSegments().add(segment);
773:
774:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
775:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
776:                 final DomainModelReferenceSegmentConverterEMF converter3 = mock(DomainModelReferenceSegmentConverterEMF.class);
777:
778:                 when(converter1.isApplicable(segment)).thenReturn(1d);
779:                 when(converter2.isApplicable(segment)).thenReturn(3d);
780:                 when(converter3.isApplicable(segment)).thenReturn(2d);
781:
782:                 when(converter2.convertToValueProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
783:                         .thenReturn(mock(SegmentConverterValueResultEMF.class));
784:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
785:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
786:                 databindingService.addDomainModelReferenceSegmentConverter(converter3);
787:
788:                 databindingService.getValueProperty(reference, TestFactory.eINSTANCE.createA());
789:
790:                 verify(converter1).isApplicable(segment);
791:                 verify(converter2).isApplicable(segment);
792:                 verify(converter3).isApplicable(segment);
793:         }
794:
795:         @Test
796:         public void settings_testGetValueProperty_eClass() throws DatabindingFailedException {
797:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
798:                 final VFeatureDomainModelReferenceSegment segment1 = VViewFactory.eINSTANCE
799:                         .createFeatureDomainModelReferenceSegment();
800:                 reference.getSegments().add(segment1);
801:                 final VFeatureDomainModelReferenceSegment segment2 = VViewFactory.eINSTANCE
802:                         .createFeatureDomainModelReferenceSegment();
803:                 reference.getSegments().add(segment2);
804:
805:                 final DomainModelReferenceSegmentConverterEMF converter = mock(DomainModelReferenceSegmentConverterEMF.class);
806:                 final IEMFValueProperty resultProperty1 = mock(IEMFValueProperty.class, withSettings().name("resultProperty1")); //$NON-NLS-1$
807:                 final IEMFValueProperty resultProperty2 = mock(IEMFValueProperty.class, withSettings().name("resultProperty2")); //$NON-NLS-1$
808:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class,
809:                         withSettings().name("expectedResultProperty")); //$NON-NLS-1$
810:                 when(resultProperty1.value(resultProperty2)).thenReturn(expectedResultProperty);
811:
812:                 final SegmentConverterValueResultEMF converterResult1 = mock(SegmentConverterValueResultEMF.class);
813:                 when(converterResult1.getValueProperty()).thenReturn(resultProperty1);
814:                 when(converterResult1.getNextEClass()).thenReturn(Optional.of(TestPackage.Literals.D));
815:
816:                 final SegmentConverterValueResultEMF converterResult2 = mock(SegmentConverterValueResultEMF.class);
817:                 when(converterResult2.getValueProperty()).thenReturn(resultProperty2);
818:                 when(converterResult2.getNextEClass()).thenReturn(Optional.empty());
819:
820:                 when(converter.isApplicable(segment1)).thenReturn(1d);
821:                 when(converter.convertToValueProperty(same(segment1), eq(TestPackage.Literals.C), any(EditingDomain.class)))
822:                         .thenReturn(converterResult1);
823:                 when(converter.convertToValueProperty(same(segment2), eq(TestPackage.Literals.D), any(EditingDomain.class)))
824:                         .thenReturn(converterResult2);
825:
826:                 databindingService.addDomainModelReferenceSegmentConverter(converter);
827:                 final IValueProperty valueProperty = databindingService.getValueProperty(reference,
828:                         TestPackage.Literals.C);
829:                 assertEquals(expectedResultProperty, valueProperty);
830:         }
831:
832:         @Test
833:         public void settings_testGetValueProperty_eClass_editingDomain() throws DatabindingFailedException {
834:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
835:                 final VFeatureDomainModelReferenceSegment segment1 = VViewFactory.eINSTANCE
836:                         .createFeatureDomainModelReferenceSegment();
837:                 reference.getSegments().add(segment1);
838:                 final VFeatureDomainModelReferenceSegment segment2 = VViewFactory.eINSTANCE
839:                         .createFeatureDomainModelReferenceSegment();
840:                 reference.getSegments().add(segment2);
841:
842:                 final EditingDomain editingDomain = mock(EditingDomain.class);
843:                 final DomainModelReferenceSegmentConverterEMF converter = mock(DomainModelReferenceSegmentConverterEMF.class);
844:                 final IEMFValueProperty resultProperty1 = mock(IEMFValueProperty.class, withSettings().name("resultProperty1")); //$NON-NLS-1$
845:                 final IEMFValueProperty resultProperty2 = mock(IEMFValueProperty.class, withSettings().name("resultProperty2")); //$NON-NLS-1$
846:                 final IEMFValueProperty expectedResultProperty = mock(IEMFValueProperty.class,
847:                         withSettings().name("expectedResultProperty")); //$NON-NLS-1$
848:                 when(resultProperty1.value(resultProperty2)).thenReturn(expectedResultProperty);
849:
850:                 final SegmentConverterValueResultEMF converterResult1 = mock(SegmentConverterValueResultEMF.class);
851:                 when(converterResult1.getValueProperty()).thenReturn(resultProperty1);
852:                 when(converterResult1.getNextEClass()).thenReturn(Optional.of(TestPackage.Literals.D));
853:
854:                 final SegmentConverterValueResultEMF converterResult2 = mock(SegmentConverterValueResultEMF.class);
855:                 when(converterResult2.getValueProperty()).thenReturn(resultProperty2);
856:                 when(converterResult2.getNextEClass()).thenReturn(Optional.empty());
857:
858:                 when(converter.isApplicable(segment1)).thenReturn(1d);
859:                 when(converter.convertToValueProperty(same(segment1), eq(TestPackage.Literals.C), any(EditingDomain.class)))
860:                         .thenReturn(converterResult1);
861:                 when(converter.convertToValueProperty(same(segment2), eq(TestPackage.Literals.D), any(EditingDomain.class)))
862:                         .thenReturn(converterResult2);
863:
864:                 databindingService.addDomainModelReferenceSegmentConverter(converter);
865:                 final IValueProperty valueProperty = databindingService.getValueProperty(reference,
866:                         TestPackage.Literals.C, editingDomain);
867:                 assertEquals(expectedResultProperty, valueProperty);
868:                 verify(converter).convertToValueProperty(segment1, TestPackage.Literals.C, editingDomain);
869:                 verify(converter).convertToValueProperty(segment2, TestPackage.Literals.D, editingDomain);
870:         }
871:
872:         /**
873:          * Test method for
874:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getObservableList(VDomainModelReference, org.eclipse.emf.ecore.EObject)}
875:          * .
876:          *
877:          * @throws DatabindingFailedException if the databinding failed
878:          */
879:         @Test
880:         public void settings_testGetObservableList() throws DatabindingFailedException {
881:                 databindingService = spy(new EMFFormsDatabindingImpl());
882:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
883:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
884:                         .createFeatureDomainModelReferenceSegment();
885:                 reference.getSegments().add(segment);
886:
887:                 final EObject eObject = mock(EObject.class);
888:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
889:                 final SegmentConverterListResultEMF converterResult = mock(SegmentConverterListResultEMF.class);
890:                 final IEMFListProperty expectedResultProperty = mock(IEMFListProperty.class);
891:                 when(converterResult.getListProperty()).thenReturn(expectedResultProperty);
892:                 final IObservableList expectedObservableList = mock(IObservableList.class);
893:
894:                 when(converter1.isApplicable(segment)).thenReturn(5d);
895:                 when(converter1.convertToListProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
896:                         .thenReturn(converterResult);
897:                 when(expectedResultProperty.observe(eObject)).thenReturn(expectedObservableList);
898:
899:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
900:                 final IObservableList resultObservableList = databindingService.getObservableList(reference, eObject);
901:
902:                 verify(databindingService).getListProperty(reference, eObject);
903:                 verify(expectedResultProperty).observe(eObject);
904:                 assertEquals(expectedObservableList, resultObservableList);
905:         }
906:
907:         /**
908:          * Test method for
909:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getListProperty(VDomainModelReference,EObject)}
910:          * .
911:          *
912:          * @throws DatabindingFailedException if the databinding failed
913:          */
914:         @Test(expected = DatabindingFailedException.class)
915:         public void settings_testGetListPropertyNoApplicableConverter() throws DatabindingFailedException {
916:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
917:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
918:                         .createFeatureDomainModelReferenceSegment();
919:                 reference.getSegments().add(segment);
920:                 databindingService.getListProperty(reference, mock(EObject.class));
921:         }
922:
923:         /**
924:          * Test method for
925:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getListProperty(VDomainModelReference,EObject)}
926:          * .
927:          * Tests whether the correct converter is used when one is applicable and one is not.
928:          *
929:          * @throws DatabindingFailedException if the databinding failed
930:          */
931:         @Test
932:         public void settings_testGetListPropertyOneApplicable() throws DatabindingFailedException {
933:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
934:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
935:                         .createFeatureDomainModelReferenceSegment();
936:                 reference.getSegments().add(segment);
937:
938:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
939:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
940:                 final SegmentConverterListResultEMF converterResult = mock(SegmentConverterListResultEMF.class);
941:                 final IEMFListProperty expectedResultProperty = mock(IEMFListProperty.class);
942:                 when(converterResult.getListProperty()).thenReturn(expectedResultProperty);
943:
944:                 when(converter1.isApplicable(segment)).thenReturn(5d);
945:                 when(converter1.convertToListProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
946:                         .thenReturn(converterResult);
947:                 when(converter2.isApplicable(segment)).thenReturn(DomainModelReferenceSegmentConverterEMF.NOT_APPLICABLE);
948:                 when(converter2.convertToListProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
949:                         .thenReturn(mock(SegmentConverterListResultEMF.class));
950:
951:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
952:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
953:                 final IListProperty listProperty = databindingService.getListProperty(reference, mock(EObject.class));
954:                 assertEquals(expectedResultProperty, listProperty);
955:         }
956:
957:         /**
958:          * Test method for
959:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getListProperty(VDomainModelReference,EObject)}
960:          * .
961:          * Tests whether the correct converter is used when there are two applicable ones with different priorities.
962:          * Also tests whether the correct result is returned.
963:          *
964:          * @throws DatabindingFailedException if the databinding failed
965:          */
966:         @Test
967:         public void settings_testGetListPropertyTwoApplicable() throws DatabindingFailedException {
968:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
969:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
970:                         .createFeatureDomainModelReferenceSegment();
971:                 reference.getSegments().add(segment);
972:
973:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
974:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
975:                 final SegmentConverterListResultEMF converterResult = mock(SegmentConverterListResultEMF.class);
976:                 final IEMFListProperty expectedResultProperty = mock(IEMFListProperty.class);
977:                 when(converterResult.getListProperty()).thenReturn(expectedResultProperty);
978:
979:                 when(converter1.isApplicable(segment)).thenReturn(5d);
980:                 when(converter1.convertToListProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
981:                         .thenReturn(converterResult);
982:                 when(converter2.isApplicable(segment)).thenReturn(1d);
983:                 when(converter2.convertToListProperty(same(segment), any(EClass.class), any(EditingDomain.class)))
984:                         .thenReturn(mock(SegmentConverterListResultEMF.class));
985:
986:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
987:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
988:                 final IListProperty listProperty = databindingService.getListProperty(reference, mock(EObject.class));
989:                 assertEquals(expectedResultProperty, listProperty);
990:         }
991:
992:         /**
993:          * Test method for
994:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#getValueProperty(VDomainModelReference,EObject)}
995:          * .
996:          * Tests whether the {@link EMFFormsDatabindingImpl} considers all {@link DomainModelReferenceSegmentConverterEMF}s,
997:          * that are registered to it, for its conversions.
998:          *
999:          * @throws DatabindingFailedException if the databinding failed
1000:          */
1001:         @Test
1002:         public void settings_testGetListPropertyAllConsidered() throws DatabindingFailedException {
1003:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
1004:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
1005:                         .createFeatureDomainModelReferenceSegment();
1006:                 reference.getSegments().add(segment);
1007:
1008:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
1009:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
1010:                 final DomainModelReferenceSegmentConverterEMF converter3 = mock(DomainModelReferenceSegmentConverterEMF.class);
1011:
1012:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
1013:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
1014:                 databindingService.addDomainModelReferenceSegmentConverter(converter3);
1015:
1016:                 when(converter1.isApplicable(segment)).thenReturn(1d);
1017:                 when(converter2.isApplicable(segment)).thenReturn(3d);
1018:                 when(converter2.convertToListProperty(any(VDomainModelReferenceSegment.class), any(EClass.class),
1019:                         any(EditingDomain.class))).thenReturn(mock(SegmentConverterListResultEMF.class));
1020:                 when(converter3.isApplicable(segment)).thenReturn(2d);
1021:
1022:                 databindingService.getListProperty(reference, mock(EObject.class));
1023:
1024:                 verify(converter1).isApplicable(segment);
1025:                 verify(converter2).isApplicable(segment);
1026:                 verify(converter3).isApplicable(segment);
1027:         }
1028:
1029:         /**
1030:          * Test method for
1031:          * {@link org.eclipse.emfforms.internal.core.services.databinding.EMFFormsDatabindingImpl#removeDomainModelReferenceSegmentConverter(DomainModelReferenceSegmentConverterEMF)}
1032:          * .
1033:          *
1034:          * @throws DatabindingFailedException if the databinding failed
1035:          */
1036:         @Test(expected = DatabindingFailedException.class)
1037:         public void settings_testRemoveDomainModelReferenceSegmentConverter() throws DatabindingFailedException {
1038:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
1039:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
1040:                         .createFeatureDomainModelReferenceSegment();
1041:                 reference.getSegments().add(segment);
1042:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
1043:
1044:                 when(converter1.isApplicable(segment)).thenReturn(5d);
1045:
1046:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
1047:                 databindingService.removeDomainModelReferenceSegmentConverter(converter1);
1048:                 databindingService.getValueProperty(reference, TestFactory.eINSTANCE.createA());
1049:         }
1050:
1051:         @Test(expected = DatabindingFailedException.class)
1052:         public void settings_testGetSettingNoApplicableConverter() throws DatabindingFailedException {
1053:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
1054:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
1055:                         .createFeatureDomainModelReferenceSegment();
1056:                 reference.getSegments().add(segment);
1057:                 databindingService.getSetting(reference, mock(EObject.class));
1058:         }
1059:
1060:         @Test
1061:         public void settings_testGetSettingPropertyOneApplicable() throws DatabindingFailedException {
1062:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
1063:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
1064:                         .createFeatureDomainModelReferenceSegment();
1065:                 reference.getSegments().add(segment);
1066:
1067:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
1068:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
1069:                 final Setting expectedSetting = mock(Setting.class);
1070:
1071:                 when(converter1.isApplicable(segment)).thenReturn(5d);
1072:                 when(converter1.getSetting(same(segment), any(EObject.class))).thenReturn(expectedSetting);
1073:                 when(converter2.isApplicable(segment)).thenReturn(DomainModelReferenceSegmentConverterEMF.NOT_APPLICABLE);
1074:                 when(converter2.getSetting(same(segment), any(EObject.class))).thenReturn(
1075:                         mock(Setting.class));
1076:
1077:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
1078:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
1079:                 final Setting setting = databindingService.getSetting(reference, mock(EObject.class));
1080:                 assertEquals(expectedSetting, setting);
1081:         }
1082:
1083:         @Test
1084:         public void settings_testGetSettingPropertyTwoApplicable() throws DatabindingFailedException {
1085:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
1086:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
1087:                         .createFeatureDomainModelReferenceSegment();
1088:                 reference.getSegments().add(segment);
1089:
1090:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
1091:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
1092:                 final Setting expectedSetting = mock(Setting.class);
1093:
1094:                 when(converter1.isApplicable(segment)).thenReturn(5d);
1095:                 when(converter1.getSetting(same(segment), any(EObject.class))).thenReturn(expectedSetting);
1096:                 when(converter2.isApplicable(segment)).thenReturn(1d);
1097:                 when(converter2.getSetting(same(segment), any(EObject.class))).thenReturn(
1098:                         mock(Setting.class));
1099:
1100:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
1101:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
1102:                 final Setting setting = databindingService.getSetting(reference, mock(EObject.class));
1103:                 assertEquals(expectedSetting, setting);
1104:         }
1105:
1106:         @Test
1107:         public void settings_testGetSettingPropertyAllConsidered() throws DatabindingFailedException {
1108:                 final VDomainModelReference reference = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
1109:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
1110:                         .createFeatureDomainModelReferenceSegment();
1111:                 reference.getSegments().add(segment);
1112:
1113:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
1114:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
1115:                 final DomainModelReferenceSegmentConverterEMF converter3 = mock(DomainModelReferenceSegmentConverterEMF.class);
1116:
1117:                 when(converter1.isApplicable(segment)).thenReturn(1d);
1118:                 when(converter2.isApplicable(segment)).thenReturn(3d);
1119:                 when(converter3.isApplicable(segment)).thenReturn(2d);
1120:
1121:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
1122:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
1123:                 databindingService.addDomainModelReferenceSegmentConverter(converter3);
1124:
1125:                 databindingService.getSetting(reference, mock(EObject.class));
1126:
1127:                 verify(converter1).isApplicable(segment);
1128:                 verify(converter2).isApplicable(segment);
1129:                 verify(converter3).isApplicable(segment);
1130:         }
1131:
1132:         @Test(expected = IllegalArgumentException.class)
1133:         public void settings_testGetSettingPropertyNull() throws DatabindingFailedException {
1134:                 databindingService.getSetting(null, mock(EObject.class));
1135:         }
1136:
1137:         @Test
1138:         public void testResolveSegment() throws DatabindingFailedException {
1139:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
1140:                         .createFeatureDomainModelReferenceSegment();
1141:                 final EObject eObject = EcoreFactory.eINSTANCE.createEObject();
1142:                 final Setting expectedSetting = mock(Setting.class);
1143:
1144:                 final DomainModelReferenceSegmentConverterEMF converter1 = mock(DomainModelReferenceSegmentConverterEMF.class);
1145:                 final DomainModelReferenceSegmentConverterEMF converter2 = mock(DomainModelReferenceSegmentConverterEMF.class);
1146:                 final DomainModelReferenceSegmentConverterEMF converter3 = mock(DomainModelReferenceSegmentConverterEMF.class);
1147:
1148:                 when(converter1.isApplicable(segment)).thenReturn(1d);
1149:                 when(converter2.isApplicable(segment)).thenReturn(3d);
1150:                 when(converter3.isApplicable(segment)).thenReturn(2d);
1151:
1152:                 when(converter2.getSetting(segment, eObject)).thenReturn(expectedSetting);
1153:
1154:                 databindingService.addDomainModelReferenceSegmentConverter(converter1);
1155:                 databindingService.addDomainModelReferenceSegmentConverter(converter2);
1156:                 databindingService.addDomainModelReferenceSegmentConverter(converter3);
1157:
1158:                 final Setting result = databindingService.resolveSegment(segment, eObject);
1159:
1160:                 assertEquals(expectedSetting, result);
1161:                 verify(converter1).isApplicable(segment);
1162:                 verify(converter2).isApplicable(segment);
1163:                 verify(converter3).isApplicable(segment);
1164:                 verify(converter2).getSetting(segment, eObject);
1165:         }
1166: }