| /******************************************************************************* |
| * Copyright (c) 2011-2013 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: |
| * Neil Mackenzie - initial implementation |
| ******************************************************************************/ |
| package org.eclipse.emf.ecp.core.rap.test; |
| |
| import java.util.Collection; |
| |
| import junit.framework.TestCase; |
| |
| import org.eclipse.emf.ecp.core.ECPProject; |
| import org.eclipse.emf.ecp.core.ECPProjectManager; |
| import org.eclipse.emf.ecp.core.ECPProviderRegistry; |
| import org.eclipse.emf.ecp.core.ECPRepositoryManager; |
| import org.eclipse.emf.ecp.core.exceptions.ECPProjectWithNameExistsException; |
| import org.eclipse.emf.ecp.core.rap.SessionProvider; |
| import org.eclipse.emf.ecp.core.rap.sessionprovider.test.MockSessionProvider; |
| import org.eclipse.emf.ecp.core.rap.sessionprovider.test.MockSessionProvider.SessionProviderType; |
| import org.eclipse.emf.ecp.core.util.observer.ECPObserverBus; |
| import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider; |
| import org.junit.Test; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.FrameworkUtil; |
| import org.osgi.framework.ServiceReference; |
| |
| /** |
| * |
| * @author neilmack |
| * Tests the service factory classes from the |
| * org.eclipse.emf.ecp.core.rap package. |
| */ |
| @SuppressWarnings("restriction") |
| public class RAPFactories_PTest extends TestCase { |
| /** |
| * Test retrieval of the mock SessionProvider service. |
| */ |
| @Test |
| public void testRetrieveMock() { |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<SessionProvider> ref = bundleContext.getServiceReference(SessionProvider.class); |
| final SessionProvider provider = bundleContext.getService(ref); |
| assertNotNull(provider); |
| bundleContext.ungetService(ref); |
| } |
| |
| /** |
| * test that the ECPProjectManagerFacotry returns a |
| * working ECPProjectManager. |
| * |
| * @throws ECPProjectWithNameExistsException in case of exception |
| */ |
| @Test |
| public final void testServices() throws ECPProjectWithNameExistsException { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider(SessionProviderType.DIFFERENT_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPProjectManager> serviceReference = bundleContext |
| .getServiceReference(ECPProjectManager.class); |
| |
| final ECPProjectManager service1 = bundleContext.getService(serviceReference); |
| final ECPProject project1 = service1.createProject(new EMFStoreProvider(), "Test10"); //$NON-NLS-1$ |
| final ECPProject project2 = service1.createProject(EMFStoreProvider.INSTANCE, "Test2"); //$NON-NLS-1$ |
| |
| bundleContext.ungetService(serviceReference); |
| final ECPProjectManager service2 = bundleContext.getService(serviceReference); |
| assertNotSame(service1, service2); |
| |
| final ECPProject project3 = service2.createProject(EMFStoreProvider.INSTANCE, "Test3"); //$NON-NLS-1$ |
| |
| final Collection<ECPProject> projects1 = service1.getProjects(); |
| assertEquals(2, projects1.size()); |
| assertTrue(projects1.contains(project1)); |
| assertTrue(projects1.contains(project2)); |
| |
| final Collection<ECPProject> projects2 = service2.getProjects(); |
| assertEquals(1, projects2.size()); |
| assertTrue(projects2.contains(project3)); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| /** |
| * Test that when the ECPProjectManagerFactory is asked for |
| * a ECPProjectManager from 2 different sessions, that 2 different |
| * ECPProjectManagers are returned. |
| */ |
| @Test |
| public void testDifferentSessionIdsECPProjectManager() { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider( |
| SessionProviderType.DIFFERENT_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPProjectManager> serviceReference = bundleContext |
| .getServiceReference(ECPProjectManager.class); |
| |
| final ECPProjectManager service1 = bundleContext.getService(serviceReference); |
| bundleContext.ungetService(serviceReference); |
| |
| final ECPProjectManager service2 = bundleContext.getService(serviceReference); |
| assertNotSame(service1, service2); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| /** |
| * Test that when the ECPProjectManageractory is asked for |
| * a ECPProjectManager 2 times from the same session, |
| * that the same ECPProjectManager is returned. |
| */ |
| @Test |
| public void testSameSessionIdsECPProjectManager() { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider(SessionProviderType.SAME_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPProjectManager> serviceReference = bundleContext |
| .getServiceReference(ECPProjectManager.class); |
| |
| final ECPProjectManager service1 = bundleContext.getService(serviceReference); |
| bundleContext.ungetService(serviceReference); |
| |
| final ECPProjectManager service2 = bundleContext.getService(serviceReference); |
| assertSame(service1, service2); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| /** |
| * Test that when the ECPObserverBusFactory is asked for |
| * a ECPObserverBus from 2 different sessions, that 2 different |
| * ECPObserverBus's are returned. |
| */ |
| @Test |
| public final void testDifferentSessionIdsECPObserverBus() { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider(SessionProviderType.DIFFERENT_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPObserverBus> serviceReference = bundleContext |
| .getServiceReference(ECPObserverBus.class); |
| |
| final ECPObserverBus service1 = bundleContext.getService(serviceReference); |
| bundleContext.ungetService(serviceReference); |
| |
| final ECPObserverBus service2 = bundleContext.getService(serviceReference); |
| assertNotSame(service1, service2); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| /** |
| * Test that when the ECPObserverBusFactory is asked for |
| * a ECPObserverBus 2 times from the same session, |
| * that the same ECPObserverBus is returned. |
| */ |
| @Test |
| public final void testSameSessionIdsECPObserverBus() { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider(SessionProviderType.SAME_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPObserverBus> serviceReference = bundleContext |
| .getServiceReference(ECPObserverBus.class); |
| |
| final ECPObserverBus service1 = bundleContext.getService(serviceReference); |
| bundleContext.ungetService(serviceReference); |
| |
| final ECPObserverBus service2 = bundleContext.getService(serviceReference); |
| assertSame(service1, service2); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| /** |
| * Test that when the ECPProviderRegistryFactory is asked for |
| * a ECPProviderRegistry from 2 different sessions, that 2 different |
| * ECPProviderRegistry's are returned. |
| */ |
| @Test |
| public final void testDifferentSessionIdsECPProviderRegistry() { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider(SessionProviderType.DIFFERENT_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPProviderRegistry> serviceReference = bundleContext |
| .getServiceReference(ECPProviderRegistry.class); |
| |
| final ECPProviderRegistry service1 = bundleContext.getService(serviceReference); |
| bundleContext.ungetService(serviceReference); |
| |
| final ECPProviderRegistry service2 = bundleContext.getService(serviceReference); |
| assertNotSame(service1, service2); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| /** |
| * Test that when the ECPProviderRegistryFactory is asked for |
| * a ECPProviderRegistry 2 times from the same session, |
| * that the same ECPProviderRegistry is returned. |
| */ |
| @Test |
| public final void testSameSessionIdsECPProviderRegistry() { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider(SessionProviderType.SAME_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPProviderRegistry> serviceReference = bundleContext |
| .getServiceReference(ECPProviderRegistry.class); |
| |
| final ECPProviderRegistry service1 = bundleContext.getService(serviceReference); |
| bundleContext.ungetService(serviceReference); |
| |
| final ECPProviderRegistry service2 = bundleContext.getService(serviceReference); |
| assertSame(service1, service2); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| /** |
| * Test that when the ECPRepositoryManagerFactory is asked for |
| * a ECPRepositoryManager from 2 different sessions, that 2 different |
| * ECPRepositoryManagers are returned. |
| */ |
| @Test |
| public final void testDifferentSessionIdsECPRepositoryManager() { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider(SessionProviderType.DIFFERENT_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPRepositoryManager> serviceReference = bundleContext |
| .getServiceReference(ECPRepositoryManager.class); |
| |
| final ECPRepositoryManager service1 = bundleContext.getService(serviceReference); |
| bundleContext.ungetService(serviceReference); |
| |
| final ECPRepositoryManager service2 = bundleContext.getService(serviceReference); |
| assertNotSame(service1, service2); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| /** |
| * Test that when the ECPRepositoryManagerFactory is asked for |
| * a ECPRepositoryManager 2 times from the same session, |
| * that the same ECPRepositoryManager is returned. |
| */ |
| @Test |
| public final void testSameSessionIdsECPRepositoryManager() { |
| MockSessionProvider.getInstance(); |
| MockSessionProvider.setSessionProvider(SessionProviderType.SAME_SESSION_ID); |
| final BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext(); |
| final ServiceReference<ECPRepositoryManager> serviceReference = bundleContext |
| .getServiceReference(ECPRepositoryManager.class); |
| |
| final ECPRepositoryManager service1 = bundleContext.getService(serviceReference); |
| bundleContext.ungetService(serviceReference); |
| |
| final ECPRepositoryManager service2 = bundleContext.getService(serviceReference); |
| assertSame(service1, service2); |
| bundleContext.ungetService(serviceReference); |
| } |
| |
| } |