Skip to content

Package: EMFFormsLabelProviderImpl_Test$TestObservableValue

EMFFormsLabelProviderImpl_Test$TestObservableValue

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: * Eugen Neufeld - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.core.services.label;
15:
16: import static org.junit.Assert.assertEquals;
17: import static org.mockito.Matchers.any;
18: import static org.mockito.Matchers.eq;
19: import static org.mockito.Matchers.isNull;
20: import static org.mockito.Matchers.same;
21: import static org.mockito.Mockito.mock;
22: import static org.mockito.Mockito.verify;
23: import static org.mockito.Mockito.when;
24:
25: import java.text.MessageFormat;
26:
27: import org.eclipse.core.databinding.observable.IObserving;
28: import org.eclipse.core.databinding.observable.value.IObservableValue;
29: import org.eclipse.emf.databinding.IEMFValueProperty;
30: import org.eclipse.emf.ecore.EClass;
31: import org.eclipse.emf.ecore.EObject;
32: import org.eclipse.emf.ecore.EStructuralFeature;
33: import org.eclipse.emf.ecore.EcoreFactory;
34: import org.eclipse.emf.ecore.EcorePackage;
35: import org.eclipse.emf.ecp.test.common.DefaultRealm;
36: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
37: import org.eclipse.emfforms.spi.common.BundleResolver;
38: import org.eclipse.emfforms.spi.common.BundleResolver.NoBundleFoundException;
39: import org.eclipse.emfforms.spi.common.locale.EMFFormsLocaleProvider;
40: import org.eclipse.emfforms.spi.common.report.ReportService;
41: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
42: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
43: import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
44: import org.eclipse.emfforms.spi.core.services.label.NoLabelFoundException;
45: import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
46: import org.junit.After;
47: import org.junit.Before;
48: import org.junit.Test;
49: import org.osgi.framework.Bundle;
50:
51: @SuppressWarnings("deprecation")
52: public class EMFFormsLabelProviderImpl_Test {
53:
54:         /**
55:          * Helper Interface for mocking.
56:          *
57:          * @author Eugen Neufeld
58:          *
59:          */
60:         public interface TestObservableValue extends IObservableValue, IObserving {
61:         }
62:
63:         private EMFFormsLabelProviderImpl labelProvider;
64:         private EMFFormsDatabindingEMF databinding;
65:         private DefaultRealm realm;
66:
67:         @Before
68:         public void setup() {
69:                 labelProvider = new EMFFormsLabelProviderImpl();
70:                 databinding = mock(EMFFormsDatabindingEMF.class);
71:                 labelProvider.setEMFFormsDatabinding(databinding);
72:                 realm = new DefaultRealm();
73:         }
74:
75:         @After
76:         public void tearDown() {
77:                 realm.dispose();
78:         }
79:
80:         @Test(expected = IllegalArgumentException.class)
81:         public void testGetDisplayNameVDomainModelReferenceNull() throws NoLabelFoundException {
82:                 labelProvider.getDisplayName((VDomainModelReference) null);
83:         }
84:
85:         @SuppressWarnings("unchecked")
86:         @Test(expected = NoLabelFoundException.class)
87:         public void testGetDisplayNameVDomainModelReferenceThrowDatabindingException() throws NoLabelFoundException,
88:                 DatabindingFailedException {
89:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
90:                 when(databinding.getValueProperty(same(domainModelReference), isNull(EObject.class)))
91:                         .thenThrow(DatabindingFailedException.class);
92:
93:                 final ReportService reportService = mock(ReportService.class);
94:                 labelProvider.setReportService(reportService);
95:                 labelProvider.getDisplayName(domainModelReference);
96:                 verify(reportService).report(any(DatabindingFailedReport.class));
97:         }
98:
99:         @Test
100:         public void testGetDisplayNameVDomainModelReferenceFeature()
101:                 throws DatabindingFailedException, NoBundleFoundException {
102:                 final Bundle mockedBundle = mock(Bundle.class);
103:                 final BundleResolver bundleResolver = mock(BundleResolver.class);
104:                 when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle);
105:                 labelProvider.setBundleResolver(bundleResolver);
106:                 final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class);
107:                 when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject());
108:
109:                 final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class);
110:                 labelProvider.setEMFFormsLocalizationService(localizationService);
111:
112:                 final String key = String.format(
113:                         "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
114:                 final String value = "My Value"; //$NON-NLS-1$
115:                 when(localizationService.getString(mockedBundle, key)).thenReturn(value);
116:
117:                 final String displayName = labelProvider.getDisplayName(eStructuralFeature);
118:                 assertEquals(value, displayName);
119:         }
120:
121:         @Test
122:         public void testGetDisplayNameVDomainModelReference() throws NoLabelFoundException, DatabindingFailedException,
123:                 NoBundleFoundException {
124:                 final Bundle mockedBundle = mock(Bundle.class);
125:                 final BundleResolver bundleResolver = mock(BundleResolver.class);
126:                 when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle);
127:                 labelProvider.setBundleResolver(bundleResolver);
128:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
129:                 final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class);
130:                 when(databinding.getValueProperty(same(domainModelReference), isNull(EObject.class))).thenReturn(valueProperty);
131:                 final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class);
132:                 when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject());
133:                 when(valueProperty.getValueType()).thenReturn(eStructuralFeature);
134:
135:                 final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class);
136:                 labelProvider.setEMFFormsLocalizationService(localizationService);
137:
138:                 final String key = String.format(
139:                         "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
140:                 final String value = "My Value"; //$NON-NLS-1$
141:                 when(localizationService.getString(mockedBundle, key)).thenReturn(value);
142:
143:                 final IObservableValue displayName = labelProvider.getDisplayName(domainModelReference);
144:                 assertEquals(value, displayName.getValue());
145:         }
146:
147:         @Test(expected = IllegalArgumentException.class)
148:         public void testGetDisplayNameVDomainModelReferenceNullEObject() throws NoLabelFoundException {
149:                 labelProvider.getDisplayName(null, mock(EObject.class));
150:         }
151:
152:         @Test(expected = IllegalArgumentException.class)
153:         public void testGetDisplayNameVDomainModelReferenceEObjectNull() throws NoLabelFoundException {
154:                 labelProvider.getDisplayName(mock(VDomainModelReference.class), null);
155:         }
156:
157:         @SuppressWarnings("unchecked")
158:         @Test(expected = NoLabelFoundException.class)
159:         public void testGetDisplayNameVDomainModelReferenceEObjectThrowDatabindingException() throws NoLabelFoundException,
160:                 DatabindingFailedException, NoBundleFoundException {
161:                 final Bundle mockedBundle = mock(Bundle.class);
162:                 final BundleResolver bundleResolver = mock(BundleResolver.class);
163:                 when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle);
164:                 labelProvider.setBundleResolver(bundleResolver);
165:
166:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
167:                 final EObject eObject = mock(EObject.class);
168:                 final EClass eClass = mock(EClass.class);
169:                 when(eObject.eClass()).thenReturn(eClass);
170:                 when(databinding.getValueProperty(domainModelReference, eClass)).thenThrow(DatabindingFailedException.class);
171:
172:                 final ReportService reportService = mock(ReportService.class);
173:                 labelProvider.setReportService(reportService);
174:                 labelProvider.getDisplayName(domainModelReference, eObject);
175:                 verify(reportService).report(any(DatabindingFailedReport.class));
176:         }
177:
178:         @Test
179:         public void testGetDisplayNameVDomainModelReferenceEObject() throws NoLabelFoundException,
180:                 DatabindingFailedException, NoBundleFoundException {
181:                 final Bundle mockedBundle = mock(Bundle.class);
182:                 final BundleResolver bundleResolver = mock(BundleResolver.class);
183:                 when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle);
184:                 labelProvider.setBundleResolver(bundleResolver);
185:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
186:                 final EObject eObject = EcoreFactory.eINSTANCE.createEObject();
187:                 final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class);
188:                 final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class);
189:                 when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject());
190:                 when(valueProperty.getValueType()).thenReturn(eStructuralFeature);
191:
192:                 when(databinding.getValueProperty(domainModelReference, eObject.eClass())).thenReturn(valueProperty);
193:
194:                 final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class);
195:                 labelProvider.setEMFFormsLocalizationService(localizationService);
196:
197:                 final String key = String.format(
198:                         "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
199:                 final String value = "My Value"; //$NON-NLS-1$
200:                 when(localizationService.getString(mockedBundle, key)).thenReturn(value);
201:
202:                 final IObservableValue displayName = labelProvider.getDisplayName(domainModelReference, eObject);
203:                 assertEquals(value, displayName.getValue());
204:
205:         }
206:
207:         @Test(expected = IllegalArgumentException.class)
208:         public void testGetDescriptionVDomainModelReferenceNull() throws NoLabelFoundException {
209:                 labelProvider.getDescription(null);
210:         }
211:
212:         @SuppressWarnings("unchecked")
213:         @Test(expected = NoLabelFoundException.class)
214:         public void testGetDescriptionVDomainModelReferenceThrowDatabindingException() throws NoLabelFoundException,
215:                 DatabindingFailedException {
216:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
217:                 when(databinding.getValueProperty(same(domainModelReference), isNull(EObject.class)))
218:                         .thenThrow(DatabindingFailedException.class);
219:
220:                 final ReportService reportService = mock(ReportService.class);
221:                 labelProvider.setReportService(reportService);
222:                 labelProvider.getDescription(domainModelReference);
223:                 verify(reportService).report(any(DatabindingFailedReport.class));
224:         }
225:
226:         @Test
227:         public void testGetDescriptionVDomainModelReference() throws NoLabelFoundException, DatabindingFailedException,
228:                 NoBundleFoundException {
229:                 final Bundle mockedBundle = mock(Bundle.class);
230:                 final BundleResolver bundleResolver = mock(BundleResolver.class);
231:                 when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle);
232:                 labelProvider.setBundleResolver(bundleResolver);
233:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
234:
235:                 final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class);
236:                 when(databinding.getValueProperty(same(domainModelReference), isNull(EObject.class))).thenReturn(valueProperty);
237:                 final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class);
238:                 when(eStructuralFeature.getName()).thenReturn("myFeature"); //$NON-NLS-1$
239:                 when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject());
240:                 when(valueProperty.getValueType()).thenReturn(eStructuralFeature);
241:
242:                 final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class);
243:                 final String descriptionKey = String.format(
244:                         "_UI_%1$s_%2$s_description", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
245:                 when(localizationService.getString(any(Class.class), eq(descriptionKey))).thenReturn(descriptionKey);
246:                 labelProvider.setEMFFormsLocalizationService(localizationService);
247:
248:                 final String key = String.format(
249:                         "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
250:                 final String featureText = "My Feature"; //$NON-NLS-1$
251:                 when(localizationService.getString(mockedBundle, key)).thenReturn(featureText);
252:                 final String descriptionPlaceHolder = "My Description {1} {2}"; //$NON-NLS-1$
253:                 when(localizationService.getString(mockedBundle, "_UI_PropertyDescriptor_description")) //$NON-NLS-1$
254:                         .thenReturn(descriptionPlaceHolder);
255:                 final String eObjectText = "My EObject"; //$NON-NLS-1$
256:                 when(
257:                         localizationService.getString(mockedBundle,
258:                                 String.format("_UI_%1$s_type", EcorePackage.eINSTANCE.getEObject().getName()))).thenReturn(eObjectText); //$NON-NLS-1$
259:
260:                 final IObservableValue description = labelProvider.getDescription(domainModelReference);
261:                 assertEquals(MessageFormat.format(descriptionPlaceHolder, featureText, eObjectText), description.getValue());
262:         }
263:
264:         @Test(expected = IllegalArgumentException.class)
265:         public void testGetDescriptionVDomainModelReferenceNullEObject() throws NoLabelFoundException {
266:                 labelProvider.getDescription(null, mock(EObject.class));
267:         }
268:
269:         @Test(expected = IllegalArgumentException.class)
270:         public void testGetDescriptionVDomainModelReferenceEObjectNull() throws NoLabelFoundException {
271:                 labelProvider.getDescription(mock(VDomainModelReference.class), null);
272:         }
273:
274:         @SuppressWarnings("unchecked")
275:         @Test(expected = NoLabelFoundException.class)
276:         public void testGetDescriptionVDomainModelReferenceEObjectThrowDatabindingException() throws NoLabelFoundException,
277:                 DatabindingFailedException, NoBundleFoundException {
278:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
279:                 final EObject eObject = mock(EObject.class);
280:                 final EClass eClass = mock(EClass.class);
281:                 when(eObject.eClass()).thenReturn(eClass);
282:                 when(databinding.getValueProperty(domainModelReference, eObject))
283:                         .thenThrow(DatabindingFailedException.class);
284:
285:                 final ReportService reportService = mock(ReportService.class);
286:                 labelProvider.setReportService(reportService);
287:                 labelProvider.getDescription(domainModelReference, eObject);
288:                 verify(reportService).report(any(DatabindingFailedReport.class));
289:         }
290:
291:         @Test
292:         public void testGetDescriptionVDomainModelReferenceEObject() throws NoLabelFoundException,
293:                 DatabindingFailedException, NoBundleFoundException {
294:                 final Bundle mockedBundle = mock(Bundle.class);
295:                 final BundleResolver bundleResolver = mock(BundleResolver.class);
296:                 when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle);
297:                 labelProvider.setBundleResolver(bundleResolver);
298:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
299:                 final EObject eObject = EcoreFactory.eINSTANCE.createEObject();
300:                 final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class);
301:                 final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class);
302:                 when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject());
303:                 when(valueProperty.getValueType()).thenReturn(eStructuralFeature);
304:
305:                 when(databinding.getValueProperty(domainModelReference, eObject)).thenReturn(valueProperty);
306:
307:                 final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class);
308:                 labelProvider.setEMFFormsLocalizationService(localizationService);
309:
310:                 final String descriptionKey = String.format(
311:                         "_UI_%1$s_%2$s_description", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
312:                 when(localizationService.getString(any(Class.class), eq(descriptionKey))).thenReturn(descriptionKey);
313:
314:                 final String key = String.format(
315:                         "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
316:                 final String featureText = "My Feature"; //$NON-NLS-1$
317:                 when(localizationService.getString(mockedBundle, key)).thenReturn(featureText);
318:                 final String descriptionPlaceHolder = "My Description {1} {2}"; //$NON-NLS-1$
319:                 when(localizationService.getString(mockedBundle, "_UI_PropertyDescriptor_description")) //$NON-NLS-1$
320:                         .thenReturn(descriptionPlaceHolder);
321:                 final String eObjectText = "My EObject"; //$NON-NLS-1$
322:                 when(
323:                         localizationService.getString(mockedBundle,
324:                                 String.format("_UI_%1$s_type", EcorePackage.eINSTANCE.getEObject().getName()))).thenReturn(eObjectText); //$NON-NLS-1$
325:
326:                 final IObservableValue description = labelProvider.getDescription(domainModelReference, eObject);
327:                 assertEquals(MessageFormat.format(descriptionPlaceHolder, featureText, eObjectText), description.getValue());
328:         }
329:
330:         @Test
331:         public void testNotifyLocaleChange() throws NoLabelFoundException, DatabindingFailedException,
332:                 NoBundleFoundException {
333:                 final Bundle mockedBundle = mock(Bundle.class);
334:                 final BundleResolver bundleResolver = mock(BundleResolver.class);
335:                 when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle);
336:                 labelProvider.setBundleResolver(bundleResolver);
337:                 final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
338:                 final EObject eObject = EcoreFactory.eINSTANCE.createEObject();
339:                 final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class);
340:                 final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class);
341:                 when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject());
342:                 when(valueProperty.getValueType()).thenReturn(eStructuralFeature);
343:
344:                 when(databinding.getValueProperty(domainModelReference, eObject)).thenReturn(valueProperty);
345:                 when(databinding.getValueProperty(domainModelReference, eObject.eClass())).thenReturn(valueProperty);
346:
347:                 final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class);
348:                 labelProvider.setEMFFormsLocalizationService(localizationService);
349:
350:                 final String descriptionKey = String.format(
351:                         "_UI_%1$s_%2$s_description", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
352:                 when(localizationService.getString(any(Class.class), eq(descriptionKey))).thenReturn(descriptionKey);
353:
354:                 final String keyDisplayName = String.format(
355:                         "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
356:                 final String valueDisplayName = "My Value"; //$NON-NLS-1$
357:                 final String valueDisplayNameNew = "My Value New"; //$NON-NLS-1$
358:
359:                 final String keyDescription = String.format(
360:                         "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$
361:                 final String featureText = "My Feature"; //$NON-NLS-1$
362:                 final String descriptionPlaceHolder = "My Description {1} {2}"; //$NON-NLS-1$
363:                 final String eObjectText = "My EObject"; //$NON-NLS-1$
364:                 final String descriptionPlaceHolderNew = "My Description {1} {2} New"; //$NON-NLS-1$
365:                 final String valueDescription = MessageFormat.format(descriptionPlaceHolder, featureText, eObjectText);
366:                 final String valueDescriptionNew = MessageFormat.format(descriptionPlaceHolderNew, featureText, eObjectText);
367:
368:                 when(localizationService.getString(mockedBundle, keyDescription)).thenReturn(featureText);
369:                 when(localizationService.getString(mockedBundle, "_UI_PropertyDescriptor_description")) //$NON-NLS-1$
370:                         .thenReturn(descriptionPlaceHolder, descriptionPlaceHolderNew);
371:                 when(
372:                         localizationService.getString(mockedBundle,
373:                                 String.format("_UI_%1$s_type", EcorePackage.eINSTANCE.getEObject().getName()))).thenReturn(eObjectText); //$NON-NLS-1$
374:                 when(localizationService.getString(mockedBundle, keyDisplayName)).thenReturn(valueDisplayName,
375:                         valueDisplayNameNew);
376:
377:                 final IObservableValue labelObservableValue = labelProvider.getDisplayName(domainModelReference, eObject);
378:                 final IObservableValue descriptionObservableValue = labelProvider.getDescription(domainModelReference, eObject);
379:                 assertEquals(valueDisplayName, labelObservableValue.getValue());
380:                 assertEquals(valueDescription, descriptionObservableValue.getValue());
381:
382:                 labelProvider.notifyLocaleChange();
383:                 assertEquals(valueDisplayNameNew, labelObservableValue.getValue());
384:                 assertEquals(valueDescriptionNew, descriptionObservableValue.getValue());
385:         }
386:
387:         @Test
388:         public void testSetEMFFormsLocaleProvider() {
389:                 final EMFFormsLocaleProvider localeProvider = mock(EMFFormsLocaleProvider.class);
390:                 labelProvider.setEMFFormsLocaleProvider(localeProvider);
391:                 verify(localeProvider).addEMFFormsLocaleChangeListener(labelProvider);
392:         }
393: }