blob: 3d0051622ca5387f8d614ce136e945ed5b65595a [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2013, 2017 CEA LIST 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:
* CEA LIST - Initial API and implementation
* Eike Stepper (CEA) - bug 466520
*****************************************************************************/
package org.eclipse.papyrus.cdo.internal.core.importer.tests;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.URI;
import org.eclipse.papyrus.cdo.core.importer.IModelImportMapping;
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.AbstractPapyrusCDOTest;
import org.eclipse.papyrus.cdo.core.tests.TestProject;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
/**
* This is the OneToOneModelImportMappingTest type. Enjoy.
*/
public class OneToOneModelImportMappingTest extends AbstractPapyrusCDOTest {
private IModelTransferConfiguration config;
private IModelImportMapping fixture;
@Rule
public TestProject hasDependencies = new TestProject("has_dependencies");
@Rule
public TestProject hasDependents = new TestProject("has_dependents");
public OneToOneModelImportMappingTest() {
super();
}
@Test
public void testDefaultMappings() {
URI uri1 = hasDependencies.getResourceURI("model.di");
URI uri2 = hasDependents.getResourceURI("Datatypes.di");
config.addModelToTransfer(uri1);
config.addModelToTransfer(uri2);
assertThat(fixture.getMapping(getNode(uri1)), is((IPath) new Path("/has_dependencies/model.di")));
assertThat(fixture.getMapping(getNode(uri2)), is((IPath) new Path("/has_dependents/Datatypes.di")));
}
@Test
public void testValidation_ok() throws Exception {
URI uri1 = hasDependencies.getResourceURI("model.di");
URI uri2 = hasDependents.getResourceURI("Datatypes.di");
config.addModelToTransfer(uri1);
config.addModelToTransfer(uri2);
Diagnostic problems = fixture.validate();
assertThat(problems.getSeverity(), is(Diagnostic.OK));
assertThat(problems.getChildren().size(), is(0));
}
@Test
public void testValidation_resourceExists() throws Exception {
CDOTransaction transaction = createTransaction();
transaction.getOrCreateResource("has_dependencies/model.di");
transaction.commit();
transaction.close();
URI uri = hasDependencies.getResourceURI("model.di");
config.addModelToTransfer(uri);
Diagnostic problems = fixture.validate();
assertThat(problems.getChildren().size(), is(1));
Diagnostic child = problems.getChildren().get(0);
assertThat(child.getSeverity(), is(Diagnostic.ERROR));
assertThat(child.getMessage(), containsString("Resource already exists"));
assertThat(child.getData().get(0), sameInstance((Object) getNode(uri)));
}
@Test
public void testValidation_mappingAbsent() {
URI uri = hasDependencies.getResourceURI("model.di");
config.addModelToTransfer(uri);
fixture.mapTo(getNode(uri), null);
Diagnostic problems = fixture.validate();
assertThat(problems.getChildren().size(), is(1));
Diagnostic child = problems.getChildren().get(0);
assertThat(child.getSeverity(), is(Diagnostic.ERROR));
assertThat(child.getMessage(), containsString("No mapping"));
assertThat(child.getData().get(0), sameInstance((Object) getNode(uri)));
}
@Test
public void testValidation_repository() throws Exception {
getCheckout().close();
Diagnostic problems = fixture.validate();
assertThat(problems.getChildren().size(), is(1));
Diagnostic child = problems.getChildren().get(0);
assertThat(child.getSeverity(), is(Diagnostic.ERROR));
assertThat(child.getMessage(), containsString("is not open"));
assertThat(child.getData().get(0), sameInstance((Object) getCheckout()));
fixture.setCheckout(null);
problems = fixture.validate();
assertThat(problems.getChildren().size(), is(1));
child = problems.getChildren().get(0);
assertThat(child.getSeverity(), is(Diagnostic.ERROR));
assertThat(child.getMessage(), containsString("No checkout"));
}
//
// Test framework
//
@Before
public void createTestFixture() {
config = IModelTransferConfiguration.Factory.IMPORT.create(new IModelTransferOperation.Context() {
public Diagnostic run(IModelTransferOperation operation) {
operation.run(new NullProgressMonitor());
return Diagnostic.OK_INSTANCE;
}
}, null);
fixture = IModelImportMapping.Factory.ONE_TO_ONE.create(config);
fixture.setCheckout(getCheckout());
}
@After
public void disposeTestFixture() {
fixture = null;
config.dispose();
config = null;
}
IModelTransferNode getNode(URI uri) {
IModelTransferNode result = null;
for (IModelTransferNode next : config.getModelsToTransfer()) {
if (next.getPrimaryResourceURI().equals(uri)) {
result = next;
break;
}
}
return result;
}
}