blob: 3c86c6b26ccb7f349a6ff13968536a05daae30c9 [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2013, 2017 CEA LIST.
*
* 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:
* CEA LIST - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.cdo.internal.core.importer.tests;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.URI;
import org.eclipse.papyrus.cdo.core.importer.IModelTransferConfiguration;
import org.eclipse.papyrus.cdo.core.importer.IModelTransferNode;
import org.eclipse.papyrus.cdo.core.importer.IModelTransferOperation;
import org.eclipse.papyrus.cdo.core.tests.TestProject;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import com.google.common.collect.Iterables;
/**
* This is the ModelImportConfigurationTest type. Enjoy.
*/
public class ModelImportConfigurationTest {
private IModelTransferConfiguration fixture;
@Rule
public TestProject isolated = new TestProject("isolated");
@Rule
public TestProject hasDependencies = new TestProject("has_dependencies");
@Rule
public TestProject hasDependents = new TestProject("has_dependents");
public ModelImportConfigurationTest() {
super();
}
@Test
public void testIsolatedModel() {
URI uri = isolated.getResourceURI("model.di");
fixture.addModelToTransfer(uri);
assertThat(fixture.getModelsToTransfer().size(), is(1));
IModelTransferNode node = Iterables.getOnlyElement(fixture.getModelsToTransfer());
assertThat(node.getPrimaryResourceURI(), is(uri));
assertThat(node.getDependencies().size(), is(0));
assertThat(node.getDependents().size(), is(0));
assertThat(node.getResourceURIs().size(), is(3));
assertThat(node.getResourceURIs(), hasItem(uri));
assertThat(node.getResourceURIs(), hasItem(uml(uri)));
assertThat(node.getResourceURIs(), hasItem(notation(uri)));
}
@Test
public void testModelHavingDependencies() {
URI uri = hasDependencies.getResourceURI("model.di");
fixture.addModelToTransfer(uri);
assertThat(fixture.getModelsToTransfer().size(), is(1));
IModelTransferNode node = Iterables.getOnlyElement(fixture.getModelsToTransfer());
assertThat(node.getPrimaryResourceURI(), is(uri));
assertThat(node.getDependencies().size(), is(1));
IModelTransferNode dep = Iterables.getOnlyElement(node.getDependencies());
assertThat(dep.getPrimaryResourceURI(), is(hasDependents.getResourceURI("Datatypes.di")));
assertThat(node.getDependents().size(), is(0));
assertThat(node.getResourceURIs().size(), is(3));
assertThat(node.getResourceURIs(), hasItem(uri));
assertThat(node.getResourceURIs(), hasItem(uml(uri)));
assertThat(node.getResourceURIs(), hasItem(notation(uri)));
}
@Test
public void testModelHavingDependents() {
URI uri = hasDependents.getResourceURI("Datatypes.di");
fixture.addModelToTransfer(uri);
assertThat(fixture.getModelsToTransfer().size(), is(1));
IModelTransferNode node = Iterables.getOnlyElement(fixture.getModelsToTransfer());
assertThat(node.getPrimaryResourceURI(), is(uri));
assertThat(node.getDependencies().size(), is(0));
assertThat(node.getDependents().size(), is(1));
IModelTransferNode dep = Iterables.getOnlyElement(node.getDependents());
assertThat(dep.getPrimaryResourceURI(), is(hasDependencies.getResourceURI("model.di")));
assertThat(node.getResourceURIs().size(), is(3));
assertThat(node.getResourceURIs(), hasItem(uri));
assertThat(node.getResourceURIs(), hasItem(uml(uri)));
assertThat(node.getResourceURIs(), hasItem(notation(uri)));
}
@Test
public void testValidationOfDependents() {
URI uri = hasDependents.getResourceURI("Datatypes.di");
fixture.addModelToTransfer(uri);
assertThat(fixture.getModelsToTransfer().size(), is(1));
IModelTransferNode node = Iterables.getOnlyElement(fixture.getModelsToTransfer());
Diagnostic problems = fixture.validate();
assertThat(problems.getChildren().size(), is(1));
Diagnostic child = problems.getChildren().get(0);
assertThat(child.getSeverity(), is(Diagnostic.WARNING));
assertThat(child.getData().get(0), sameInstance((Object)node));
assertThat(child.getData().get(1), is((Object)node.getDependents()));
fixture.addModelToTransfer(hasDependencies.getResourceURI("model.di"));
problems = fixture.validate();
assertThat(problems.getSeverity(), is(Diagnostic.OK));
assertThat(problems.getChildren().size(), is(0));
}
@Test
public void testValidationOfDependencies() {
URI uri = hasDependencies.getResourceURI("model.di");
fixture.addModelToTransfer(uri);
assertThat(fixture.getModelsToTransfer().size(), is(1));
IModelTransferNode node = Iterables.getOnlyElement(fixture.getModelsToTransfer());
Diagnostic problems = fixture.validate();
assertThat(problems.getChildren().size(), is(1));
Diagnostic child = problems.getChildren().get(0);
assertThat(child.getSeverity(), is(Diagnostic.INFO));
assertThat(child.getData().get(0), sameInstance((Object)node));
assertThat(child.getData().get(1), is((Object)node.getDependencies()));
fixture.addModelToTransfer(hasDependents.getResourceURI("Datatypes.di"));
problems = fixture.validate();
assertThat(problems.getSeverity(), is(Diagnostic.OK));
assertThat(problems.getChildren().size(), is(0));
}
//
// Test framework
//
@Before
public void createTestFixture() {
fixture = IModelTransferConfiguration.Factory.IMPORT.create(new IModelTransferOperation.Context() {
public Diagnostic run(IModelTransferOperation operation) {
operation.run(new NullProgressMonitor());
return Diagnostic.OK_INSTANCE;
}
}, null);
}
@After
public void disposeTestFixture() {
fixture.dispose();
fixture = null;
}
URI uml(URI uri) {
return uri.trimFileExtension().appendFileExtension("uml");
}
URI notation(URI uri) {
return uri.trimFileExtension().appendFileExtension("notation");
}
}