Skip to content

Package: TableDmrSegmentGenerator_Test

TableDmrSegmentGenerator_Test

nameinstructionbranchcomplexitylinemethod
TableDmrSegmentGenerator_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%
generateSegments_emptyDmr()
M: 0 C: 24
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 7
100%
M: 0 C: 1
100%
generateSegments_noInnerDmr()
M: 0 C: 201
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 50
100%
M: 0 C: 1
100%
generateSegments_nullDmr()
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
generateSegments_unrelatedDmr()
M: 8 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
generateSegments_withInnerDmr()
M: 0 C: 206
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 54
100%
M: 0 C: 1
100%
isApplicable_featurePathDmr()
M: 0 C: 11
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
isApplicable_nullDmr()
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
isApplicable_unrelatedDmr()
M: 0 C: 12
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
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%

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.multi;
15:
16: import static org.junit.Assert.assertEquals;
17: import static org.junit.Assert.assertNotNull;
18: import static org.junit.Assert.assertSame;
19: import static org.junit.Assert.assertTrue;
20: import static org.mockito.Matchers.any;
21: import static org.mockito.Matchers.isA;
22: import static org.mockito.Mockito.mock;
23: import static org.mockito.Mockito.times;
24: import static org.mockito.Mockito.verify;
25: import static org.mockito.Mockito.when;
26:
27: import java.util.Collections;
28: import java.util.LinkedList;
29: import java.util.List;
30:
31: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
32: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReferenceSegment;
33: import org.eclipse.emf.ecp.view.spi.model.VFeatureDomainModelReferenceSegment;
34: import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
35: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
36: import org.eclipse.emf.ecp.view.spi.model.VViewPackage;
37: import org.eclipse.emf.ecp.view.spi.table.model.VTableDomainModelReference;
38: import org.eclipse.emf.ecp.view.spi.table.model.VTableFactory;
39: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.TestPackage;
40: import org.eclipse.emfforms.spi.core.services.segments.DmrSegmentGenerator;
41: import org.eclipse.emfforms.spi.core.services.segments.EMFFormsSegmentGenerator;
42: import org.eclipse.emfforms.view.spi.multisegment.model.VMultiDomainModelReferenceSegment;
43: import org.eclipse.emfforms.view.spi.multisegment.model.VMultisegmentPackage;
44: import org.junit.Before;
45: import org.junit.Test;
46:
47: /**
48: * Unit tests for {@link TableDmrSegmentGenerator}.
49: *
50: * @author Lucas Koehler
51: *
52: */
53: public class TableDmrSegmentGenerator_Test {
54:
55:         // FIXME adapt tests to child dmr generation
56:         private TableDmrSegmentGenerator generator;
57:         private EMFFormsSegmentGenerator emfFormsSegmentGenerator;
58:
59:         @Before
60:         public void setUp() {
61:                 generator = new TableDmrSegmentGenerator();
62:                 emfFormsSegmentGenerator = mock(EMFFormsSegmentGenerator.class);
63:                 generator.setEMFFormsSegmentGenerator(emfFormsSegmentGenerator);
64:         }
65:
66:         @Test(expected = IllegalArgumentException.class)
67:         public void isApplicable_nullDmr() {
68:                 generator.isApplicable(null);
69:         }
70:
71:         @Test
72:         public void isApplicable_featurePathDmr() {
73:                 final double applicable = generator
74:                         .isApplicable(VTableFactory.eINSTANCE.createTableDomainModelReference());
75:                 assertEquals(5d, applicable, 0d);
76:         }
77:
78:         @Test
79:         public void isApplicable_unrelatedDmr() {
80:                 final double applicable = generator.isApplicable(mock(VDomainModelReference.class));
81:                 assertEquals(DmrSegmentGenerator.NOT_APPLICABLE, applicable, 0d);
82:         }
83:
84:         @Test(expected = IllegalArgumentException.class)
85:         public void generateSegments_nullDmr() {
86:                 generator.generateSegments(null);
87:         }
88:
89:         @Test
90:         public void generateSegments_withInnerDmr() {
91:                 final VFeaturePathDomainModelReference innerDmr = VViewFactory.eINSTANCE
92:                         .createFeaturePathDomainModelReference();
93:                 innerDmr.getDomainModelEReferencePath().add(TestPackage.Literals.A__B);
94:                 innerDmr.setDomainModelEFeature(TestPackage.Literals.B__CLIST);
95:
96:                 // mock EMFFormsSegmentGenerator
97:                 final LinkedList<VDomainModelReferenceSegment> innerSegments = new LinkedList<>();
98:                 final VFeatureDomainModelReferenceSegment innerSegment1 = VViewFactory.eINSTANCE
99:                         .createFeatureDomainModelReferenceSegment();
100:                 innerSegment1.setDomainModelFeature(TestPackage.Literals.A__B.getName());
101:                 final VFeatureDomainModelReferenceSegment innerSegment2 = VViewFactory.eINSTANCE
102:                         .createFeatureDomainModelReferenceSegment();
103:                 innerSegment2.setDomainModelFeature(TestPackage.Literals.B__CLIST.getName());
104:                 innerSegments.add(innerSegment1);
105:                 innerSegments.add(innerSegment2);
106:                 when(emfFormsSegmentGenerator.generateSegments(innerDmr))
107:                         .thenReturn(innerSegments);
108:                 generator.setEMFFormsSegmentGenerator(emfFormsSegmentGenerator);
109:
110:                 final VFeaturePathDomainModelReference columnDmr1 = VViewFactory.eINSTANCE
111:                         .createFeaturePathDomainModelReference();
112:                 columnDmr1.setDomainModelEFeature(TestPackage.Literals.C__A);
113:                 final VFeatureDomainModelReferenceSegment columnDmr1Segment = VViewFactory.eINSTANCE
114:                         .createFeatureDomainModelReferenceSegment();
115:                 when(emfFormsSegmentGenerator.generateSegments(columnDmr1))
116:                         .thenReturn(Collections.singletonList(columnDmr1Segment));
117:
118:                 final VFeaturePathDomainModelReference columnDmr2 = VViewFactory.eINSTANCE
119:                         .createFeaturePathDomainModelReference();
120:                 columnDmr2.setDomainModelEFeature(TestPackage.Literals.C__D);
121:                 final VFeatureDomainModelReferenceSegment columnDmr2Segment = VViewFactory.eINSTANCE
122:                         .createFeatureDomainModelReferenceSegment();
123:                 when(emfFormsSegmentGenerator.generateSegments(columnDmr2))
124:                         .thenReturn(Collections.singletonList(columnDmr2Segment));
125:
126:                 final VTableDomainModelReference tableDmr = VTableFactory.eINSTANCE.createTableDomainModelReference();
127:                 tableDmr.setDomainModelReference(innerDmr);
128:                 tableDmr.getColumnDomainModelReferences().add(columnDmr1);
129:                 tableDmr.getColumnDomainModelReferences().add(columnDmr2);
130:
131:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(tableDmr);
132:
133:                 assertNotNull(result);
134:                 assertEquals(2, result.size());
135:                 // 3 invocations: once for the table dmr and once for each of the two columns
136:                 verify(emfFormsSegmentGenerator, times(3)).generateSegments(isA(VFeaturePathDomainModelReference.class));
137:
138:                 assertEquals(VViewPackage.Literals.FEATURE_DOMAIN_MODEL_REFERENCE_SEGMENT, result.get(0).eClass());
139:                 final VFeatureDomainModelReferenceSegment segment1 = (VFeatureDomainModelReferenceSegment) result.get(0);
140:                 assertEquals(TestPackage.Literals.A__B.getName(), segment1.getDomainModelFeature());
141:
142:                 assertEquals(VMultisegmentPackage.Literals.MULTI_DOMAIN_MODEL_REFERENCE_SEGMENT, result.get(1).eClass());
143:                 final VMultiDomainModelReferenceSegment multiSegment = (VMultiDomainModelReferenceSegment) result.get(1);
144:                 assertEquals(TestPackage.Literals.B__CLIST.getName(), multiSegment.getDomainModelFeature());
145:                 assertEquals(2, multiSegment.getChildDomainModelReferences().size());
146:
147:                 // Verify child dmr generation
148:                 final VDomainModelReference childDmr1 = multiSegment.getChildDomainModelReferences().get(0);
149:                 final VDomainModelReference childDmr2 = multiSegment.getChildDomainModelReferences().get(1);
150:                 assertSame(VViewPackage.Literals.DOMAIN_MODEL_REFERENCE, childDmr1.eClass());
151:                 assertSame(VViewPackage.Literals.DOMAIN_MODEL_REFERENCE, childDmr2.eClass());
152:                 assertSame(columnDmr1Segment, childDmr1.getSegments().get(0));
153:                 assertSame(columnDmr2Segment, childDmr2.getSegments().get(0));
154:
155:                 // Column dmrs must be re-generated and "stolen" from the table dmr
156:                 assertSame(tableDmr, columnDmr1.eContainer());
157:                 assertSame(tableDmr, columnDmr2.eContainer());
158:         }
159:
160:         @Test
161:         public void generateSegments_noInnerDmr() {
162:                 final VTableDomainModelReference tableDmr = VTableFactory.eINSTANCE.createTableDomainModelReference();
163:                 tableDmr.getDomainModelEReferencePath().add(TestPackage.Literals.A__B);
164:                 tableDmr.setDomainModelEFeature(TestPackage.Literals.B__CLIST);
165:
166:                 // mock EMFFormsSegmentGenerator
167:                 final LinkedList<VDomainModelReferenceSegment> innerSegments = new LinkedList<>();
168:                 final VFeatureDomainModelReferenceSegment innerSegment1 = VViewFactory.eINSTANCE
169:                         .createFeatureDomainModelReferenceSegment();
170:                 innerSegment1.setDomainModelFeature(TestPackage.Literals.A__B.getName());
171:                 final VFeatureDomainModelReferenceSegment innerSegment2 = VViewFactory.eINSTANCE
172:                         .createFeatureDomainModelReferenceSegment();
173:                 innerSegment2.setDomainModelFeature(TestPackage.Literals.B__CLIST.getName());
174:                 innerSegments.add(innerSegment1);
175:                 innerSegments.add(innerSegment2);
176:                 when(emfFormsSegmentGenerator.generateSegments(any())).thenReturn(innerSegments);
177:                 generator.setEMFFormsSegmentGenerator(emfFormsSegmentGenerator);
178:
179:                 final VFeaturePathDomainModelReference columnDmr1 = VViewFactory.eINSTANCE
180:                         .createFeaturePathDomainModelReference();
181:                 columnDmr1.setDomainModelEFeature(TestPackage.Literals.C__A);
182:                 final VFeatureDomainModelReferenceSegment columnDmr1Segment = VViewFactory.eINSTANCE
183:                         .createFeatureDomainModelReferenceSegment();
184:                 when(emfFormsSegmentGenerator.generateSegments(columnDmr1))
185:                         .thenReturn(Collections.singletonList(columnDmr1Segment));
186:
187:                 final VFeaturePathDomainModelReference columnDmr2 = VViewFactory.eINSTANCE
188:                         .createFeaturePathDomainModelReference();
189:                 columnDmr2.setDomainModelEFeature(TestPackage.Literals.C__D);
190:                 final VFeatureDomainModelReferenceSegment columnDmr2Segment = VViewFactory.eINSTANCE
191:                         .createFeatureDomainModelReferenceSegment();
192:                 when(emfFormsSegmentGenerator.generateSegments(columnDmr2))
193:                         .thenReturn(Collections.singletonList(columnDmr2Segment));
194:
195:                 tableDmr.getColumnDomainModelReferences().add(columnDmr1);
196:                 tableDmr.getColumnDomainModelReferences().add(columnDmr2);
197:
198:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(tableDmr);
199:
200:                 assertNotNull(result);
201:                 assertEquals(2, result.size());
202:                 // 3 invocations: once for the table dmr and once for each of the two columns
203:                 verify(emfFormsSegmentGenerator, times(3)).generateSegments(isA(VFeaturePathDomainModelReference.class));
204:
205:                 assertEquals(VViewPackage.Literals.FEATURE_DOMAIN_MODEL_REFERENCE_SEGMENT, result.get(0).eClass());
206:                 final VFeatureDomainModelReferenceSegment segment1 = (VFeatureDomainModelReferenceSegment) result.get(0);
207:                 assertEquals(TestPackage.Literals.A__B.getName(), segment1.getDomainModelFeature());
208:
209:                 assertEquals(VMultisegmentPackage.Literals.MULTI_DOMAIN_MODEL_REFERENCE_SEGMENT, result.get(1).eClass());
210:                 final VMultiDomainModelReferenceSegment multiSegment = (VMultiDomainModelReferenceSegment) result.get(1);
211:                 assertEquals(TestPackage.Literals.B__CLIST.getName(), multiSegment.getDomainModelFeature());
212:                 assertEquals(2, multiSegment.getChildDomainModelReferences().size());
213:
214:                 // Verify child dmr generation
215:                 final VDomainModelReference childDmr1 = multiSegment.getChildDomainModelReferences().get(0);
216:                 final VDomainModelReference childDmr2 = multiSegment.getChildDomainModelReferences().get(1);
217:                 assertSame(VViewPackage.Literals.DOMAIN_MODEL_REFERENCE, childDmr1.eClass());
218:                 assertSame(VViewPackage.Literals.DOMAIN_MODEL_REFERENCE, childDmr2.eClass());
219:                 assertSame(columnDmr1Segment, childDmr1.getSegments().get(0));
220:                 assertSame(columnDmr2Segment, childDmr2.getSegments().get(0));
221:
222:                 // Column dmrs must be re-generated and "stolen" from the table dmr
223:                 assertSame(tableDmr, columnDmr1.eContainer());
224:                 assertSame(tableDmr, columnDmr2.eContainer());
225:         }
226:
227:         @Test
228:         public void generateSegments_emptyDmr() {
229:                 when(emfFormsSegmentGenerator.generateSegments(any(VDomainModelReference.class)))
230:                         .thenReturn(Collections.emptyList());
231:                 final VTableDomainModelReference dmr = VTableFactory.eINSTANCE.createTableDomainModelReference();
232:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(dmr);
233:                 assertNotNull(result);
234:                 assertTrue(result.isEmpty());
235:         }
236:
237:         @Test(expected = IllegalArgumentException.class)
238:         public void generateSegments_unrelatedDmr() {
239:                 generator.generateSegments(mock(VDomainModelReference.class));
240:         }
241:
242: }