Skip to content

Package: ViewTemplateSupplierImpl_Test

ViewTemplateSupplierImpl_Test

nameinstructionbranchcomplexitylinemethod
ViewTemplateSupplierImpl_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%
createListWithTwoTemplates()
M: 0 C: 42
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
generateSegments()
M: 0 C: 113
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 30
100%
M: 0 C: 1
100%
generateSegments_dmrWithExistingSegments()
M: 0 C: 78
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 22
100%
M: 0 C: 1
100%
generateSegments_noRootEClass()
M: 0 C: 73
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 20
100%
M: 0 C: 1
100%
generateSegments_noSegmentsGenerated()
M: 0 C: 69
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
mockStyle(double)
M: 0 C: 87
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
setup()
M: 0 C: 16
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
testApplicableStyleProperties()
M: 0 C: 91
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 19
100%
M: 0 C: 1
100%
testGetTemplateModels()
M: 0 C: 58
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testNoTemplateModel()
M: 0 C: 14
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
testSpecifities()
M: 0 C: 115
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 22
100%
M: 0 C: 1
100%
testVElementIsNull()
M: 0 C: 39
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
testViewModelContextIsNull()
M: 0 C: 39
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2019 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Lucas Koehler - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.template.service;
15:
16: import static org.junit.Assert.assertEquals;
17: import static org.junit.Assert.assertNotSame;
18: import static org.junit.Assert.assertNull;
19: import static org.junit.Assert.assertSame;
20: import static org.junit.Assert.assertTrue;
21: import static org.mockito.Matchers.any;
22: import static org.mockito.Matchers.isNull;
23: import static org.mockito.Matchers.notNull;
24: import static org.mockito.Mockito.mock;
25: import static org.mockito.Mockito.never;
26: import static org.mockito.Mockito.verify;
27: import static org.mockito.Mockito.when;
28:
29: import java.util.ArrayList;
30: import java.util.Collections;
31: import java.util.Iterator;
32: import java.util.LinkedHashSet;
33: import java.util.LinkedList;
34: import java.util.List;
35: import java.util.Map;
36: import java.util.Optional;
37:
38: import org.eclipse.emf.common.util.BasicEList;
39: import org.eclipse.emf.common.util.EList;
40: import org.eclipse.emf.ecore.EClass;
41: import org.eclipse.emf.ecore.EcoreFactory;
42: import org.eclipse.emf.ecore.EcorePackage;
43: import org.eclipse.emf.ecore.util.EcoreUtil;
44: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
45: import org.eclipse.emf.ecp.view.spi.model.VControl;
46: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
47: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReferenceSegment;
48: import org.eclipse.emf.ecp.view.spi.model.VElement;
49: import org.eclipse.emf.ecp.view.spi.model.VFeatureDomainModelReferenceSegment;
50: import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
51: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
52: import org.eclipse.emf.ecp.view.template.model.VTStyle;
53: import org.eclipse.emf.ecp.view.template.model.VTStyleProperty;
54: import org.eclipse.emf.ecp.view.template.model.VTStyleSelector;
55: import org.eclipse.emf.ecp.view.template.model.VTTemplateFactory;
56: import org.eclipse.emf.ecp.view.template.model.VTViewTemplate;
57: import org.eclipse.emf.ecp.view.template.selector.domainmodelreference.model.VTDomainModelReferenceSelector;
58: import org.eclipse.emf.ecp.view.template.selector.domainmodelreference.model.VTDomainmodelreferenceFactory;
59: import org.eclipse.emfforms.spi.core.services.segments.EMFFormsSegmentGenerator;
60: import org.eclipse.emfforms.spi.core.services.segments.LegacyDmrToRootEClass;
61: import org.junit.Before;
62: import org.junit.Test;
63:
64: /**
65: * Unit test cases for the {@link ViewTemplateSupplierImpl}.
66: *
67: * @author Lucas Koehler
68: *
69: */
70: public class ViewTemplateSupplierImpl_Test {
71:
72:         private ViewTemplateSupplierImpl templateSupplier;
73:         private LegacyDmrToRootEClass dmrToRootEClass;
74:
75:         @Before
76:         public void setup() {
77:                 templateSupplier = new ViewTemplateSupplierImpl();
78:                 dmrToRootEClass = mock(LegacyDmrToRootEClass.class);
79:                 templateSupplier.setLegacyDmrToRootEClass(dmrToRootEClass);
80:         }
81:
82:         @Test
83:         public void testGetTemplateModels() {
84:                 final VTViewTemplate template1 = VTTemplateFactory.eINSTANCE.createViewTemplate();
85:                 final VTViewTemplate template2 = VTTemplateFactory.eINSTANCE.createViewTemplate();
86:                 final VTStyle style1 = VTTemplateFactory.eINSTANCE.createStyle();
87:                 template1.getStyles().add(style1);
88:                 final LinkedHashSet<VTViewTemplate> templates = new LinkedHashSet<VTViewTemplate>();
89:                 templates.add(template1);
90:                 templates.add(template2);
91:
92:                 templateSupplier.setViewTemplates(templates);
93:
94:                 final Iterator<VTViewTemplate> iterator = templateSupplier.getViewTemplates().iterator();
95:                 final VTViewTemplate copy1 = iterator.next();
96:                 assertNotSame(template1, copy1);
97:                 assertTrue(EcoreUtil.equals(template1, copy1));
98:                 final VTViewTemplate copy2 = iterator.next();
99:                 assertNotSame(template2, copy2);
100:                 assertTrue(EcoreUtil.equals(template2, copy2));
101:         }
102:
103:         @Test
104:         public void testNoTemplateModel() {
105:                 final Map<VTStyleProperty, Double> styleProperties = templateSupplier.getStyleProperties(mock(VElement.class),
106:                         mock(ViewModelContext.class));
107:                 assertTrue(styleProperties.isEmpty());
108:         }
109:
110:         @Test
111:         public void testVElementIsNull() {
112:                 final List<VTViewTemplate> templates = createListWithTwoTemplates();
113:                 templates.get(0).getStyles().add(mockStyle(1d));
114:                 templates.get(1).getStyles().add(mockStyle(1d));
115:                 templateSupplier.setViewTemplates(new LinkedHashSet<VTViewTemplate>(templates));
116:
117:                 final Map<VTStyleProperty, Double> styleProperties = templateSupplier.getStyleProperties(null,
118:                         mock(ViewModelContext.class));
119:                 assertTrue(styleProperties.isEmpty());
120:         }
121:
122:         @Test
123:         public void testViewModelContextIsNull() {
124:                 final List<VTViewTemplate> templates = createListWithTwoTemplates();
125:                 templates.get(0).getStyles().add(mockStyle(1d));
126:                 templates.get(1).getStyles().add(mockStyle(1d));
127:                 templateSupplier.setViewTemplates(new LinkedHashSet<VTViewTemplate>(templates));
128:
129:                 final Map<VTStyleProperty, Double> styleProperties = templateSupplier.getStyleProperties(mock(VElement.class),
130:                         null);
131:                 assertTrue(styleProperties.isEmpty());
132:         }
133:
134:         /**
135:          * Test that only applicable style properties are returned.
136:          */
137:         @Test
138:         public void testApplicableStyleProperties() {
139:                 final List<VTViewTemplate> templates = createListWithTwoTemplates();
140:                 final VTStyle style1 = mockStyle(1d);
141:                 final VTStyleProperty styleProperty1 = style1.getProperties().get(0);
142:                 final VTStyle style2 = mockStyle(2d);
143:                 final VTStyleProperty styleProperty2 = style2.getProperties().get(0);
144:                 templates.get(0).getStyles().add(style1);
145:                 templates.get(0).getStyles().add(mockStyle(VTStyleSelector.NOT_APPLICABLE));
146:                 templates.get(1).getStyles().add(style2);
147:
148:                 final VControl vElement = mock(VControl.class);
149:                 final VDomainModelReference dmr = mock(VDomainModelReference.class);
150:                 when(vElement.getDomainModelReference()).thenReturn(dmr);
151:                 final ViewModelContext viewModelContext = mock(ViewModelContext.class);
152:                 templateSupplier.setViewTemplates(new LinkedHashSet<VTViewTemplate>(templates));
153:
154:                 final Map<VTStyleProperty, Double> styleProperties = templateSupplier.getStyleProperties(vElement,
155:                         viewModelContext);
156:
157:                 assertEquals(2, styleProperties.size());
158:                 assertTrue(styleProperties.containsKey(styleProperty1));
159:                 assertTrue(styleProperties.containsKey(styleProperty2));
160:         }
161:
162:         /** Test that style properties are associated with their correct specificities. */
163:         @Test
164:         public void testSpecifities() {
165:                 final List<VTViewTemplate> templates = createListWithTwoTemplates();
166:                 final VTStyle style1 = mockStyle(3d);
167:                 final VTStyleProperty styleProperty1 = style1.getProperties().get(0);
168:                 final VTStyle style2 = mockStyle(1d);
169:                 final VTStyleProperty styleProperty2 = style2.getProperties().get(0);
170:                 templates.get(0).getStyles().add(style1);
171:                 templates.get(1).getStyles().add(style2);
172:
173:                 when(styleProperty1.equalStyles(styleProperty2)).thenReturn(true);
174:                 when(styleProperty2.equalStyles(styleProperty1)).thenReturn(true);
175:
176:                 templateSupplier.setViewTemplates(new LinkedHashSet<VTViewTemplate>(templates));
177:
178:                 final VControl vElement = mock(VControl.class);
179:                 final VDomainModelReference dmr = mock(VDomainModelReference.class);
180:                 when(vElement.getDomainModelReference()).thenReturn(dmr);
181:                 final ViewModelContext viewModelContext = mock(ViewModelContext.class);
182:                 final Map<VTStyleProperty, Double> styleProperties = templateSupplier.getStyleProperties(vElement,
183:                         viewModelContext);
184:
185:                 assertEquals(2, styleProperties.size());
186:                 assertTrue(styleProperties.containsKey(styleProperty1));
187:                 assertEquals(new Double(3d), styleProperties.get(styleProperty1));
188:                 assertTrue(styleProperties.containsKey(styleProperty2));
189:                 assertEquals(new Double(1d), styleProperties.get(styleProperty2));
190:         }
191:
192:         @Test
193:         public void generateSegments() {
194:                 final VTViewTemplate template = VTTemplateFactory.eINSTANCE.createViewTemplate();
195:                 final VTStyle style = VTTemplateFactory.eINSTANCE.createStyle();
196:                 final VTDomainModelReferenceSelector dmrSelector = VTDomainmodelreferenceFactory.eINSTANCE
197:                         .createDomainModelReferenceSelector();
198:                 final VDomainModelReference dmr = VViewFactory.eINSTANCE.createDomainModelReference();
199:                 dmrSelector.setDomainModelReference(dmr);
200:                 style.setSelector(dmrSelector);
201:                 template.getStyles().add(style);
202:
203:                 final EMFFormsSegmentGenerator segmentGenerator = mock(EMFFormsSegmentGenerator.class);
204:                 templateSupplier.setEMFFormsSegmentGenerator(segmentGenerator);
205:                 final List<VDomainModelReferenceSegment> segmentList = new LinkedList<>();
206:                 final VFeatureDomainModelReferenceSegment segment0 = VViewFactory.eINSTANCE
207:                         .createFeatureDomainModelReferenceSegment();
208:                 final VFeatureDomainModelReferenceSegment segment1 = VViewFactory.eINSTANCE
209:                         .createFeatureDomainModelReferenceSegment();
210:                 final VFeatureDomainModelReferenceSegment segment2 = VViewFactory.eINSTANCE
211:                         .createFeatureDomainModelReferenceSegment();
212:                 segmentList.add(segment0);
213:                 segmentList.add(segment1);
214:                 segmentList.add(segment2);
215:
216:                 final EClass rootEClass = EcoreFactory.eINSTANCE.createEClass();
217:                 when(dmrToRootEClass.getRootEClass(dmr)).thenReturn(Optional.of(rootEClass));
218:                 when(segmentGenerator.generateSegments(dmr)).thenReturn(segmentList);
219:
220:                 templateSupplier.generateSegments(template);
221:
222:                 assertEquals("Wrong number of generated segments", 3, dmr.getSegments().size()); //$NON-NLS-1$
223:                 assertSame("Wrong order of segments", segment0, dmr.getSegments().get(0)); //$NON-NLS-1$
224:                 assertSame("Wrong order of segments", segment1, dmr.getSegments().get(1)); //$NON-NLS-1$
225:                 assertSame("Wrong order of segments", segment2, dmr.getSegments().get(2)); //$NON-NLS-1$
226:                 assertSame("Incorrect root EClass set", rootEClass, dmrSelector.getRootEClass()); //$NON-NLS-1$
227:         }
228:
229:         /** Segments are generated but root EClass cannot be determined. */
230:         @Test
231:         public void generateSegments_noRootEClass() {
232:                 final VTViewTemplate template = VTTemplateFactory.eINSTANCE.createViewTemplate();
233:                 final VTStyle style = VTTemplateFactory.eINSTANCE.createStyle();
234:                 final VTDomainModelReferenceSelector dmrSelector = VTDomainmodelreferenceFactory.eINSTANCE
235:                         .createDomainModelReferenceSelector();
236:                 final VDomainModelReference dmr = VViewFactory.eINSTANCE.createDomainModelReference();
237:                 dmrSelector.setDomainModelReference(dmr);
238:                 style.setSelector(dmrSelector);
239:                 template.getStyles().add(style);
240:
241:                 final EMFFormsSegmentGenerator segmentGenerator = mock(EMFFormsSegmentGenerator.class);
242:                 templateSupplier.setEMFFormsSegmentGenerator(segmentGenerator);
243:                 final List<VDomainModelReferenceSegment> segmentList = new LinkedList<>();
244:                 final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
245:                         .createFeatureDomainModelReferenceSegment();
246:                 segmentList.add(segment);
247:
248:                 when(dmrToRootEClass.getRootEClass(dmr)).thenReturn(Optional.empty());
249:                 when(segmentGenerator.generateSegments(dmr)).thenReturn(segmentList);
250:
251:                 templateSupplier.generateSegments(template);
252:
253:                 assertEquals("No segments should be set", 0, dmr.getSegments().size()); //$NON-NLS-1$
254:                 assertNull("No root EClass should be set", dmrSelector.getRootEClass()); //$NON-NLS-1$
255:         }
256:
257:         /** Root EClass can be determined but no segments are generated. */
258:         @Test
259:         public void generateSegments_noSegmentsGenerated() {
260:                 final VTViewTemplate template = VTTemplateFactory.eINSTANCE.createViewTemplate();
261:                 final VTStyle style = VTTemplateFactory.eINSTANCE.createStyle();
262:                 final VTDomainModelReferenceSelector dmrSelector = VTDomainmodelreferenceFactory.eINSTANCE
263:                         .createDomainModelReferenceSelector();
264:                 final VFeaturePathDomainModelReference featureDmr = VViewFactory.eINSTANCE
265:                         .createFeaturePathDomainModelReference();
266:                 featureDmr.setDomainModelEFeature(EcorePackage.Literals.ENAMED_ELEMENT__NAME);
267:                 dmrSelector.setDomainModelReference(featureDmr);
268:                 style.setSelector(dmrSelector);
269:                 template.getStyles().add(style);
270:
271:                 when(dmrToRootEClass.getRootEClass(any())).thenReturn(Optional.of(mock(EClass.class)));
272:                 final EMFFormsSegmentGenerator segmentGenerator = mock(EMFFormsSegmentGenerator.class);
273:                 when(segmentGenerator.generateSegments(featureDmr)).thenReturn(Collections.emptyList());
274:                 templateSupplier.setEMFFormsSegmentGenerator(segmentGenerator);
275:
276:                 templateSupplier.generateSegments(template);
277:
278:                 assertEquals("Wrong number of generated segments", 0, featureDmr.getSegments().size()); //$NON-NLS-1$
279:                 assertNull("No root EClass should be set if no segments could be generated", dmrSelector.getRootEClass()); //$NON-NLS-1$
280:         }
281:
282:         @Test
283:         public void generateSegments_dmrWithExistingSegments() {
284:                 final VTViewTemplate template = VTTemplateFactory.eINSTANCE.createViewTemplate();
285:                 final VTStyle style = VTTemplateFactory.eINSTANCE.createStyle();
286:                 final VTDomainModelReferenceSelector dmrSelector = VTDomainmodelreferenceFactory.eINSTANCE
287:                         .createDomainModelReferenceSelector();
288:                 final VFeaturePathDomainModelReference featureDmr = VViewFactory.eINSTANCE
289:                         .createFeaturePathDomainModelReference();
290:                 featureDmr.setDomainModelEFeature(EcorePackage.Literals.ENAMED_ELEMENT__NAME);
291:                 final VFeatureDomainModelReferenceSegment existingSegment = VViewFactory.eINSTANCE
292:                         .createFeatureDomainModelReferenceSegment();
293:                 featureDmr.getSegments().add(existingSegment);
294:                 dmrSelector.setDomainModelReference(featureDmr);
295:                 dmrSelector.setRootEClass(EcorePackage.Literals.ENAMED_ELEMENT);
296:                 style.setSelector(dmrSelector);
297:                 template.getStyles().add(style);
298:
299:                 final EMFFormsSegmentGenerator segmentGenerator = mock(EMFFormsSegmentGenerator.class);
300:                 templateSupplier.setEMFFormsSegmentGenerator(segmentGenerator);
301:
302:                 templateSupplier.generateSegments(template);
303:
304:                 verify(segmentGenerator, never()).generateSegments(any(VDomainModelReference.class));
305:                 assertEquals("Wrong number of segments", 1, featureDmr.getSegments().size()); //$NON-NLS-1$
306:                 assertSame("Wrong segment", existingSegment, featureDmr.getSegments().get(0)); //$NON-NLS-1$
307:                 assertSame("Incorrect root EClass set", EcorePackage.Literals.ENAMED_ELEMENT, dmrSelector.getRootEClass()); //$NON-NLS-1$
308:         }
309:
310:         private static VTStyle mockStyle(double specificity) {
311:                 final VTStyle style = mock(VTStyle.class);
312:                 final VTStyleSelector styleSelector = mock(VTStyleSelector.class);
313:                 when(style.getSelector()).thenReturn(styleSelector);
314:
315:                 when(styleSelector.isApplicable(isNull(VElement.class), isNull(ViewModelContext.class))).thenReturn(
316:                         VTStyleSelector.NOT_APPLICABLE);
317:                 when(styleSelector.isApplicable(isNull(VElement.class), notNull(ViewModelContext.class))).thenReturn(
318:                         VTStyleSelector.NOT_APPLICABLE);
319:                 when(styleSelector.isApplicable(notNull(VElement.class), isNull(ViewModelContext.class))).thenReturn(
320:                         VTStyleSelector.NOT_APPLICABLE);
321:                 when(styleSelector.isApplicable(notNull(VElement.class), notNull(ViewModelContext.class))).thenReturn(
322:                         specificity);
323:
324:                 final VTStyleProperty styleProperty = mock(VTStyleProperty.class);
325:                 final EList<VTStyleProperty> properties = new BasicEList<VTStyleProperty>();
326:                 properties.add(styleProperty);
327:
328:                 when(style.getProperties()).thenReturn(properties);
329:
330:                 return style;
331:         }
332:
333:         private static List<VTViewTemplate> createListWithTwoTemplates() {
334:                 final VTViewTemplate viewTemplate1 = mock(VTViewTemplate.class);
335:                 final EList<VTStyle> styles1 = new BasicEList<VTStyle>();
336:                 when(viewTemplate1.getStyles()).thenReturn(styles1);
337:                 final VTViewTemplate viewTemplate2 = mock(VTViewTemplate.class);
338:                 final EList<VTStyle> styles2 = new BasicEList<VTStyle>();
339:                 when(viewTemplate2.getStyles()).thenReturn(styles2);
340:
341:                 final ArrayList<VTViewTemplate> list = new ArrayList<VTViewTemplate>();
342:                 list.add(viewTemplate1);
343:                 list.add(viewTemplate2);
344:                 return list;
345:         }
346: }