Skip to content

Content of file EMFFormsLabelProviderImpl_Test.java

/*******************************************************************************
 * Copyright (c) 2011-2018 EclipseSource Muenchen GmbH and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 * Eugen Neufeld - initial API and implementation
 ******************************************************************************/
package org.eclipse.emfforms.internal.core.services.label;

import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isNull;
import static org.mockito.Matchers.same;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.text.MessageFormat;

import org.eclipse.core.databinding.observable.IObserving;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.IEMFValueProperty;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecp.test.common.DefaultRealm;
import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
import org.eclipse.emfforms.spi.common.BundleResolver;
import org.eclipse.emfforms.spi.common.BundleResolver.NoBundleFoundException;
import org.eclipse.emfforms.spi.common.locale.EMFFormsLocaleProvider;
import org.eclipse.emfforms.spi.common.report.ReportService;
import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
import org.eclipse.emfforms.spi.core.services.label.NoLabelFoundException;
import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.Bundle;

@SuppressWarnings("deprecation")
public class EMFFormsLabelProviderImpl_Test {

	/**
	 * Helper Interface for mocking.
	 *
	 * @author Eugen Neufeld
	 *
	 */
	public interface TestObservableValue extends IObservableValue, IObserving {
} private EMFFormsLabelProviderImpl labelProvider; private EMFFormsDatabindingEMF databinding; private DefaultRealm realm; @Before public void setup() { labelProvider = new EMFFormsLabelProviderImpl(); databinding = mock(EMFFormsDatabindingEMF.class); labelProvider.setEMFFormsDatabinding(databinding); realm = new DefaultRealm(); } @After public void tearDown() { realm.dispose(); } @Test(expected = IllegalArgumentException.class) public void testGetDisplayNameVDomainModelReferenceNull() throws NoLabelFoundException { labelProvider.getDisplayName((VDomainModelReference) null); } @SuppressWarnings("unchecked") @Test(expected = NoLabelFoundException.class) public void testGetDisplayNameVDomainModelReferenceThrowDatabindingException() throws NoLabelFoundException, DatabindingFailedException { final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); when(databinding.getValueProperty(same(domainModelReference), isNull(EObject.class))) .thenThrow(DatabindingFailedException.class); final ReportService reportService = mock(ReportService.class); labelProvider.setReportService(reportService); labelProvider.getDisplayName(domainModelReference); verify(reportService).report(any(DatabindingFailedReport.class)); } @Test public void testGetDisplayNameVDomainModelReferenceFeature() throws DatabindingFailedException, NoBundleFoundException { final Bundle mockedBundle = mock(Bundle.class); final BundleResolver bundleResolver = mock(BundleResolver.class); when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle); labelProvider.setBundleResolver(bundleResolver); final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class); when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject()); final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class); labelProvider.setEMFFormsLocalizationService(localizationService); final String key = String.format( "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ final String value = "My Value"; //$NON-NLS-1$ when(localizationService.getString(mockedBundle, key)).thenReturn(value); final String displayName = labelProvider.getDisplayName(eStructuralFeature); assertEquals(value, displayName); } @Test public void testGetDisplayNameVDomainModelReference() throws NoLabelFoundException, DatabindingFailedException, NoBundleFoundException { final Bundle mockedBundle = mock(Bundle.class); final BundleResolver bundleResolver = mock(BundleResolver.class); when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle); labelProvider.setBundleResolver(bundleResolver); final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class); when(databinding.getValueProperty(same(domainModelReference), isNull(EObject.class))).thenReturn(valueProperty); final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class); when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject()); when(valueProperty.getValueType()).thenReturn(eStructuralFeature); final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class); labelProvider.setEMFFormsLocalizationService(localizationService); final String key = String.format( "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ final String value = "My Value"; //$NON-NLS-1$ when(localizationService.getString(mockedBundle, key)).thenReturn(value); final IObservableValue displayName = labelProvider.getDisplayName(domainModelReference); assertEquals(value, displayName.getValue()); } @Test(expected = IllegalArgumentException.class) public void testGetDisplayNameVDomainModelReferenceNullEObject() throws NoLabelFoundException { labelProvider.getDisplayName(null, mock(EObject.class)); } @Test(expected = IllegalArgumentException.class) public void testGetDisplayNameVDomainModelReferenceEObjectNull() throws NoLabelFoundException { labelProvider.getDisplayName(mock(VDomainModelReference.class), null); } @SuppressWarnings("unchecked") @Test(expected = NoLabelFoundException.class) public void testGetDisplayNameVDomainModelReferenceEObjectThrowDatabindingException() throws NoLabelFoundException, DatabindingFailedException, NoBundleFoundException { final Bundle mockedBundle = mock(Bundle.class); final BundleResolver bundleResolver = mock(BundleResolver.class); when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle); labelProvider.setBundleResolver(bundleResolver); final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); final EObject eObject = mock(EObject.class); final EClass eClass = mock(EClass.class); when(eObject.eClass()).thenReturn(eClass); when(databinding.getValueProperty(domainModelReference, eClass)).thenThrow(DatabindingFailedException.class); final ReportService reportService = mock(ReportService.class); labelProvider.setReportService(reportService); labelProvider.getDisplayName(domainModelReference, eObject); verify(reportService).report(any(DatabindingFailedReport.class)); } @Test public void testGetDisplayNameVDomainModelReferenceEObject() throws NoLabelFoundException, DatabindingFailedException, NoBundleFoundException { final Bundle mockedBundle = mock(Bundle.class); final BundleResolver bundleResolver = mock(BundleResolver.class); when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle); labelProvider.setBundleResolver(bundleResolver); final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); final EObject eObject = EcoreFactory.eINSTANCE.createEObject(); final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class); final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class); when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject()); when(valueProperty.getValueType()).thenReturn(eStructuralFeature); when(databinding.getValueProperty(domainModelReference, eObject.eClass())).thenReturn(valueProperty); final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class); labelProvider.setEMFFormsLocalizationService(localizationService); final String key = String.format( "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ final String value = "My Value"; //$NON-NLS-1$ when(localizationService.getString(mockedBundle, key)).thenReturn(value); final IObservableValue displayName = labelProvider.getDisplayName(domainModelReference, eObject); assertEquals(value, displayName.getValue()); } @Test(expected = IllegalArgumentException.class) public void testGetDescriptionVDomainModelReferenceNull() throws NoLabelFoundException { labelProvider.getDescription(null); } @SuppressWarnings("unchecked") @Test(expected = NoLabelFoundException.class) public void testGetDescriptionVDomainModelReferenceThrowDatabindingException() throws NoLabelFoundException, DatabindingFailedException { final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); when(databinding.getValueProperty(same(domainModelReference), isNull(EObject.class))) .thenThrow(DatabindingFailedException.class); final ReportService reportService = mock(ReportService.class); labelProvider.setReportService(reportService); labelProvider.getDescription(domainModelReference); verify(reportService).report(any(DatabindingFailedReport.class)); } @Test public void testGetDescriptionVDomainModelReference() throws NoLabelFoundException, DatabindingFailedException, NoBundleFoundException { final Bundle mockedBundle = mock(Bundle.class); final BundleResolver bundleResolver = mock(BundleResolver.class); when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle); labelProvider.setBundleResolver(bundleResolver); final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class); when(databinding.getValueProperty(same(domainModelReference), isNull(EObject.class))).thenReturn(valueProperty); final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class); when(eStructuralFeature.getName()).thenReturn("myFeature"); //$NON-NLS-1$ when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject()); when(valueProperty.getValueType()).thenReturn(eStructuralFeature); final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class); final String descriptionKey = String.format( "_UI_%1$s_%2$s_description", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ when(localizationService.getString(any(Class.class), eq(descriptionKey))).thenReturn(descriptionKey); labelProvider.setEMFFormsLocalizationService(localizationService); final String key = String.format( "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ final String featureText = "My Feature"; //$NON-NLS-1$ when(localizationService.getString(mockedBundle, key)).thenReturn(featureText); final String descriptionPlaceHolder = "My Description {1} {2}"; //$NON-NLS-1$ when(localizationService.getString(mockedBundle, "_UI_PropertyDescriptor_description")) //$NON-NLS-1$ .thenReturn(descriptionPlaceHolder); final String eObjectText = "My EObject"; //$NON-NLS-1$ when( localizationService.getString(mockedBundle, String.format("_UI_%1$s_type", EcorePackage.eINSTANCE.getEObject().getName()))).thenReturn(eObjectText); //$NON-NLS-1$ final IObservableValue description = labelProvider.getDescription(domainModelReference); assertEquals(MessageFormat.format(descriptionPlaceHolder, featureText, eObjectText), description.getValue()); } @Test(expected = IllegalArgumentException.class) public void testGetDescriptionVDomainModelReferenceNullEObject() throws NoLabelFoundException { labelProvider.getDescription(null, mock(EObject.class)); } @Test(expected = IllegalArgumentException.class) public void testGetDescriptionVDomainModelReferenceEObjectNull() throws NoLabelFoundException { labelProvider.getDescription(mock(VDomainModelReference.class), null); } @SuppressWarnings("unchecked") @Test(expected = NoLabelFoundException.class) public void testGetDescriptionVDomainModelReferenceEObjectThrowDatabindingException() throws NoLabelFoundException, DatabindingFailedException, NoBundleFoundException { final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); final EObject eObject = mock(EObject.class); final EClass eClass = mock(EClass.class); when(eObject.eClass()).thenReturn(eClass); when(databinding.getValueProperty(domainModelReference, eObject)) .thenThrow(DatabindingFailedException.class); final ReportService reportService = mock(ReportService.class); labelProvider.setReportService(reportService); labelProvider.getDescription(domainModelReference, eObject); verify(reportService).report(any(DatabindingFailedReport.class)); } @Test public void testGetDescriptionVDomainModelReferenceEObject() throws NoLabelFoundException, DatabindingFailedException, NoBundleFoundException { final Bundle mockedBundle = mock(Bundle.class); final BundleResolver bundleResolver = mock(BundleResolver.class); when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle); labelProvider.setBundleResolver(bundleResolver); final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); final EObject eObject = EcoreFactory.eINSTANCE.createEObject(); final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class); final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class); when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject()); when(valueProperty.getValueType()).thenReturn(eStructuralFeature); when(databinding.getValueProperty(domainModelReference, eObject)).thenReturn(valueProperty); final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class); labelProvider.setEMFFormsLocalizationService(localizationService); final String descriptionKey = String.format( "_UI_%1$s_%2$s_description", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ when(localizationService.getString(any(Class.class), eq(descriptionKey))).thenReturn(descriptionKey); final String key = String.format( "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ final String featureText = "My Feature"; //$NON-NLS-1$ when(localizationService.getString(mockedBundle, key)).thenReturn(featureText); final String descriptionPlaceHolder = "My Description {1} {2}"; //$NON-NLS-1$ when(localizationService.getString(mockedBundle, "_UI_PropertyDescriptor_description")) //$NON-NLS-1$ .thenReturn(descriptionPlaceHolder); final String eObjectText = "My EObject"; //$NON-NLS-1$ when( localizationService.getString(mockedBundle, String.format("_UI_%1$s_type", EcorePackage.eINSTANCE.getEObject().getName()))).thenReturn(eObjectText); //$NON-NLS-1$ final IObservableValue description = labelProvider.getDescription(domainModelReference, eObject); assertEquals(MessageFormat.format(descriptionPlaceHolder, featureText, eObjectText), description.getValue()); } @Test public void testNotifyLocaleChange() throws NoLabelFoundException, DatabindingFailedException, NoBundleFoundException { final Bundle mockedBundle = mock(Bundle.class); final BundleResolver bundleResolver = mock(BundleResolver.class); when(bundleResolver.getEditBundle(any(EClass.class))).thenReturn(mockedBundle); labelProvider.setBundleResolver(bundleResolver); final VDomainModelReference domainModelReference = mock(VDomainModelReference.class); final EObject eObject = EcoreFactory.eINSTANCE.createEObject(); final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class); final EStructuralFeature eStructuralFeature = mock(EStructuralFeature.class); when(eStructuralFeature.getEContainingClass()).thenReturn(EcorePackage.eINSTANCE.getEObject()); when(valueProperty.getValueType()).thenReturn(eStructuralFeature); when(databinding.getValueProperty(domainModelReference, eObject)).thenReturn(valueProperty); when(databinding.getValueProperty(domainModelReference, eObject.eClass())).thenReturn(valueProperty); final EMFFormsLocalizationService localizationService = mock(EMFFormsLocalizationService.class); labelProvider.setEMFFormsLocalizationService(localizationService); final String descriptionKey = String.format( "_UI_%1$s_%2$s_description", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ when(localizationService.getString(any(Class.class), eq(descriptionKey))).thenReturn(descriptionKey); final String keyDisplayName = String.format( "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ final String valueDisplayName = "My Value"; //$NON-NLS-1$ final String valueDisplayNameNew = "My Value New"; //$NON-NLS-1$ final String keyDescription = String.format( "_UI_%1$s_%2$s_feature", EcorePackage.eINSTANCE.getEObject().getName(), eStructuralFeature.getName()); //$NON-NLS-1$ final String featureText = "My Feature"; //$NON-NLS-1$ final String descriptionPlaceHolder = "My Description {1} {2}"; //$NON-NLS-1$ final String eObjectText = "My EObject"; //$NON-NLS-1$ final String descriptionPlaceHolderNew = "My Description {1} {2} New"; //$NON-NLS-1$ final String valueDescription = MessageFormat.format(descriptionPlaceHolder, featureText, eObjectText); final String valueDescriptionNew = MessageFormat.format(descriptionPlaceHolderNew, featureText, eObjectText); when(localizationService.getString(mockedBundle, keyDescription)).thenReturn(featureText); when(localizationService.getString(mockedBundle, "_UI_PropertyDescriptor_description")) //$NON-NLS-1$ .thenReturn(descriptionPlaceHolder, descriptionPlaceHolderNew); when( localizationService.getString(mockedBundle, String.format("_UI_%1$s_type", EcorePackage.eINSTANCE.getEObject().getName()))).thenReturn(eObjectText); //$NON-NLS-1$ when(localizationService.getString(mockedBundle, keyDisplayName)).thenReturn(valueDisplayName, valueDisplayNameNew); final IObservableValue labelObservableValue = labelProvider.getDisplayName(domainModelReference, eObject); final IObservableValue descriptionObservableValue = labelProvider.getDescription(domainModelReference, eObject); assertEquals(valueDisplayName, labelObservableValue.getValue()); assertEquals(valueDescription, descriptionObservableValue.getValue()); labelProvider.notifyLocaleChange(); assertEquals(valueDisplayNameNew, labelObservableValue.getValue()); assertEquals(valueDescriptionNew, descriptionObservableValue.getValue()); } @Test public void testSetEMFFormsLocaleProvider() { final EMFFormsLocaleProvider localeProvider = mock(EMFFormsLocaleProvider.class); labelProvider.setEMFFormsLocaleProvider(localeProvider); verify(localeProvider).addEMFFormsLocaleChangeListener(labelProvider); } }