blob: c1c243770382ca05fb6bbef5f06def2352a45cce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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 v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Stefan Dirix - initial API and implementation
*******************************************************************************/
package org.eclipse.papyrus.compare.diagram.tests.modelextension;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import com.google.common.collect.Iterables;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Map;
import org.eclipse.core.internal.registry.ExtensionRegistry;
import org.eclipse.core.runtime.ContributorFactoryOSGi;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.papyrus.compare.diagram.tests.modelextension.data.customparametermodel.CustomParameterModel;
import org.eclipse.papyrus.compare.diagram.tests.util.PapyrusSaveParameterUtil;
import org.eclipse.papyrus.compare.diagram.util.ModelExtensionUtil;
import org.eclipse.papyrus.infra.core.resource.AbstractBaseModel;
import org.junit.Test;
import org.osgi.framework.Bundle;
/**
* Tests the {@link ModelExtensionUtil} class.
*
* @author Stefan Dirix <sdirix@eclipsesource.com>
*/
@SuppressWarnings({"restriction", "nls" })
public class ModelExtensionUtilTest {
/**
* Tests if the Papyrus Model Extension Point can be found in the registry and has some default elements
* registered.
*/
@Test
public void testGetModelExtensionsPapyrus() {
final IConfigurationElement[] elements = ModelExtensionUtil.getModelExtensions();
assertNotNull(elements);
// check if at least the number of default papyrus models are registered
assertTrue(elements.length >= 3);
}
/**
* Checks for the default file extensions registered by Papyrus.
*/
@Test
public void testGetRegisteredFileExtensionsPapyrus() {
final Collection<String> registeredFileExtensions = ModelExtensionUtil.getRegisteredFileExtensions();
assertNotNull(registeredFileExtensions);
// check for null entries
assertFalse(Iterables.contains(registeredFileExtensions, null));
// check for default file extensions registered in Papyrus
assertTrue(Iterables.contains(registeredFileExtensions, "di"));
assertTrue(Iterables.contains(registeredFileExtensions, "notation"));
assertTrue(Iterables.contains(registeredFileExtensions, "uml"));
}
/**
* Checks if a custom file extension is correctly handled by the {@link ModelExtensionUtil}.
*
* @throws IOException
* If an Exception occurs during reading the custom extension file.
*/
@Test
public void testGetRegisteredFileExtensionsCustom() throws IOException {
register("fileextension/fileextension.xml");
final Collection<String> registeredFileExtensions = ModelExtensionUtil.getRegisteredFileExtensions();
assertNotNull(registeredFileExtensions);
// check if custom file extension was registered
assertTrue(Iterables.contains(registeredFileExtensions, "fileextensiontest"));
}
/**
* Checks if the {@link ModelExtensionUtil} filters {@code null} file extension.
*
* @throws IOException
* If an exception occurs during reading the custom extension file.
*/
@Test
public void testNullRegisteredFileExtension() throws IOException {
final boolean registered = register("nulldata/nullextension.xml");
assertTrue(registered);
// check for null entries
final Collection<String> registeredFileExtensions = ModelExtensionUtil.getRegisteredFileExtensions();
assertFalse(Iterables.contains(registeredFileExtensions, null));
}
/**
* Checks if the retrieved save parameters of .di, .notation and .uml files correspond to the actual save
* parameters used by Papyrus.
*/
@Test
public void testGetSaveParametersPapyrus() {
final Map<?, ?> diSaveParameters = ModelExtensionUtil.getSaveParameters("di");
final Map<?, ?> papyrusDiSaveParameters = PapyrusSaveParameterUtil.getDISaveParameter();
assertTrue(PapyrusSaveParameterUtil.isEqual(diSaveParameters, papyrusDiSaveParameters));
final Map<?, ?> umlSaveParameters = ModelExtensionUtil.getSaveParameters("uml");
final Map<?, ?> papyrusUmlSaveParameters = PapyrusSaveParameterUtil.getUMLSaveParameter();
assertTrue(PapyrusSaveParameterUtil.isEqual(umlSaveParameters, papyrusUmlSaveParameters));
final Map<?, ?> notationSaveParameters = ModelExtensionUtil.getSaveParameters("notation");
final Map<?, ?> papyrusNotationSaveParameters = PapyrusSaveParameterUtil.getNotationSaveParameter();
assertTrue(PapyrusSaveParameterUtil.isEqual(notationSaveParameters, papyrusNotationSaveParameters));
}
/**
* Tests if the {@link ModelExtensionUtil} can handle a missing or wrong registered model.
*
* @throws IOException
* If an exception occurs during reading the custom extension file.
*/
@Test
public void testGetSaveParametersNullModel() throws IOException {
final boolean registered = register("nullmodel/nullmodel.xml");
assertTrue(registered);
final Map<?, ?> saveParameters = ModelExtensionUtil.getSaveParameters("nullmodeltest");
assertTrue(saveParameters.isEmpty());
}
/**
* Tests if the {@link ModelExtensionUtil} can handle models which return {@code null} as save parameter.
*
* @throws IOException
* If an exception occurs during reading the custom extension file.
*/
@Test
public void testGetSaveParametersNullParameterModel() throws IOException {
final boolean registered = register("nullparametermodel/nullparametermodel.xml");
assertTrue(registered);
final Map<?, ?> saveParameters = ModelExtensionUtil.getSaveParameters("nullparametermodeltest");
assertTrue(saveParameters.isEmpty());
}
/**
* Tests if the {@link ModelExtensionUtil} can handle models which throw a RuntimeException.
*
* @throws IOException
* If an exception occurs during reading the custom extension file.
*/
@Test
public void testGetSaveParametersRuntimeExceptionModel() throws IOException {
final boolean registered = register("runtimeexceptionmodel/runtimeexceptionmodel.xml");
assertTrue(registered);
final Map<?, ?> saveParameters = ModelExtensionUtil.getSaveParameters("runtimeexceptionmodeltest");
final Map<?, ?> defaultPapyrusSaveParameters = PapyrusSaveParameterUtil.getDefaultSaveParameter();
assertTrue(PapyrusSaveParameterUtil.isEqual(saveParameters, defaultPapyrusSaveParameters));
}
/**
* Tests if the {@link ModelExtensionUtil} can handle models which are not a subclass of
* {@link AbstractBaseModel} and therefore do not offer a method to retrieve save parameters.
*
* @throws IOException
* If an exception occurs during reading the custom extension file.
*/
@Test
public void testGetSaveParametersNoParameterModel() throws IOException {
final boolean registered = register("noparametermodel/noparametermodel.xml");
assertTrue(registered);
final Map<?, ?> saveParameters = ModelExtensionUtil.getSaveParameters("noparametermodeltest");
assertTrue(saveParameters.isEmpty());
}
/**
* Tests if the {@link ModelExtensionUtil} correctly retrieves custom save parameters declared within a
* custom model.
*
* @throws IOException
* If an exception occurs during reading the custom extension file.
*/
@Test
public void testGetSaveParametersCustomParameterModel() throws IOException {
final boolean registered = register("customparametermodel/customparametermodel.xml");
assertTrue(registered);
final Map<?, ?> saveParameters = ModelExtensionUtil.getSaveParameters("customparametermodeltest");
final CustomParameterModel customParameterModel = new CustomParameterModel();
assertTrue(PapyrusSaveParameterUtil.isEqual(saveParameters,
customParameterModel.getSaveParametersForTest()));
}
/**
* Helper method to register an extension.
*
* @param extensionPath
* The path to the extension xml file relative to the data directory.
* @return {@code true} if the extension was successfully registered, {@code false} otherwise.
* @throws IOException
* If an exception occurs during reading the custom extension file.
*/
private boolean register(final String extensionPath) throws IOException {
try (final InputStream inputStream = getClass().getResource("data/" + extensionPath).openStream()) {
final Bundle bundle = Platform.getBundle("org.eclipse.papyrus.compare.diagram.tests");
final ExtensionRegistry registry = (ExtensionRegistry)Platform.getExtensionRegistry();
return registry.addContribution(inputStream, ContributorFactoryOSGi.createContributor(bundle),
false, extensionPath, null, registry.getTemporaryUserToken());
}
}
}