Skip to content

Package: EMFFormsRendererFactory_Test

EMFFormsRendererFactory_Test

nameinstructionbranchcomplexitylinemethod
EMFFormsRendererFactory_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%
setUp()
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
testAddAdditionalRendererService()
M: 0 C: 70
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 15
100%
M: 0 C: 1
100%
testAddRendererService()
M: 0 C: 49
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
testGetAdditionalRendererInstanceNoFittingServices()
M: 0 C: 59
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 13
100%
M: 0 C: 1
100%
testGetRendererInstanceDifferentPrioSameVElement()
M: 0 C: 94
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
testGetRendererInstanceNoFittingServices()
M: 9 C: 67
88%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 13
87%
M: 0 C: 1
100%
testGetRendererInstanceNoRendererServices()
M: 11 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
testGetRendererInstanceSamePrioDifferentVElement()
M: 0 C: 93
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
testRemoveAdditionalRendererService()
M: 0 C: 28
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
testRemoveRendererService()
M: 11 C: 12
52%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 3
60%
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: * Eugen Neufeld - initial API and implementation
13: * Christian W. Damus - bug 548592
14: ******************************************************************************/
15: package org.eclipse.emfforms.internal.swt.core;
16:
17: import static org.eclipse.emf.ecp.view.test.common.spi.EMFMocking.eMock;
18: import static org.junit.Assert.assertEquals;
19: import static org.mockito.Mockito.mock;
20: import static org.mockito.Mockito.when;
21:
22: import java.util.ArrayList;
23: import java.util.Collection;
24: import java.util.Collections;
25:
26: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
27: import org.eclipse.emf.ecp.view.spi.model.VElement;
28: import org.eclipse.emf.ecp.view.spi.model.VViewPackage;
29: import org.eclipse.emfforms.spi.common.report.ReportService;
30: import org.eclipse.emfforms.spi.swt.core.AbstractAdditionalSWTRenderer;
31: import org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer;
32: import org.eclipse.emfforms.spi.swt.core.EMFFormsAdditionalRendererService;
33: import org.eclipse.emfforms.spi.swt.core.EMFFormsNoRendererException;
34: import org.eclipse.emfforms.spi.swt.core.EMFFormsRendererService;
35: import org.junit.Before;
36: import org.junit.Test;
37: import org.mockito.Matchers;
38: import org.mockito.Mockito;
39:
40: /**
41: * Test for the {@link EMFFormsRendererFactoryImpl}.
42: *
43: * @author Eugen Neufeld
44: *
45: */
46: public class EMFFormsRendererFactory_Test {
47:
48:         private EMFFormsRendererFactoryImpl rendererFactory;
49:
50:         /**
51:          * Setup the EMFFormsRendererFactoryImpl.
52:          */
53:         @Before
54:         public void setUp() {
55:                 rendererFactory = new EMFFormsRendererFactoryImpl();
56:         }
57:
58:         /**
59:          * Test method for
60:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)
61:          * EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)}.
62:          * When no EMFFormsRendererService is registered then an IllegalStateException should be thrown.
63:          *
64:          * @throws EMFFormsNoRendererException
65:          */
66:         @Test(expected = EMFFormsNoRendererException.class)
67:         public void testGetRendererInstanceNoRendererServices() throws EMFFormsNoRendererException {
68:                 rendererFactory.getRendererInstance(mock(VElement.class), mock(ViewModelContext.class));
69:         }
70:
71:         /**
72:          * Test method for
73:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)
74:          * EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)}.
75:          * When no fitting EMFFormsRendererService is available then an IllegalStateException should be thrown.
76:          *
77:          * @throws EMFFormsNoRendererException
78:          */
79:         @SuppressWarnings("unchecked")
80:         @Test(expected = EMFFormsNoRendererException.class)
81:         public void testGetRendererInstanceNoFittingServices() throws EMFFormsNoRendererException {
82:                 final VElement vElement = mock(VElement.class);
83:                 final EMFFormsRendererService<VElement> rendererService1 = mock(EMFFormsRendererService.class);
84:                 when(rendererService1.isApplicable(Matchers.same(vElement), Matchers.any(ViewModelContext.class))).thenReturn(
85:                         1d);
86:                 when(rendererService1.isApplicable(Matchers.any(VElement.class), Matchers.any(ViewModelContext.class)))
87:                         .thenReturn(
88:                                 EMFFormsRendererService.NOT_APPLICABLE);
89:                 final AbstractSWTRenderer<VElement> renderer1 = mock(AbstractSWTRenderer.class);
90:                 when(rendererService1.getRendererInstance(Matchers.any(VElement.class), Matchers.any(ViewModelContext.class)))
91:                         .thenReturn(renderer1);
92:
93:                 rendererFactory.addEMFFormsRendererService(rendererService1);
94:                 final VElement mockedVElement = mock(VElement.class);
95:                 when(mockedVElement.eClass()).thenReturn(VViewPackage.eINSTANCE.getControl());
96:                 rendererFactory.getRendererInstance(mockedVElement, mock(ViewModelContext.class));
97:         }
98:
99:         /**
100:          * Test method for
101:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)
102:          * EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)}.
103:          * When one EMFFormsRendererService is registered then
104:          * {@link EMFFormsRendererService#isApplicable(VElement,ViewModelContext)} is
105:          * called exactly once.
106:          *
107:          * @throws EMFFormsNoRendererException
108:          */
109:         @SuppressWarnings("unchecked")
110:         @Test
111:         public void testAddRendererService() throws EMFFormsNoRendererException {
112:                 final VElement vElement = eMock(VElement.class);
113:                 final ViewModelContext viewModelContext = mock(ViewModelContext.class);
114:                 final EMFFormsRendererService<VElement> rendererService = mock(EMFFormsRendererService.class);
115:                 final AbstractSWTRenderer<VElement> mockRenderer = new MockedAbstractSWTRenderer(vElement, viewModelContext,
116:                         mock(ReportService.class));
117:                 when(rendererService.getRendererInstance(vElement, viewModelContext)).thenReturn(mockRenderer);
118:                 rendererFactory.addEMFFormsRendererService(rendererService);
119:                 rendererFactory.getRendererInstance(vElement, viewModelContext);
120:                 Mockito.verify(rendererService, Mockito.times(1)).isApplicable(vElement, viewModelContext);
121:         }
122:
123:         /**
124:          * Test method for
125:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)
126:          * EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)}.
127:          * When the only EMFFormsRendererService is removed then an IllegalStateException is thrown.
128:          *
129:          * @throws EMFFormsNoRendererException
130:          */
131:         @SuppressWarnings("unchecked")
132:         @Test(expected = EMFFormsNoRendererException.class)
133:         public void testRemoveRendererService() throws EMFFormsNoRendererException {
134:                 final EMFFormsRendererService<VElement> rendererService = mock(EMFFormsRendererService.class);
135:                 rendererFactory.addEMFFormsRendererService(rendererService);
136:                 rendererFactory.removeEMFFormsRendererService(rendererService);
137:                 rendererFactory.getRendererInstance(mock(VElement.class), mock(ViewModelContext.class));
138:         }
139:
140:         /**
141:          * Test method for
142:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)
143:          * EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)}.
144:          * Check that the EMFFormsRendererService with the fitting VElement is used to get an AbstractSWTRenderer.
145:          *
146:          * @throws EMFFormsNoRendererException
147:          */
148:         @SuppressWarnings("unchecked")
149:         @Test
150:         public void testGetRendererInstanceSamePrioDifferentVElement() throws EMFFormsNoRendererException {
151:                 final ViewModelContext viewModelContext = mock(ViewModelContext.class);
152:                 final VElement vElement1 = Mockito.mock(VElement.class);
153:                 final VElement vElement2 = Mockito.mock(VElement.class);
154:                 final EMFFormsRendererService<VElement> rendererService1 = mock(EMFFormsRendererService.class);
155:                 when(rendererService1.isApplicable(vElement1, viewModelContext)).thenReturn(1d);
156:                 final AbstractSWTRenderer<VElement> renderer1 = new MockedAbstractSWTRenderer(vElement1, viewModelContext,
157:                         mock(ReportService.class));
158:                 when(rendererService1.getRendererInstance(Matchers.any(VElement.class), Matchers.any(ViewModelContext.class)))
159:                         .thenReturn(renderer1);
160:                 final EMFFormsRendererService<VElement> rendererService2 = mock(EMFFormsRendererService.class);
161:                 when(rendererService2.isApplicable(vElement2, viewModelContext)).thenReturn(1d);
162:                 final AbstractSWTRenderer<VElement> renderer2 = mock(AbstractSWTRenderer.class);
163:                 when(rendererService2.getRendererInstance(Matchers.any(VElement.class), Matchers.any(ViewModelContext.class)))
164:                         .thenReturn(renderer2);
165:                 rendererFactory.addEMFFormsRendererService(rendererService1);
166:                 rendererFactory.addEMFFormsRendererService(rendererService2);
167:                 assertEquals(renderer1, rendererFactory.getRendererInstance(vElement1, viewModelContext));
168:         }
169:
170:         /**
171:          * Test method for
172:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)
173:          * EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)}.
174:          * Check that the EMFFormsRendererService with the higher priority is used to get an AbstractSWTRenderer.
175:          *
176:          * @throws EMFFormsNoRendererException
177:          */
178:         @SuppressWarnings("unchecked")
179:         @Test
180:         public void testGetRendererInstanceDifferentPrioSameVElement() throws EMFFormsNoRendererException {
181:                 final ViewModelContext viewModelContext = mock(ViewModelContext.class);
182:                 final VElement vElement = mock(VElement.class);
183:                 final EMFFormsRendererService<VElement> rendererService1 = mock(EMFFormsRendererService.class);
184:                 when(rendererService1.isApplicable(vElement, viewModelContext)).thenReturn(1d);
185:                 final AbstractSWTRenderer<VElement> renderer1 = new MockedAbstractSWTRenderer(vElement, viewModelContext,
186:                         mock(ReportService.class));
187:                 when(rendererService1.getRendererInstance(Matchers.any(VElement.class), Matchers.any(ViewModelContext.class)))
188:                         .thenReturn(renderer1);
189:                 final EMFFormsRendererService<VElement> rendererService2 = mock(EMFFormsRendererService.class);
190:                 when(rendererService2.isApplicable(vElement, viewModelContext)).thenReturn(2d);
191:                 final AbstractSWTRenderer<VElement> renderer2 = new MockedAbstractSWTRenderer(vElement, viewModelContext,
192:                         mock(ReportService.class));
193:                 when(rendererService2.getRendererInstance(Matchers.any(VElement.class), Matchers.any(ViewModelContext.class)))
194:                         .thenReturn(renderer2);
195:                 rendererFactory.addEMFFormsRendererService(rendererService1);
196:                 rendererFactory.addEMFFormsRendererService(rendererService2);
197:                 assertEquals(renderer2, rendererFactory.getRendererInstance(vElement, viewModelContext));
198:         }
199:
200:         /**
201:          * Test method for
202:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getAdditionalRendererInstances(VElement, ViewModelContext)
203:          * EMFFormsRendererFactory#getAdditionalRendererInstances(VElement, ViewModelContext)}.
204:          * When one EMFFormsRendererService is registered then
205:          * {@link EMFFormsAdditionalRendererService#isApplicable(VElement, ViewModelContext)} is
206:          * called exactly once.
207:          */
208:         @SuppressWarnings("unchecked")
209:         @Test
210:         public void testAddAdditionalRendererService() {
211:                 final VElement vElement = mock(VElement.class);
212:                 final ViewModelContext viewModelContext = mock(ViewModelContext.class);
213:                 final EMFFormsAdditionalRendererService<VElement> rendererService = mock(
214:                         EMFFormsAdditionalRendererService.class);
215:                 when(rendererService.isApplicable(vElement, viewModelContext)).thenReturn(true);
216:                 final Collection<AbstractAdditionalSWTRenderer<VElement>> mockedResults = new ArrayList<AbstractAdditionalSWTRenderer<VElement>>();
217:                 mockedResults
218:                         .add(new MockedAbstractAdditionalSWTRenderer(vElement, viewModelContext, mock(ReportService.class)));
219:                 when(rendererService.getRendererInstances(vElement, viewModelContext)).thenReturn(mockedResults);
220:                 rendererFactory.addEMFFormsAdditionalRendererService(rendererService);
221:                 final Collection<AbstractAdditionalSWTRenderer<VElement>> additionalRenderers = rendererFactory
222:                         .getAdditionalRendererInstances(vElement, viewModelContext);
223:                 Mockito.verify(rendererService, Mockito.times(1)).isApplicable(vElement, viewModelContext);
224:                 assertEquals(1, additionalRenderers.size());
225:         }
226:
227:         /**
228:          * Test method for
229:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getAdditionalRendererInstances(VElement, ViewModelContext)
230:          * EMFFormsRendererFactory#getAdditionalRendererInstances(VElement, ViewModelContext)}.
231:          *
232:          */
233:         @SuppressWarnings("unchecked")
234:         @Test
235:         public void testRemoveAdditionalRendererService() {
236:                 final EMFFormsAdditionalRendererService<VElement> rendererService = mock(
237:                         EMFFormsAdditionalRendererService.class);
238:                 rendererFactory.addEMFFormsAdditionalRendererService(rendererService);
239:                 rendererFactory.removeEMFFormsAdditionalRendererService(rendererService);
240:                 final Collection<AbstractAdditionalSWTRenderer<VElement>> additionalRenderers = rendererFactory
241:                         .getAdditionalRendererInstances(mock(VElement.class), mock(ViewModelContext.class));
242:                 assertEquals(0, additionalRenderers.size());
243:         }
244:
245:         /**
246:          * Test method for
247:          * {@link org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory#getAdditionalRendererInstances(VElement, ViewModelContext)
248:          * EMFFormsRendererFactory#getAdditionalRendererInstances(VElement, ViewModelContext)}.
249:          * When no fitting EMFFormsRendererService is available then the collection is empty.
250:          *
251:          */
252:         @SuppressWarnings("unchecked")
253:         @Test
254:         public void testGetAdditionalRendererInstanceNoFittingServices() {
255:                 final VElement vElement = mock(VElement.class);
256:                 final EMFFormsAdditionalRendererService<VElement> rendererService1 = mock(
257:                         EMFFormsAdditionalRendererService.class);
258:                 when(rendererService1.isApplicable(Matchers.same(vElement), Matchers.any(ViewModelContext.class))).thenReturn(
259:                         false);
260:                 final AbstractAdditionalSWTRenderer<VElement> renderer1 = mock(AbstractAdditionalSWTRenderer.class);
261:                 when(rendererService1.getRendererInstances(Matchers.any(VElement.class), Matchers.any(ViewModelContext.class)))
262:                         .thenReturn(Collections.singleton(renderer1));
263:
264:                 rendererFactory.addEMFFormsAdditionalRendererService(rendererService1);
265:                 final Collection<AbstractAdditionalSWTRenderer<VElement>> additionalRenderers = rendererFactory
266:                         .getAdditionalRendererInstances(mock(VElement.class), mock(ViewModelContext.class));
267:                 assertEquals(0, additionalRenderers.size());
268:         }
269: }