/*******************************************************************************
* Copyright (c) 2014, 2015 Obeo and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* E.D.Willink (Obeo) - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.examples.test.xtext;
import java.util.ArrayList;
import java.util.Set;
import junit.framework.TestCase;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.plugin.EcorePlugin;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.xtext.tests.TestCaseAppender;
import org.eclipse.ocl.pivot.internal.registry.CompleteOCLRegistry;
import org.eclipse.ocl.pivot.internal.registry.CompleteOCLRegistry.Registration;
import org.eclipse.ocl.pivot.internal.resource.ProjectMap;
import org.eclipse.xtext.junit4.GlobalRegistries;
import org.eclipse.xtext.junit4.GlobalRegistries.GlobalStateMemento;
import org.osgi.framework.Bundle;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
/**
* Tests the CompleteOCLRegistry.
*/
public class RegistryTests extends TestCase
{
@Override
protected void setUp() throws Exception {
super.setUp();
TestCaseAppender.INSTANCE.uninstall();
}
public void testCompleteOCLRegistry_Access() {
GlobalStateMemento copyOfGlobalState = null;
if (!EMFPlugin.IS_ECLIPSE_RUNNING) {
copyOfGlobalState = GlobalRegistries.makeCopyOfGlobalState();
}
try {
EcorePlugin.ExtensionProcessor.process(null);
ResourceSet resourceSet = new ResourceSetImpl();
new ProjectMap(false).initializeResourceSet(resourceSet);
resourceSet.getResource(URI.createPlatformPluginURI("/org.eclipse.emf.ecore/model/Ecore.ecore", true), true);
CompleteOCLRegistry registry = CompleteOCLRegistry.INSTANCE;
Set<URI> registeredResourceURIs = registry.getResourceURIs(resourceSet);
int expectedSize = 1;
if (EMFPlugin.IS_ECLIPSE_RUNNING) {
Bundle bundle = Platform.getBundle("org.eclipse.ocl.examples.project.completeocltutorial");
if (bundle != null) {
expectedSize++;
}
}
assertEquals(expectedSize, registeredResourceURIs.size());
// platform:/plugin/org.eclipse.ocl.examples.xtext.tests/model/ModelWithErrors.ocl
// (running only) platform:/plugin/org.eclipse.ocl.examples.project.completeocltutorial/model/ExtraEcoreValidation.ocl
}
finally { // Remove the bad Xtext ResourceFactories that EcorePlugin.ExtensionProcessor finds
if (copyOfGlobalState != null) {
copyOfGlobalState.restoreGlobalState();
}
}
}
public void testCompleteOCLRegistry_Rebuild() {
@NonNull URI uriA = URI.createURI("A");
@SuppressWarnings("null")@NonNull Set<URI> setOf = Sets.newHashSet();
@SuppressWarnings("null")@NonNull Set<URI> setOf_A = Sets.newHashSet(uriA);
@SuppressWarnings("null")@NonNull ArrayList<String> listOf_a1 = Lists.newArrayList("a1");
@SuppressWarnings("null")@NonNull ArrayList<String> listOf_a2 = Lists.newArrayList("a2");
@SuppressWarnings("null")@NonNull ArrayList<String> listOf_a1_a2 = Lists.newArrayList("a1", "a2");
Registration reg_A_a1 = new Registration(uriA, listOf_a1);
Registration reg_A_a2 = new Registration(uriA, listOf_a2);
Registration reg_A_a1_a2 = new Registration(uriA, listOf_a1_a2);
//
CompleteOCLRegistry registry = new CompleteOCLRegistry();
assertEquals(setOf, registry.getResourceURIs(listOf_a1));
assertEquals(setOf, registry.getResourceURIs(listOf_a2));
//
registry.addRegistration(reg_A_a1_a2);
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1));
assertEquals(setOf_A, registry.getResourceURIs(listOf_a2));
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1_a2));
//
registry.addRegistration(reg_A_a1);
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1));
assertEquals(setOf_A, registry.getResourceURIs(listOf_a2));
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1_a2));
//
registry.removeRegistration(reg_A_a2);
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1));
assertEquals(setOf_A, registry.getResourceURIs(listOf_a2));
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1_a2));
//
registry.removeRegistration(reg_A_a1_a2);
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1));
assertEquals(setOf, registry.getResourceURIs(listOf_a2));
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1_a2));
//
registry.removeRegistration(reg_A_a1);
assertEquals(setOf, registry.getResourceURIs(listOf_a1));
assertEquals(setOf, registry.getResourceURIs(listOf_a2));
assertEquals(setOf, registry.getResourceURIs(listOf_a1_a2));
}
/**
* Confirm that registrations are counted so after adding twice, it remains till removed twice.
*/
public void testCompleteOCLRegistry_Rebuild_Counted() {
@NonNull URI uriA = URI.createURI("A");
@SuppressWarnings("null")@NonNull Set<URI> setOf = Sets.newHashSet();
@SuppressWarnings("null")@NonNull Set<URI> setOf_A = Sets.newHashSet(uriA);
@SuppressWarnings("null")@NonNull ArrayList<String> listOf_a1 = Lists.newArrayList("a1");
Registration reg_A_a1 = new Registration(uriA, listOf_a1);
//
CompleteOCLRegistry registry = new CompleteOCLRegistry();
assertEquals(setOf, registry.getResourceURIs(listOf_a1));
//
registry.addRegistration(reg_A_a1);
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1));
//
registry.addRegistration(reg_A_a1);
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1));
//
registry.removeRegistration(reg_A_a1);
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1));
//
registry.removeRegistration(reg_A_a1);
assertEquals(setOf, registry.getResourceURIs(listOf_a1));
//
registry.addRegistration(reg_A_a1);
assertEquals(setOf_A, registry.getResourceURIs(listOf_a1));
}
}