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); } }