Skip to content

Package: TableValidationInitiator_Test

TableValidationInitiator_Test

nameinstructionbranchcomplexitylinemethod
TableValidationInitiator_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%
beforeClass()
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
createTable(VTableControl, VFeaturePathDomainModelReference)
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
mockContext(VView, EObject, Set, EMFFormsDatabinding)
M: 0 C: 53
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
testInstantiateMultipleTablesWithPanel()
M: 0 C: 226
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 44
100%
M: 0 C: 1
100%
testInstantiateMultipleTablesWithPanelAdd()
M: 0 C: 211
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 34
100%
M: 0 C: 1
100%
testInstantiateMultipleTablesWithPanelRemove()
M: 0 C: 229
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 38
100%
M: 0 C: 1
100%
testInstantiateTableWithPanel()
M: 0 C: 160
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 30
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2017 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Eugen Neufeld - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.table.internal.validation;
15:
16: import static org.mockito.Matchers.any;
17: import static org.mockito.Matchers.same;
18: import static org.mockito.Mockito.calls;
19: import static org.mockito.Mockito.inOrder;
20: import static org.mockito.Mockito.mock;
21: import static org.mockito.Mockito.when;
22:
23: import java.util.LinkedHashSet;
24: import java.util.Set;
25:
26: import org.eclipse.core.databinding.observable.value.IObservableValue;
27: import org.eclipse.emf.databinding.EMFObservables;
28: import org.eclipse.emf.ecore.EClass;
29: import org.eclipse.emf.ecore.EObject;
30: import org.eclipse.emf.ecore.EPackage;
31: import org.eclipse.emf.ecore.EcoreFactory;
32: import org.eclipse.emf.ecore.EcorePackage;
33: import org.eclipse.emf.ecp.test.common.DefaultRealm;
34: import org.eclipse.emf.ecp.view.internal.context.ViewModelContextImpl;
35: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
36: import org.eclipse.emf.ecp.view.spi.model.ModelChangeListener;
37: import org.eclipse.emf.ecp.view.spi.model.VElement;
38: import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
39: import org.eclipse.emf.ecp.view.spi.model.VView;
40: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
41: import org.eclipse.emf.ecp.view.spi.model.VViewModelProperties;
42: import org.eclipse.emf.ecp.view.spi.provider.EMFFormsViewService;
43: import org.eclipse.emf.ecp.view.spi.table.model.DetailEditing;
44: import org.eclipse.emf.ecp.view.spi.table.model.VTableControl;
45: import org.eclipse.emf.ecp.view.spi.table.model.VTableDomainModelReference;
46: import org.eclipse.emf.ecp.view.spi.table.model.VTableFactory;
47: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
48: import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
49: import org.junit.BeforeClass;
50: import org.junit.Test;
51: import org.mockito.Mockito;
52:
53: @SuppressWarnings("restriction")
54: public class TableValidationInitiator_Test {
55:
56:         private static DefaultRealm realm;
57:
58:         @BeforeClass
59:         public static void beforeClass() {
60:                 realm = new DefaultRealm();
61:         }
62:
63:         @SuppressWarnings({ "rawtypes" })
64:         @Test
65:         public void testInstantiateTableWithPanel() throws DatabindingFailedException {
66:                 final VView view = VViewFactory.eINSTANCE.createView();
67:                 final VTableControl table = VTableFactory.eINSTANCE.createTableControl();
68:                 view.getChildren().add(table);
69:                 table.setDetailEditing(DetailEditing.WITH_PANEL);
70:                 final VTableDomainModelReference tableDMR = VTableFactory.eINSTANCE.createTableDomainModelReference();
71:                 table.setDomainModelReference(tableDMR);
72:                 final VFeaturePathDomainModelReference pathDMR = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
73:                 tableDMR.setDomainModelReference(pathDMR);
74:                 pathDMR.setDomainModelEFeature(EcorePackage.eINSTANCE.getEPackage_EClassifiers());
75:
76:                 final EPackage domainModel = EcoreFactory.eINSTANCE.createEPackage();
77:                 final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
78:                 domainModel.getEClassifiers().add(eClass);
79:
80:                 final TableValidationInitiator initiator = new TableValidationInitiator();
81:                 final ViewModelContext context = mock(ViewModelContext.class);
82:
83:                 when(context.getViewModel()).thenReturn(view);
84:                 when(context.getDomainModel()).thenReturn(domainModel);
85:                 final EMFFormsViewService viewService = mock(EMFFormsViewService.class);
86:                 when(context.getService(EMFFormsViewService.class)).thenReturn(viewService);
87:                 when(viewService.getView(same(eClass), any(VViewModelProperties.class)))
88:                         .thenReturn(VViewFactory.eINSTANCE.createView());
89:                 final EMFFormsDatabinding databinding = mock(EMFFormsDatabinding.class);
90:                 when(context.getService(EMFFormsDatabinding.class)).thenReturn(databinding);
91:                 final IObservableValue observeValue = EMFObservables.observeValue(realm, domainModel,
92:                         EcorePackage.eINSTANCE.getEPackage_EClassifiers());
93:                 when(databinding.getObservableValue(pathDMR, domainModel)).thenReturn(observeValue);
94:                 when(context.getChildContext(any(EObject.class), any(VElement.class), any(VView.class)))
95:                         .thenReturn(mock(ViewModelContext.class));
96:                 initiator.instantiate(context);
97:                 inOrder(context).verify(context, calls(1)).getChildContext(same(eClass), same(table), any(VView.class));
98:         }
99:
100:         @SuppressWarnings({ "rawtypes" })
101:         @Test
102:         public void testInstantiateMultipleTablesWithPanel() throws DatabindingFailedException {
103:                 final VView view = VViewFactory.eINSTANCE.createView();
104:                 final VTableControl table1 = VTableFactory.eINSTANCE.createTableControl();
105:                 view.getChildren().add(table1);
106:                 table1.setDetailEditing(DetailEditing.WITH_PANEL);
107:                 final VTableDomainModelReference tableDMR1 = VTableFactory.eINSTANCE.createTableDomainModelReference();
108:                 table1.setDomainModelReference(tableDMR1);
109:                 final VFeaturePathDomainModelReference pathDMR1 = VViewFactory.eINSTANCE
110:                         .createFeaturePathDomainModelReference();
111:                 tableDMR1.setDomainModelReference(pathDMR1);
112:                 pathDMR1.setDomainModelEFeature(EcorePackage.eINSTANCE.getEPackage_EClassifiers());
113:
114:                 final VTableControl table2 = VTableFactory.eINSTANCE.createTableControl();
115:                 view.getChildren().add(table2);
116:                 table2.setDetailEditing(DetailEditing.WITH_PANEL);
117:                 final VTableDomainModelReference tableDMR2 = VTableFactory.eINSTANCE.createTableDomainModelReference();
118:                 table2.setDomainModelReference(tableDMR2);
119:                 final VFeaturePathDomainModelReference pathDMR2 = VViewFactory.eINSTANCE
120:                         .createFeaturePathDomainModelReference();
121:                 tableDMR2.setDomainModelReference(pathDMR2);
122:                 pathDMR2.setDomainModelEFeature(EcorePackage.eINSTANCE.getEPackage_EClassifiers());
123:
124:                 final EPackage domainModel = EcoreFactory.eINSTANCE.createEPackage();
125:                 final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
126:                 domainModel.getEClassifiers().add(eClass);
127:
128:                 final TableValidationInitiator initiator = new TableValidationInitiator();
129:                 final ViewModelContext context = mock(ViewModelContext.class);
130:
131:                 when(context.getViewModel()).thenReturn(view);
132:                 when(context.getDomainModel()).thenReturn(domainModel);
133:                 final EMFFormsViewService viewService = mock(EMFFormsViewService.class);
134:                 when(context.getService(EMFFormsViewService.class)).thenReturn(viewService);
135:                 when(viewService.getView(same(eClass), any(VViewModelProperties.class)))
136:                         .thenReturn(VViewFactory.eINSTANCE.createView());
137:                 final EMFFormsDatabinding databinding = mock(EMFFormsDatabinding.class);
138:                 when(context.getService(EMFFormsDatabinding.class)).thenReturn(databinding);
139:                 final IObservableValue observeValue1 = EMFObservables.observeValue(realm, domainModel,
140:                         EcorePackage.eINSTANCE.getEPackage_EClassifiers());
141:                 final IObservableValue observeValue2 = EMFObservables.observeValue(realm, domainModel,
142:                         EcorePackage.eINSTANCE.getEPackage_EClassifiers());
143:                 when(databinding.getObservableValue(pathDMR1, domainModel)).thenReturn(observeValue1);
144:                 when(databinding.getObservableValue(pathDMR2, domainModel)).thenReturn(observeValue2);
145:                 when(context.getChildContext(any(EObject.class), any(VElement.class), any(VView.class)))
146:                         .thenReturn(mock(ViewModelContext.class));
147:                 initiator.instantiate(context);
148:                 inOrder(context).verify(context, calls(1)).getChildContext(same(eClass), same(table1), any(VView.class));
149:                 inOrder(context).verify(context, calls(1)).getChildContext(same(eClass), same(table2), any(VView.class));
150:         }
151:
152:         private void createTable(VTableControl table, VFeaturePathDomainModelReference pathDMR) {
153:                 table.setDetailEditing(DetailEditing.WITH_PANEL);
154:                 final VTableDomainModelReference tableDMR = VTableFactory.eINSTANCE.createTableDomainModelReference();
155:                 table.setDomainModelReference(tableDMR);
156:                 tableDMR.setDomainModelReference(pathDMR);
157:         }
158:
159:         private ViewModelContext mockContext(VView view, EObject domainModel, final Set<ModelChangeListener> listeners,
160:                 EMFFormsDatabinding databinding) {
161:                 final ViewModelContext contextReal = new ViewModelContextImpl(view, domainModel);
162:                 final ViewModelContext context = Mockito.spy(contextReal);
163:
164:                 final EMFFormsViewService viewService = mock(EMFFormsViewService.class);
165:                 when(context.getService(EMFFormsViewService.class)).thenReturn(viewService);
166:                 when(context.getService(EMFFormsDatabinding.class)).thenReturn(databinding);
167:                 when(viewService.getView(any(EClass.class), any(VViewModelProperties.class)))
168:                         .thenReturn(VViewFactory.eINSTANCE.createView());
169:                 when(context.getService(EMFFormsDatabinding.class)).thenReturn(databinding);
170:
171:                 return context;
172:         }
173:
174:         @SuppressWarnings({ "rawtypes" })
175:         @Test
176:         public void testInstantiateMultipleTablesWithPanelAdd() throws DatabindingFailedException {
177:                 final VView view = VViewFactory.eINSTANCE.createView();
178:                 final VTableControl table1 = VTableFactory.eINSTANCE.createTableControl();
179:                 view.getChildren().add(table1);
180:                 final VFeaturePathDomainModelReference pathDMR1 = VViewFactory.eINSTANCE
181:                         .createFeaturePathDomainModelReference();
182:                 pathDMR1.setDomainModelEFeature(EcorePackage.eINSTANCE.getEPackage_EClassifiers());
183:                 createTable(table1, pathDMR1);
184:
185:                 final VTableControl table2 = VTableFactory.eINSTANCE.createTableControl();
186:                 view.getChildren().add(table2);
187:                 final VFeaturePathDomainModelReference pathDMR2 = VViewFactory.eINSTANCE
188:                         .createFeaturePathDomainModelReference();
189:                 pathDMR2.setDomainModelEFeature(EcorePackage.eINSTANCE.getEPackage_EClassifiers());
190:                 createTable(table2, pathDMR2);
191:
192:                 final EPackage domainModel = EcoreFactory.eINSTANCE.createEPackage();
193:                 final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
194:                 domainModel.getEClassifiers().add(eClass);
195:
196:                 final TableValidationInitiator initiator = new TableValidationInitiator();
197:                 final Set<ModelChangeListener> listeners = new LinkedHashSet<ModelChangeListener>();
198:                 final EMFFormsDatabinding databinding = mock(EMFFormsDatabinding.class);
199:
200:                 final IObservableValue observeValue1 = EMFObservables.observeValue(realm, domainModel,
201:                         EcorePackage.eINSTANCE.getEPackage_EClassifiers());
202:                 final IObservableValue observeValue2 = EMFObservables.observeValue(realm, domainModel,
203:                         EcorePackage.eINSTANCE.getEPackage_EClassifiers());
204:                 when(databinding.getObservableValue(pathDMR1, domainModel)).thenReturn(observeValue1);
205:                 when(databinding.getObservableValue(pathDMR2, domainModel)).thenReturn(observeValue2);
206:
207:                 final ViewModelContext context = mockContext(view, domainModel, listeners, databinding);
208:                 initiator.instantiate(context);
209:
210:                 final EClass newClass = EcoreFactory.eINSTANCE.createEClass();
211:                 domainModel.getEClassifiers().add(newClass);
212:
213:                 inOrder(context).verify(context, calls(1)).getChildContext(same(eClass), same(table1), any(VView.class));
214:                 inOrder(context).verify(context, calls(1)).getChildContext(same(eClass), same(table2), any(VView.class));
215:                 inOrder(context).verify(context, calls(1)).getChildContext(same(newClass), same(table1), any(VView.class));
216:                 inOrder(context).verify(context, calls(1)).getChildContext(same(newClass), same(table2), any(VView.class));
217:         }
218:
219:         @SuppressWarnings({ "rawtypes" })
220:         @Test
221:         public void testInstantiateMultipleTablesWithPanelRemove() throws DatabindingFailedException {
222:                 final VView view = VViewFactory.eINSTANCE.createView();
223:                 final VTableControl table1 = VTableFactory.eINSTANCE.createTableControl();
224:                 view.getChildren().add(table1);
225:                 final VFeaturePathDomainModelReference pathDMR1 = VViewFactory.eINSTANCE
226:                         .createFeaturePathDomainModelReference();
227:                 pathDMR1.setDomainModelEFeature(EcorePackage.eINSTANCE.getEPackage_EClassifiers());
228:                 createTable(table1, pathDMR1);
229:
230:                 final VTableControl table2 = VTableFactory.eINSTANCE.createTableControl();
231:                 view.getChildren().add(table2);
232:                 final VFeaturePathDomainModelReference pathDMR2 = VViewFactory.eINSTANCE
233:                         .createFeaturePathDomainModelReference();
234:                 pathDMR2.setDomainModelEFeature(EcorePackage.eINSTANCE.getEPackage_EClassifiers());
235:                 createTable(table2, pathDMR2);
236:
237:                 final EPackage domainModel = EcoreFactory.eINSTANCE.createEPackage();
238:                 final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
239:                 domainModel.getEClassifiers().add(eClass);
240:
241:                 final TableValidationInitiator initiator = new TableValidationInitiator();
242:                 final Set<ModelChangeListener> listeners = new LinkedHashSet<ModelChangeListener>();
243:                 final EMFFormsDatabinding databinding = mock(EMFFormsDatabinding.class);
244:
245:                 final IObservableValue observeValue1 = EMFObservables.observeValue(realm, domainModel,
246:                         EcorePackage.eINSTANCE.getEPackage_EClassifiers());
247:                 final IObservableValue observeValue2 = EMFObservables.observeValue(realm, domainModel,
248:                         EcorePackage.eINSTANCE.getEPackage_EClassifiers());
249:                 when(databinding.getObservableValue(pathDMR1, domainModel)).thenReturn(observeValue1);
250:                 when(databinding.getObservableValue(pathDMR2, domainModel)).thenReturn(observeValue2);
251:
252:                 final ViewModelContext context = mockContext(view, domainModel, listeners, databinding);
253:                 initiator.instantiate(context);
254:
255:                 final EClass newClass1 = EcoreFactory.eINSTANCE.createEClass();
256:                 domainModel.getEClassifiers().add(newClass1);
257:                 final EClass newClass2 = EcoreFactory.eINSTANCE.createEClass();
258:                 domainModel.getEClassifiers().add(newClass2);
259:
260:                 domainModel.getEClassifiers().remove(newClass1);
261:                 domainModel.getEClassifiers().remove(newClass2);
262:                 inOrder(context).verify(context, calls(1)).getChildContext(same(eClass), same(table1), any(VView.class));
263:                 inOrder(context).verify(context, calls(1)).getChildContext(same(eClass), same(table2), any(VView.class));
264:                 inOrder(context).verify(context, calls(2)).getChildContext(same(newClass1), same(table1), any(VView.class));
265:                 inOrder(context).verify(context, calls(2)).getChildContext(same(newClass1), same(table2), any(VView.class));
266:         }
267: }