blob: 77465543990c0b251df95117634ec09dcf0a3c52 [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 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:
* CEA LIST - Initial API and implementation
* Eike Stepper (CEA) - bug 466520
*****************************************************************************/
package org.eclipse.papyrus.cdo.uml.internal.ui.importsources.tests;
import static java.util.Collections.singleton;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.papyrus.cdo.internal.ui.views.DIModel;
import org.eclipse.papyrus.cdo.internal.ui.views.DIResourceQuery;
import org.eclipse.papyrus.cdo.ui.tests.AbstractPapyrusCDOUITest;
import org.eclipse.papyrus.cdo.uml.internal.ui.importsources.CDOPackageImportSource;
import org.eclipse.papyrus.infra.core.resource.AbstractBaseModel;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.core.resource.sasheditor.SashModel;
import org.eclipse.papyrus.infra.core.sashwindows.di.DiPackage;
import org.eclipse.papyrus.infra.core.sashwindows.di.SashWindowsMngr;
import org.eclipse.papyrus.infra.widgets.providers.IStaticContentProvider;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.Package;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* This is the CDOPackageImportSourceTest type. Enjoy.
*/
public class CDOPackageImportSourceTest extends AbstractPapyrusCDOUITest {
private TestFixture fixture;
private Model model;
private SashWindowsMngr diModel;
@Test
public void testCanImportInto() {
assertThat(fixture.canImportInto(singleton(model)), is(true));
assertThat(fixture.canImportInto(singleton(model.getOwnedTypes().get(0))), is(false));
}
@Test
public void testCreateModelHierarchyLabelProvider() {
ILabelProvider provider = fixture.getModelHierarchyLabelProvider();
assertThat(provider, notNullValue());
DIModel model = getDIModel();
assertThat(provider.getText(model), containsString("model"));
assertThat(provider.getImage(model), notNullValue());
}
@Test
public void testCreateModelHierarchyContentProvider() throws InterruptedException {
IStaticContentProvider provider = fixture.getModelHierarchyContentProvider(null);
assertThat(provider, instanceOf(ITreeContentProvider.class));
DIModel model = getDIModel();
CDOResourceFolder folder = model.getResource().getFolder();
ITreeContentProvider treeContent = (ITreeContentProvider) provider;
// trigger the asynchronous DIResourceQuery and wait for it to finish
treeContent.getChildren(getInternalCheckout());
DIResourceQuery.waitFor(getInternalCheckout().getView(), 10, TimeUnit.SECONDS);
Object[] children = treeContent.getChildren(folder);
assertThat(Arrays.asList(children), hasItem((Object) model));
assertThat(treeContent.getParent(model), sameInstance((Object) model.getResource().getFolder()));
assertThat(treeContent.hasChildren(model.getResource().getFolder()), is(true));
}
@Test
public void testGetPackages() throws Exception {
DIModel diModel = getDIModel();
List<Package> packages = fixture.getPackages(diModel.getResource().getResourceSet(), diModel);
// get the copy of our model in the master view
Package modelInMasterView = getMasterViewObject(model);
assertThat(packages, hasItem(modelInMasterView));
}
@Test
public void testValidateSelection() {
DIModel diModel = getDIModel();
try {
fixture.validateSelection(diModel);
} catch (CoreException e) {
e.printStackTrace();
fail("Should not have thrown validation exception: " + e.getLocalizedMessage());
}
try {
fixture.validateSelection(diModel.getResource().getFolder());
fail("Should have thrown validation exception.");
} catch (CoreException e) {
// test passes
}
}
@Test
public void testGetCDOResource() {
DIModel diModel = getDIModel();
assertThat(fixture.getCDOResource(diModel), sameInstance(diModel.getResource()));
}
//
// Test framework
//
@Before
public void createTestFixture() throws Exception {
openEditor();
model = (Model) getUMLModel();
fixture = new TestFixture();
fixture.initialize(singleton(model));
ModelSet modelSet = (ModelSet) model.eResource().getResourceSet();
diModel = (SashWindowsMngr) EcoreUtil.getObjectByType(((AbstractBaseModel) modelSet.getModel(SashModel.MODEL_ID)).getResource().getContents(), DiPackage.Literals.SASH_WINDOWS_MNGR);
}
@After
public void disposeTestFixture() {
fixture.dispose();
}
protected DIModel getDIModel() {
// get the resource in the read-only view that corresponds to our DI model
CDOResource resource = getMasterViewObject((CDOResource) diModel.eResource());
return DIModel.getInstance(resource, true);
}
static class TestFixture extends CDOPackageImportSource {
TestFixture() {
super();
}
@Override
protected CDOResource getCDOResource(Object model) {
return super.getCDOResource(model);
}
@Override
protected void validateSelection(Object model) throws CoreException {
super.validateSelection(model);
}
}
}