blob: 3f6b7e89023eccb623993a8616488dbe408993b7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2015 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.swt.core;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import java.util.Collection;
import java.util.Collections;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
import org.eclipse.emf.ecp.view.spi.model.VElement;
import org.eclipse.emfforms.spi.common.report.ReportService;
import org.eclipse.emfforms.spi.swt.core.AbstractAdditionalSWTRenderer;
import org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer;
import org.eclipse.emfforms.spi.swt.core.EMFFormsAdditionalRendererService;
import org.eclipse.emfforms.spi.swt.core.EMFFormsNoRendererException;
import org.eclipse.emfforms.spi.swt.core.EMFFormsRendererFactory;
import org.eclipse.emfforms.spi.swt.core.EMFFormsRendererService;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
/**
* Integration test for the {@link EMFFormsRendererFactory}.
*
* @author Eugen Neufeld
*
*/
public class EMFFormsRendererFactory_ITest {
private EMFFormsRendererFactory rendererFactory;
private ServiceReference<EMFFormsRendererFactory> serviceReference;
private static BundleContext bundleContext;
/**
* Setup the {@link BundleContext}.
*/
@BeforeClass
public static void beforeClass() {
final Bundle bundle = FrameworkUtil.getBundle(EMFFormsRendererFactory_ITest.class);
bundleContext = bundle.getBundleContext();
}
/**
* Retrieves the {@link EMFFormsRendererFactory} as a service.
*/
@Before
public void setUp() {
serviceReference = bundleContext.getServiceReference(EMFFormsRendererFactory.class);
rendererFactory = bundleContext.getService(serviceReference);
}
/**
* Ungets the service.
*/
@After
public void cleanUp() {
bundleContext.ungetService(serviceReference);
}
/**
* Test method for {@link EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)}.
* Testing that a registered {@link EMFFormsRendererService} is picked up.
*
* @throws EMFFormsNoRendererException
*/
@SuppressWarnings("unchecked")
@Test
public void testAddRendererService() throws EMFFormsNoRendererException {
final VElement vElement = mock(VElement.class);
final ViewModelContext viewModelContext = mock(ViewModelContext.class);
final AbstractSWTRenderer<VElement> mockedRenderer = new MockedAbstractSWTRenderer(vElement, viewModelContext,
mock(ReportService.class));
final EMFFormsRendererService<VElement> rendererService = mock(EMFFormsRendererService.class);
Mockito.when(rendererService.getRendererInstance(vElement, viewModelContext)).thenReturn(mockedRenderer);
bundleContext.registerService(EMFFormsRendererService.class, rendererService, null);
rendererFactory.getRendererInstance(vElement, viewModelContext);
Mockito.verify(rendererService, Mockito.times(1)).isApplicable(vElement, viewModelContext);
}
/**
* Test method for {@link EMFFormsRendererFactory#getRendererInstance(VElement, ViewModelContext)}.
* Testing that an IllegalStateException is thrown when no {@link EMFFormsRendererService} is registered.
*
* @throws EMFFormsNoRendererException
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test(expected = EMFFormsNoRendererException.class)
public void testRemoveRendererService() throws EMFFormsNoRendererException {
final EMFFormsRendererService<VElement> rendererService = mock(EMFFormsRendererService.class);
final ServiceRegistration<EMFFormsRendererService> registerService = bundleContext.registerService(
EMFFormsRendererService.class, rendererService, null);
registerService.unregister();
rendererFactory.getRendererInstance(mock(VElement.class), mock(ViewModelContext.class));
}
/**
* Test method for {@link EMFFormsRendererFactory#getAdditionalRendererInstances(VElement, ViewModelContext)}.
* Testing that a registered {@link EMFFormsAdditionalRendererService} is picked up.
*/
@SuppressWarnings("unchecked")
@Test
public void testAddAdditionalRendererService() {
final VElement vElement = mock(VElement.class);
final ViewModelContext viewModelContext = mock(ViewModelContext.class);
final AbstractAdditionalSWTRenderer<VElement> additionalSWTRenderer = new MockedAbstractAdditionalSWTRenderer(
vElement, viewModelContext, mock(ReportService.class));
final EMFFormsAdditionalRendererService<VElement> rendererService = mock(EMFFormsAdditionalRendererService.class);
Mockito.when(rendererService.getRendererInstances(vElement, viewModelContext)).thenReturn(
Collections.singleton(additionalSWTRenderer));
Mockito.when(rendererService.isApplicable(Matchers.any(VElement.class), Matchers.any(ViewModelContext.class)))
.thenReturn(true);
bundleContext.registerService(EMFFormsAdditionalRendererService.class, rendererService, null);
final Collection<AbstractAdditionalSWTRenderer<VElement>> rendererInstances = rendererFactory
.getAdditionalRendererInstances(vElement, viewModelContext);
Mockito.verify(rendererService, Mockito.times(1)).isApplicable(Matchers.any(VElement.class),
Matchers.any(ViewModelContext.class));
assertEquals(1, rendererInstances.size());
}
/**
* Test method for {@link EMFFormsRendererFactory#getAdditionalRendererInstances(VElement, ViewModelContext)}.
* Testing that an IllegalStateException is thrown when no {@link EMFFormsAdditionalRendererService} is registered.
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testRemoveAdditionalRendererService() {
final EMFFormsAdditionalRendererService<VElement> rendererService = mock(EMFFormsAdditionalRendererService.class);
final ServiceRegistration<EMFFormsAdditionalRendererService> registerService = bundleContext.registerService(
EMFFormsAdditionalRendererService.class, rendererService, null);
registerService.unregister();
final Collection<AbstractAdditionalSWTRenderer<VElement>> rendererInstances = rendererFactory
.getAdditionalRendererInstances(mock(VElement.class), mock(ViewModelContext.class));
assertEquals(0, rendererInstances.size());
}
}