blob: 2afb91a1e6c9021b64e6e6164f7874f209b4e870 [file] [log] [blame]
/*******************************************************************************
* 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:
* Lucas Koehler - 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.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 org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EObjectObservableValue;
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.ecp.test.common.DefaultRealm;
import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.D;
import org.eclipse.emfforms.core.services.databinding.testmodel.test.model.TestPackage;
import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
import org.eclipse.emfforms.spi.core.services.emfspecificservice.EMFSpecificService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* JUnit tests for {@link EMFFormsLabelProviderImpl}.
*
* @author Lucas Koehler
*
*/
@SuppressWarnings("deprecation")
public class EMFFormsLabelProviderDefaultImpl_Test {
private EMFFormsLabelProviderDefaultImpl labelProvider;
private EMFSpecificService emfSpecificService;
private IItemPropertyDescriptor itemPropertyDescriptor;
private IEMFValueProperty valueProperty;
private EObjectObservableValue observableValue;
private EMFFormsDatabindingEMF databindingService;
private DefaultRealm defaultRealm;
/**
* Set up that is executed before every test case.
* Registers a databinding and an emf specific service.
* Mocks various objects for the tests.
*/
@Before
public void setUp() {
defaultRealm = new DefaultRealm();
labelProvider = new EMFFormsLabelProviderDefaultImpl();
databindingService = mock(EMFFormsDatabindingEMF.class);
labelProvider.setEMFFormsDatabinding(databindingService);
valueProperty = mock(IEMFValueProperty.class);
observableValue = mock(EObjectObservableValue.class);
// when(observableValue.getRealm()).thenReturn(Realm.getDefault());
emfSpecificService = mock(EMFSpecificService.class);
labelProvider.setEMFSpecificService(emfSpecificService);
itemPropertyDescriptor = mock(IItemPropertyDescriptor.class);
when(emfSpecificService.getIItemPropertyDescriptor(any(EObject.class), any(EStructuralFeature.class)))
.thenReturn(itemPropertyDescriptor);
}
/**
* Clean up the realm.
*/
@After
public void tearDown() {
defaultRealm.dispose();
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(EStructuralFeature)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDisplayNameOneParamDynamicEMF() throws DatabindingFailedException {
final String expectedResult = "Expected"; //$NON-NLS-1$
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
when(structuralFeature.getEContainingClass()).thenReturn(eClass);
when(structuralFeature.getName()).thenReturn(expectedResult.toLowerCase());
final String result = (String) labelProvider.getDisplayName(structuralFeature).getValue();
assertEquals(expectedResult, result);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(EStructuralFeature)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDisplayNameOneParamFeature() throws DatabindingFailedException {
final String expectedResult = "expected"; //$NON-NLS-1$
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
when(structuralFeature.getEContainingClass()).thenReturn(TestPackage.eINSTANCE.getD());
when(itemPropertyDescriptor.getDisplayName(any(Object.class))).thenReturn(expectedResult);
when(valueProperty.getValueType()).thenReturn(structuralFeature);
final String result = (String) labelProvider.getDisplayName(structuralFeature).getValue();
verify(itemPropertyDescriptor).getDisplayName(any(D.class));
assertEquals(expectedResult, result);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDisplayNameOneParam() throws DatabindingFailedException {
final String expectedResult = "expected"; //$NON-NLS-1$
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
when(structuralFeature.getEContainingClass()).thenReturn(TestPackage.eINSTANCE.getD());
when(itemPropertyDescriptor.getDisplayName(any(Object.class))).thenReturn(expectedResult);
when(valueProperty.getValueType()).thenReturn(structuralFeature);
when(databindingService.getValueProperty(same(domainModelReference), isNull(EObject.class)))
.thenReturn(valueProperty);
final IObservableValue result = labelProvider.getDisplayName(domainModelReference);
verify(databindingService).getValueProperty(same(domainModelReference), isNull(EObject.class));
verify(itemPropertyDescriptor).getDisplayName(any(D.class));
assertEquals(expectedResult, result.getValue());
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDisplayNameOneParamNull() {
labelProvider.getDisplayName((VDomainModelReference) null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EClass)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDisplayNameEClass() throws DatabindingFailedException {
final String expectedResult = "expected"; //$NON-NLS-1$
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
final EClass eClass = mock(EClass.class);
when(structuralFeature.getEContainingClass()).thenReturn(TestPackage.eINSTANCE.getD());
when(itemPropertyDescriptor.getDisplayName(any(Object.class))).thenReturn(expectedResult);
when(valueProperty.getValueType()).thenReturn(structuralFeature);
when(databindingService.getValueProperty(domainModelReference, eClass)).thenReturn(valueProperty);
final IObservableValue result = labelProvider.getDisplayName(domainModelReference, eClass);
verify(databindingService).getValueProperty(domainModelReference, eClass);
verify(itemPropertyDescriptor).getDisplayName(any(D.class));
assertEquals(expectedResult, result.getValue());
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EClass)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDisplayNameEClassDMRNull() {
labelProvider.getDisplayName((VDomainModelReference) null, mock(EClass.class));
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EClass)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDisplayNameEClassEClassNull() {
labelProvider.getDisplayName(mock(VDomainModelReference.class), null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDisplayNameEClassBothNull() {
labelProvider.getDisplayName(null, null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDisplayNameTwoParams() throws DatabindingFailedException {
final String expectedResult = "expected"; //$NON-NLS-1$
final EObject eObject = mock(EObject.class);
final EObject value = mock(EObject.class);
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
when(itemPropertyDescriptor.getDisplayName(value)).thenReturn(expectedResult);
when(observableValue.getValueType()).thenReturn(structuralFeature);
when(observableValue.getObserved()).thenReturn(value);
when(databindingService.getObservableValue(domainModelReference, eObject)).thenReturn(observableValue);
final IObservableValue result = labelProvider.getDisplayName(domainModelReference, eObject);
verify(databindingService).getObservableValue(domainModelReference, eObject);
verify(itemPropertyDescriptor).getDisplayName(value);
assertEquals(expectedResult, result.getValue());
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDisplayNameTwoParamsReferenceNull() {
labelProvider.getDisplayName(null, mock(EObject.class));
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDisplayNameTwoParamsObjectNull() {
labelProvider.getDisplayName(mock(VDomainModelReference.class), null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDisplayNameTwoParamsBothNull() {
labelProvider.getDisplayName(null, null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDisplayName(EStructuralFeature)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDescriptionOneParamDynamicEMF() throws DatabindingFailedException {
final String expectedResult = "Expected"; //$NON-NLS-1$
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
final EClass eClass = EcoreFactory.eINSTANCE.createEClass();
final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
when(structuralFeature.getEContainingClass()).thenReturn(eClass);
when(structuralFeature.getName()).thenReturn(expectedResult.toLowerCase());
when(valueProperty.getValueType()).thenReturn(structuralFeature);
when(databindingService.getValueProperty(same(domainModelReference), isNull(EObject.class)))
.thenReturn(valueProperty);
final IObservableValue result = labelProvider.getDescription(domainModelReference);
verify(databindingService).getValueProperty(same(domainModelReference), isNull(EObject.class));
assertEquals(expectedResult, result.getValue());
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDescriptionOneParam() throws DatabindingFailedException {
final String expectedResult = "expected"; //$NON-NLS-1$
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
when(structuralFeature.getEContainingClass()).thenReturn(TestPackage.eINSTANCE.getD());
when(itemPropertyDescriptor.getDescription(any(Object.class))).thenReturn(expectedResult);
when(valueProperty.getValueType()).thenReturn(structuralFeature);
when(databindingService.getValueProperty(same(domainModelReference), isNull(EObject.class)))
.thenReturn(valueProperty);
final IObservableValue result = labelProvider.getDescription(domainModelReference);
verify(databindingService).getValueProperty(same(domainModelReference), isNull(EObject.class));
verify(itemPropertyDescriptor).getDescription(any(D.class));
assertEquals(expectedResult, result.getValue());
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDescriptionOneParamNull() {
labelProvider.getDescription(null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EClass)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDescriptionEClass() throws DatabindingFailedException {
final String expectedResult = "expected"; //$NON-NLS-1$
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
final EClass eClass = mock(EClass.class);
when(structuralFeature.getEContainingClass()).thenReturn(TestPackage.eINSTANCE.getD());
when(itemPropertyDescriptor.getDescription(any(Object.class))).thenReturn(expectedResult);
when(valueProperty.getValueType()).thenReturn(structuralFeature);
when(databindingService.getValueProperty(domainModelReference, eClass)).thenReturn(valueProperty);
final IObservableValue result = labelProvider.getDescription(domainModelReference, eClass);
verify(databindingService).getValueProperty(domainModelReference, eClass);
verify(itemPropertyDescriptor).getDescription(any(D.class));
assertEquals(expectedResult, result.getValue());
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EClass)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDescriptionEClassDMRNull() {
labelProvider.getDescription(null, mock(EClass.class));
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EClass)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDescriptionEClassEClassNull() {
labelProvider.getDescription(mock(VDomainModelReference.class), null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EClass)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDescriptionEClassBothNull() {
labelProvider.getDescription(null, null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
* .
*
* @throws DatabindingFailedException should not happen, just needs to be thrown because the databinding service
* defines the throw in its interface.
*/
@Test
public void testGetDescriptionTwoParams() throws DatabindingFailedException {
final String expectedResult = "expected"; //$NON-NLS-1$
final EObject eObject = mock(EObject.class);
final EObject value = mock(EObject.class);
final EStructuralFeature structuralFeature = mock(EStructuralFeature.class);
final VDomainModelReference domainModelReference = mock(VDomainModelReference.class);
when(itemPropertyDescriptor.getDescription(value)).thenReturn(expectedResult);
when(observableValue.getValueType()).thenReturn(structuralFeature);
when(observableValue.getObserved()).thenReturn(value);
when(databindingService.getObservableValue(domainModelReference, eObject)).thenReturn(observableValue);
final IObservableValue result = labelProvider.getDescription(domainModelReference, eObject);
verify(databindingService).getObservableValue(domainModelReference, eObject);
verify(itemPropertyDescriptor).getDescription(value);
assertEquals(expectedResult, result.getValue());
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDescriptionTwoParamsReferenceNull() {
labelProvider.getDescription(null, mock(EObject.class));
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDescriptionTwoParamsObjectNull() {
labelProvider.getDescription(mock(VDomainModelReference.class), null);
}
/**
* Test method for
* {@link EMFFormsLabelProviderDefaultImpl#getDescription(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference, org.eclipse.emf.ecore.EObject)}
* .
*/
@Test(expected = IllegalArgumentException.class)
public void testGetDescriptionTwoParamsBothNull() {
labelProvider.getDescription(null, null);
}
}