Skip to content

Package: DmrToSegmentsViewService_Test

DmrToSegmentsViewService_Test

nameinstructionbranchcomplexitylinemethod
DmrToSegmentsViewService_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%
initialSegmentCreation()
M: 0 C: 129
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 30
100%
M: 0 C: 1
100%
segmentCreationForAddedDmrs()
M: 0 C: 116
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 26
100%
M: 0 C: 1
100%
setUp()
M: 0 C: 33
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 6
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.segments;
15:
16: import static org.junit.Assert.assertEquals;
17: import static org.junit.Assert.assertSame;
18: import static org.mockito.Matchers.any;
19: import static org.mockito.Mockito.mock;
20: import static org.mockito.Mockito.times;
21: import static org.mockito.Mockito.verify;
22: import static org.mockito.Mockito.when;
23:
24: import java.util.LinkedList;
25: import java.util.List;
26:
27: import org.eclipse.emf.ecp.view.spi.model.VControl;
28: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
29: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReferenceSegment;
30: import org.eclipse.emf.ecp.view.spi.model.VFeatureDomainModelReferenceSegment;
31: import org.eclipse.emf.ecp.view.spi.model.VView;
32: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
33: import org.eclipse.emf.ecp.view.spi.vertical.model.VVerticalFactory;
34: import org.eclipse.emf.ecp.view.spi.vertical.model.VVerticalLayout;
35: import org.eclipse.emfforms.spi.core.services.segments.EMFFormsSegmentGenerator;
36: import org.eclipse.emfforms.spi.core.services.view.EMFFormsViewContext;
37: import org.junit.Before;
38: import org.junit.Test;
39:
40: /**
41: * Unit tests for {@link DmrToSegmentsViewService}.
42: *
43: * @author Lucas Koehler
44: *
45: */
46: public class DmrToSegmentsViewService_Test {
47:
48:         private EMFFormsSegmentGenerator segmentGenerator;
49:         private VView view;
50:         private EMFFormsViewContext viewContext;
51:
52:         @Before
53:         public void setUp() {
54:                 segmentGenerator = mock(EMFFormsSegmentGenerator.class);
55:                 view = VViewFactory.eINSTANCE.createView();
56:
57:                 viewContext = mock(EMFFormsViewContext.class);
58:                 when(viewContext.getService(EMFFormsSegmentGenerator.class)).thenReturn(segmentGenerator);
59:                 when(viewContext.getViewModel()).thenReturn(view);
60:         }
61:
62:         @Test
63:         public void initialSegmentCreation() {
64:                 final VDomainModelReference dmr = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
65:                 final VDomainModelReference dmrWithSegments = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
66:
67:                 // Add controls with dmrs, one control is cascaded in a vertical layout
68:                 final VControl control1 = VViewFactory.eINSTANCE.createControl();
69:                 final VControl control2 = VViewFactory.eINSTANCE.createControl();
70:                 final VVerticalLayout verticalLayout = VVerticalFactory.eINSTANCE.createVerticalLayout();
71:                 control1.setDomainModelReference(dmr);
72:                 control2.setDomainModelReference(dmrWithSegments);
73:                 verticalLayout.getChildren().add(control1);
74:                 view.getChildren().add(verticalLayout);
75:                 view.getChildren().add(control2);
76:
77:                 // Configure segments and the segment generator
78:                 final VFeatureDomainModelReferenceSegment existingSegment = VViewFactory.eINSTANCE
79:                         .createFeatureDomainModelReferenceSegment();
80:                 dmrWithSegments.getSegments().add(existingSegment);
81:                 final VDomainModelReferenceSegment generatedSegment1 = VViewFactory.eINSTANCE
82:                         .createFeatureDomainModelReferenceSegment();
83:                 final VDomainModelReferenceSegment generatedSegment2 = VViewFactory.eINSTANCE
84:                         .createFeatureDomainModelReferenceSegment();
85:                 final List<VDomainModelReferenceSegment> list = new LinkedList<>();
86:                 list.add(generatedSegment1);
87:                 list.add(generatedSegment2);
88:                 when(segmentGenerator.generateSegments(any(VDomainModelReference.class))).thenReturn(list);
89:
90:                 // Create service and thereby trigger the initial segment generation
91:                 new DmrToSegmentsViewService(viewContext);
92:
93:                 // The generated segments were added to the dmr without segments
94:                 assertEquals(2, dmr.getSegments().size());
95:                 assertSame(generatedSegment1, dmr.getSegments().get(0));
96:                 assertSame(generatedSegment2, dmr.getSegments().get(1));
97:
98:                 // Segments of the dmr with existing segments were not changed
99:                 assertEquals(1, dmrWithSegments.getSegments().size());
100:                 assertSame(existingSegment, dmrWithSegments.getSegments().get(0));
101:
102:                 // Only once for the dmr without segments
103:                 verify(segmentGenerator, times(1)).generateSegments(any(VDomainModelReference.class));
104:                 verify(segmentGenerator, times(1)).generateSegments(dmr);
105:         }
106:
107:         /**
108:          * Tests that Segments are also generated for DMRs that are added to the view model after the service has been
109:          * created.
110:          */
111:         @Test
112:         public void segmentCreationForAddedDmrs() {
113:                 final DmrToSegmentsViewService service = new DmrToSegmentsViewService(viewContext);
114:                 // The service registers itself as a view change listener
115:                 verify(viewContext).registerViewChangeListener(service);
116:
117:                 final VDomainModelReferenceSegment generatedSegment1 = VViewFactory.eINSTANCE
118:                         .createFeatureDomainModelReferenceSegment();
119:                 final VDomainModelReferenceSegment generatedSegment2 = VViewFactory.eINSTANCE
120:                         .createFeatureDomainModelReferenceSegment();
121:                 final List<VDomainModelReferenceSegment> list = new LinkedList<>();
122:                 list.add(generatedSegment1);
123:                 list.add(generatedSegment2);
124:                 when(segmentGenerator.generateSegments(any(VDomainModelReference.class))).thenReturn(list);
125:
126:                 final VDomainModelReference dmr = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
127:
128:                 service.notifyAdd(dmr);
129:
130:                 // The generated segments were added to the dmr without segments
131:                 assertEquals(2, dmr.getSegments().size());
132:                 assertSame(generatedSegment1, dmr.getSegments().get(0));
133:                 assertSame(generatedSegment2, dmr.getSegments().get(1));
134:
135:                 // A control is added
136:                 service.notifyAdd(mock(VControl.class));
137:
138:                 // Add a DMR with existing segments
139:                 final VDomainModelReference dmrWithSegments = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
140:                 final VFeatureDomainModelReferenceSegment existingSegment = VViewFactory.eINSTANCE
141:                         .createFeatureDomainModelReferenceSegment();
142:                 dmrWithSegments.getSegments().add(existingSegment);
143:                 service.notifyAdd(dmrWithSegments);
144:
145:                 // Segments of the dmr with existing segments were not changed
146:                 assertEquals(1, dmrWithSegments.getSegments().size());
147:                 assertSame(existingSegment, dmrWithSegments.getSegments().get(0));
148:
149:                 // The segment generator was queried once for the dmr without segments
150:                 verify(segmentGenerator, times(1)).generateSegments(any(VDomainModelReference.class));
151:                 verify(segmentGenerator, times(1)).generateSegments(dmr);
152:         }
153: }