Skip to content

Package: IndexDmrSegmentGenerator_Test$IndexDmrSubType

IndexDmrSegmentGenerator_Test$IndexDmrSubType

nameinstructionbranchcomplexitylinemethod
eClass()
M: 0 C: 13
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.index;
15:
16: import static org.junit.Assert.assertEquals;
17: import static org.junit.Assert.assertNotNull;
18: import static org.junit.Assert.assertTrue;
19: import static org.mockito.Matchers.any;
20: import static org.mockito.Mockito.atLeastOnce;
21: import static org.mockito.Mockito.mock;
22: import static org.mockito.Mockito.never;
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.ecore.EClass;
32: import org.eclipse.emf.ecore.EcoreFactory;
33: import org.eclipse.emf.ecp.view.spi.indexdmr.model.VIndexDomainModelReference;
34: import org.eclipse.emf.ecp.view.spi.indexdmr.model.VIndexdmrFactory;
35: import org.eclipse.emf.ecp.view.spi.indexdmr.model.VIndexdmrPackage;
36: import org.eclipse.emf.ecp.view.spi.indexdmr.model.impl.VIndexDomainModelReferenceImpl;
37: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
38: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReferenceSegment;
39: import org.eclipse.emf.ecp.view.spi.model.VFeatureDomainModelReferenceSegment;
40: import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
41: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
42: import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.TestPackage;
43: import org.eclipse.emfforms.spi.common.report.AbstractReport;
44: import org.eclipse.emfforms.spi.common.report.ReportService;
45: import org.eclipse.emfforms.spi.core.services.segments.DmrSegmentGenerator;
46: import org.eclipse.emfforms.spi.core.services.segments.EMFFormsSegmentGenerator;
47: import org.eclipse.emfforms.spi.view.indexsegment.model.VIndexDomainModelReferenceSegment;
48: import org.junit.Before;
49: import org.junit.Test;
50:
51: /**
52: * Unit tests for {@link IndexDmrSegmentGenerator}.
53: *
54: * @author Lucas Koehler
55: *
56: */
57: @SuppressWarnings("restriction")
58: public class IndexDmrSegmentGenerator_Test {
59:
60:         private IndexDmrSegmentGenerator generator;
61:         private EMFFormsSegmentGenerator emfFormsSegmentGenerator;
62:         private ReportService reportService;
63:
64:         @Before
65:         public void setUp() {
66:                 generator = new IndexDmrSegmentGenerator();
67:                 emfFormsSegmentGenerator = mock(EMFFormsSegmentGenerator.class);
68:                 // the interface defines that null is never returned
69:                 when(emfFormsSegmentGenerator.generateSegments(any(VDomainModelReference.class)))
70:                         .thenReturn(Collections.emptyList());
71:                 generator.setEMFFormsSegmentGenerator(emfFormsSegmentGenerator);
72:                 reportService = mock(ReportService.class);
73:                 generator.setReportService(reportService);
74:         }
75:
76:         @Test(expected = IllegalArgumentException.class)
77:         public void isApplicable_nullDmr() {
78:                 generator.isApplicable(null);
79:         }
80:
81:         @Test
82:         public void isApplicable_indexDmr() {
83:                 final double applicable = generator.isApplicable(VIndexdmrFactory.eINSTANCE.createIndexDomainModelReference());
84:                 assertEquals(5d, applicable, 0d);
85:         }
86:
87:         @Test
88:         public void isApplicable_unrelatedDmr() {
89:                 final double applicable = generator.isApplicable(mock(VDomainModelReference.class));
90:                 assertEquals(DmrSegmentGenerator.NOT_APPLICABLE, applicable, 0d);
91:         }
92:
93:         @Test
94:         public void isApplicable_subtypeOfIndexDmr() {
95:                 final IndexDmrSubType subtypeDmr = new IndexDmrSubType();
96:                 final double applicable = generator.isApplicable(subtypeDmr);
97:                 assertEquals(DmrSegmentGenerator.NOT_APPLICABLE, applicable, 0d);
98:         }
99:
100:         @Test(expected = IllegalArgumentException.class)
101:         public void generateSegments_nullDmr() {
102:                 generator.generateSegments(null);
103:         }
104:
105:         // In this test case, the index dmr uses a prefix dmr
106:         @Test
107:         public void generateSegments_prefixDmr() {
108:                 final int index = 3;
109:                 final VIndexDomainModelReference indexDmr = VIndexdmrFactory.eINSTANCE.createIndexDomainModelReference();
110:                 indexDmr.setIndex(index);
111:                 final VDomainModelReference prefixDmr = mockValidPrefixDmr(indexDmr);
112:                 final VDomainModelReference targetDmr = mockValidTargetDmr(indexDmr);
113:
114:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(indexDmr);
115:
116:                 assertNotNull(result);
117:                 assertEquals("The generated segment list has an incorrect number of segments", 4, result.size()); //$NON-NLS-1$
118:
119:                 assertFeatureSegment(result.get(0), TestPackage.Literals.A__B.getName());
120:
121:                 assertTrue(result.get(1) instanceof VIndexDomainModelReferenceSegment);
122:                 final VIndexDomainModelReferenceSegment seg1 = (VIndexDomainModelReferenceSegment) result.get(1);
123:                 assertEquals(index, seg1.getIndex());
124:                 assertEquals(TestPackage.Literals.B__CLIST.getName(), seg1.getDomainModelFeature());
125:
126:                 assertFeatureSegment(result.get(2), TestPackage.Literals.C__D.getName());
127:                 assertFeatureSegment(result.get(3), TestPackage.Literals.D__X.getName());
128:
129:                 verify(emfFormsSegmentGenerator, times(1)).generateSegments(prefixDmr);
130:                 verify(emfFormsSegmentGenerator, times(1)).generateSegments(targetDmr);
131:                 verify(reportService, never()).report(any(AbstractReport.class));
132:         }
133:
134:         // In this test case, the index dmr does not use a prefix dmr but specifies the path to the list itself
135:         @Test
136:         public void generateSegments_prefixPath() {
137:                 final int index = 3;
138:                 final VIndexDomainModelReference indexDmr = VIndexdmrFactory.eINSTANCE.createIndexDomainModelReference();
139:                 indexDmr.setIndex(index);
140:                 indexDmr.getDomainModelEReferencePath().add(TestPackage.Literals.A__B);
141:                 indexDmr.setDomainModelEFeature(TestPackage.Literals.B__CLIST);
142:                 final VDomainModelReference targetDmr = mockValidTargetDmr(indexDmr);
143:
144:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(indexDmr);
145:
146:                 assertNotNull(result);
147:                 assertEquals("The generated segment list has an incorrect number of segments", 4, result.size()); //$NON-NLS-1$
148:
149:                 assertFeatureSegment(result.get(0), TestPackage.Literals.A__B.getName());
150:
151:                 assertTrue(result.get(1) instanceof VIndexDomainModelReferenceSegment);
152:                 final VIndexDomainModelReferenceSegment seg1 = (VIndexDomainModelReferenceSegment) result.get(1);
153:                 assertEquals(index, seg1.getIndex());
154:                 assertEquals(TestPackage.Literals.B__CLIST.getName(), seg1.getDomainModelFeature());
155:
156:                 assertFeatureSegment(result.get(2), TestPackage.Literals.C__D.getName());
157:                 assertFeatureSegment(result.get(3), TestPackage.Literals.D__X.getName());
158:
159:                 verify(emfFormsSegmentGenerator, times(1)).generateSegments(targetDmr);
160:                 verify(reportService, never()).report(any(AbstractReport.class));
161:         }
162:
163:         @Test
164:         public void generateSegments_emptyDmr() {
165:                 final VIndexDomainModelReference dmr = VIndexdmrFactory.eINSTANCE.createIndexDomainModelReference();
166:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(dmr);
167:                 assertNotNull(result);
168:                 assertTrue(result.isEmpty());
169:                 verify(reportService, atLeastOnce()).report(any(AbstractReport.class));
170:         }
171:
172:         /* noPrefix means that the index dmr neither has a prefix dmr nor a domain model e feature. */
173:         @Test
174:         public void generateSegments_noPrefix() {
175:                 final VIndexDomainModelReference indexDmr = VIndexdmrFactory.eINSTANCE.createIndexDomainModelReference();
176:                 mockValidTargetDmr(indexDmr);
177:
178:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(indexDmr);
179:
180:                 assertNotNull(result);
181:                 assertTrue(result.isEmpty());
182:                 verify(reportService, atLeastOnce()).report(any(AbstractReport.class));
183:         }
184:
185:         @Test
186:         public void generateSegments_noSegmentsForPrefixDmr() {
187:                 final VIndexDomainModelReference indexDmr = VIndexdmrFactory.eINSTANCE.createIndexDomainModelReference();
188:
189:                 final VDomainModelReference prefixDmr = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
190:                 when(emfFormsSegmentGenerator.generateSegments(prefixDmr)).thenReturn(Collections.emptyList());
191:                 indexDmr.setPrefixDMR(prefixDmr);
192:
193:                 mockValidTargetDmr(indexDmr);
194:
195:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(indexDmr);
196:
197:                 assertNotNull(result);
198:                 assertTrue(result.isEmpty());
199:                 verify(reportService, atLeastOnce()).report(any(AbstractReport.class));
200:         }
201:
202:         private void assertFeatureSegment(VDomainModelReferenceSegment segment, String expectedDomainModelFeature) {
203:                 assertTrue(segment instanceof VFeatureDomainModelReferenceSegment);
204:                 final VFeatureDomainModelReferenceSegment featureSegment = (VFeatureDomainModelReferenceSegment) segment;
205:                 assertEquals("Segment does not reference the expected feature.", expectedDomainModelFeature, //$NON-NLS-1$
206:                         featureSegment.getDomainModelFeature());
207:         }
208:
209:         /**
210:          * Mocks a target dmr, configures the emfFormsSegmentGenerator, and adds the dmr to the given index dmr
211:          *
212:          * @param indexDmr The index dmr to add the mocked, valid target dmr to
213:          * @return the created target dmr (it already has been added to the given index dmr)
214:          */
215:         private VDomainModelReference mockValidTargetDmr(final VIndexDomainModelReference indexDmr) {
216:                 // Need to create a real instance because otherwise the add to a real index dmr will fail with a class cast
217:                 // exception
218:                 final VDomainModelReference targetDmr = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
219:                 indexDmr.setTargetDMR(targetDmr);
220:                 final List<VDomainModelReferenceSegment> targetSegments = new LinkedList<>();
221:                 final VFeatureDomainModelReferenceSegment segment1 = VViewFactory.eINSTANCE
222:                         .createFeatureDomainModelReferenceSegment();
223:                 segment1.setDomainModelFeature(TestPackage.Literals.C__D.getName());
224:                 final VFeatureDomainModelReferenceSegment segment2 = VViewFactory.eINSTANCE
225:                         .createFeatureDomainModelReferenceSegment();
226:                 segment2.setDomainModelFeature(TestPackage.Literals.D__X.getName());
227:                 targetSegments.add(segment1);
228:                 targetSegments.add(segment2);
229:                 when(emfFormsSegmentGenerator.generateSegments(targetDmr)).thenReturn(targetSegments);
230:                 return targetDmr;
231:         }
232:
233:         /**
234:          * Mocks a prefix dmr, configures the emfFormsSegmentGenerator, and adds the dmr to the given index dmr
235:          *
236:          * @param indexDmr The index dmr to add the mocked, valid target dmr to
237:          * @return the created prefix dmr (it already has been added to the given index dmr)
238:          */
239:         private VDomainModelReference mockValidPrefixDmr(final VIndexDomainModelReference indexDmr) {
240:                 // Need to create a real instance because otherwise the add to a real index dmr will fail with a class cast
241:                 // exception
242:                 final VDomainModelReference prefixDmr = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
243:                 indexDmr.setPrefixDMR(prefixDmr);
244:                 final List<VDomainModelReferenceSegment> prefixSegments = new LinkedList<>();
245:                 final VFeatureDomainModelReferenceSegment segment1 = VViewFactory.eINSTANCE
246:                         .createFeatureDomainModelReferenceSegment();
247:                 final VFeatureDomainModelReferenceSegment segment2 = VViewFactory.eINSTANCE
248:                         .createFeatureDomainModelReferenceSegment();
249:                 prefixSegments.add(segment1);
250:                 prefixSegments.add(segment2);
251:                 segment1.setDomainModelFeature(TestPackage.Literals.A__B.getName());
252:                 segment2.setDomainModelFeature(TestPackage.Literals.B__CLIST.getName());
253:                 when(emfFormsSegmentGenerator.generateSegments(prefixDmr)).thenReturn(prefixSegments);
254:                 return prefixDmr;
255:         }
256:
257:         @Test
258:         public void generateSegments_noTargetDmr() {
259:                 final VIndexDomainModelReference indexDmr = VIndexdmrFactory.eINSTANCE.createIndexDomainModelReference();
260:                 mockValidPrefixDmr(indexDmr);
261:
262:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(indexDmr);
263:
264:                 assertNotNull(result);
265:                 assertTrue(result.isEmpty());
266:                 verify(reportService, atLeastOnce()).report(any(AbstractReport.class));
267:         }
268:
269:         @Test
270:         public void generateSegments_emptyTargetDmr() {
271:                 final VIndexDomainModelReference dmr = VIndexdmrFactory.eINSTANCE.createIndexDomainModelReference();
272:                 final VFeaturePathDomainModelReference targetDmr = VViewFactory.eINSTANCE
273:                         .createFeaturePathDomainModelReference();
274:                 dmr.setTargetDMR(targetDmr);
275:
276:                 final List<VDomainModelReferenceSegment> result = generator.generateSegments(dmr);
277:
278:                 assertNotNull(result);
279:                 assertTrue(result.isEmpty());
280:                 verify(reportService, atLeastOnce()).report(any(AbstractReport.class));
281:         }
282:
283:         @Test(expected = IllegalArgumentException.class)
284:         public void generateSegments_unrelatedDmr() {
285:                 generator.generateSegments(mock(VDomainModelReference.class));
286:         }
287:
288:         @Test(expected = IllegalArgumentException.class)
289:         public void generateSegments_subtypeOfFeaturePathDmr() {
290:                 final IndexDmrSubType subtypeDmr = new IndexDmrSubType();
291:                 generator.generateSegments(subtypeDmr);
292:         }
293:
294:         private static class IndexDmrSubType extends VIndexDomainModelReferenceImpl {
295:                 @Override
296:                 public EClass eClass() {
297:                         final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
298:                         eClass.setName("IndexDmrSubType"); //$NON-NLS-1$
299:                         eClass.getESuperTypes().add(VIndexdmrPackage.Literals.INDEX_DOMAIN_MODEL_REFERENCE);
300:                         return eClass;
301:                 }
302:         }
303: }