blob: e4e028eb50a462dd643b33723afe0f5489ce2795 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Obeo.
* 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:
* Obeo - initial API and implementation and/or initial documentation
* ...
*******************************************************************************/
package org.eclipse.intent.mapping.tests.base;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.intent.mapping.MappingUtils;
import org.eclipse.intent.mapping.base.ContainerProviderFactory;
import org.eclipse.intent.mapping.base.IBase;
import org.eclipse.intent.mapping.base.ILink;
import org.eclipse.intent.mapping.base.ILocation;
import org.eclipse.intent.mapping.base.IReport;
import org.eclipse.intent.mapping.connector.IContainerProvider;
import org.eclipse.intent.mapping.emf.ICouple;
import org.eclipse.intent.mapping.tests.base.BaseElementFactoryTests.TestLocation;
import org.eclipse.intent.mapping.text.ITextLocation;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* Test {@link IBase}.
*
* @author <a href="mailto:yvan.lussaud@obeo.fr">Yvan Lussaud</a>
*/
public abstract class AbstractBaseTests extends AbstractMappingTests {
/**
* A test {@link IContainerProvider}.
*
* @author <a href="mailto:yvan.lussaud@obeo.fr">Yvan Lussaud</a>
*/
public static class TestContainerProvider1 implements IContainerProvider {
/**
* The container.
*/
public static final Object CONTAINER = new Object();
/**
* The child.
*/
public static final Object CHILD = new Object();
public Object getContainer(Object element) {
final Object res;
if (element == CHILD) {
res = CONTAINER;
} else {
res = null;
}
return res;
}
public Class<? extends ILocation> getType() {
return TestLocation.class;
}
}
/**
* A test {@link IContainerProvider}.
*
* @author <a href="mailto:yvan.lussaud@obeo.fr">Yvan Lussaud</a>
*/
public static class TestContainerProvider2 implements IContainerProvider {
/**
* The container.
*/
public static final Object CONTAINER = new Object();
/**
* The child.
*/
public static final Object CHILD = new Object();
public Object getContainer(Object element) {
final Object res;
if (element == CHILD) {
res = CONTAINER;
} else {
res = null;
}
return res;
}
public Class<? extends ILocation> getType() {
return TestLocation.class;
}
}
@Test
public void setNameNull() {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
base.setName(null);
assertNull(base.getName());
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void setName() {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
base.setName("base");
assertEquals("base", base.getName());
assertTestBaseListener(listener, 1, 0, 0, 0, 0, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void getNameDefault() {
final IBase base = getBase();
assertNull(base.getName());
}
@Test
public void addRootLocation() throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
final ILocation location = base.getFactory().createElement(ITextLocation.class);
base.getContents().add(location);
assertEquals(1, base.getContents().size());
assertEquals(location, base.getContents().get(0));
assertTestBaseListener(listener, 0, 1, 0, 0, 0, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void addManyRootLocations() throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
final ILocation location1 = base.getFactory().createElement(ITextLocation.class);
final ILocation location2 = base.getFactory().createElement(ITextLocation.class);
final List<ILocation> locations = new ArrayList<ILocation>();
locations.add(location1);
locations.add(location2);
base.getContents().addAll(locations);
assertEquals(2, base.getContents().size());
assertEquals(location1, base.getContents().get(0));
assertEquals(location2, base.getContents().get(1));
assertTestBaseListener(listener, 0, 2, 0, 0, 0, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void removeRootLocation() throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
final ILocation location = base.getFactory().createElement(ITextLocation.class);
base.getContents().add(location);
assertEquals(1, base.getContents().size());
assertEquals(location, base.getContents().get(0));
base.getContents().remove(location);
assertEquals(0, base.getContents().size());
assertTestBaseListener(listener, 0, 1, 1, 0, 0, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void removeManyRootLocations() throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
final ILocation location1 = base.getFactory().createElement(ITextLocation.class);
final ILocation location2 = base.getFactory().createElement(ITextLocation.class);
final List<ILocation> locations = new ArrayList<ILocation>();
locations.add(location1);
locations.add(location2);
base.getContents().addAll(locations);
assertEquals(2, base.getContents().size());
assertEquals(location1, base.getContents().get(0));
assertEquals(location2, base.getContents().get(1));
base.getContents().removeAll(locations);
assertEquals(0, base.getContents().size());
assertTestBaseListener(listener, 0, 2, 2, 0, 0, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void addReport() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
final IReport report = base.getFactory().createElement(IReport.class);
base.getReports().add(report);
assertEquals(1, base.getReports().size());
assertEquals(report, base.getReports().get(0));
assertTestBaseListener(listener, 0, 0, 0, 1, 0, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void addManyReports() throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
final IReport report1 = base.getFactory().createElement(IReport.class);
final IReport report2 = base.getFactory().createElement(IReport.class);
final List<IReport> reports = new ArrayList<IReport>();
reports.add(report1);
reports.add(report2);
base.getReports().addAll(reports);
assertEquals(2, base.getReports().size());
assertEquals(report1, base.getReports().get(0));
assertEquals(report2, base.getReports().get(1));
assertTestBaseListener(listener, 0, 0, 0, 2, 0, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void removeReport() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
final IReport report = base.getFactory().createElement(IReport.class);
base.getReports().add(report);
assertEquals(1, base.getReports().size());
assertEquals(report, base.getReports().get(0));
base.getReports().remove(report);
assertEquals(0, base.getReports().size());
assertTestBaseListener(listener, 0, 0, 0, 1, 1, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void removeManyReports() throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
final IReport report1 = base.getFactory().createElement(IReport.class);
final IReport report2 = base.getFactory().createElement(IReport.class);
final List<IReport> reports = new ArrayList<IReport>();
reports.add(report1);
reports.add(report2);
base.getReports().addAll(reports);
assertEquals(2, base.getReports().size());
assertEquals(report1, base.getReports().get(0));
assertEquals(report2, base.getReports().get(1));
base.getReports().removeAll(reports);
assertEquals(0, base.getReports().size());
assertTestBaseListener(listener, 0, 0, 0, 2, 2, 0, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
}
@Test
public void addContainerProvider() {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
MappingUtils.getContainerProviderFactory().addDescriptor(
new ContainerProviderFactory.FactoryDescriptor(TestContainerProvider1.class));
final String containerProvider = "org.eclipse.intent.mapping.tests.base.AbstractBaseTests.TestContainerProvider1";
base.getContainerProviders().add(containerProvider);
assertEquals(1, base.getContainerProviders().size());
assertEquals(containerProvider, base.getContainerProviders().get(0));
assertEquals(TestContainerProvider1.CONTAINER, base.getContainerProviderRegistry().getContainer(
TestContainerProvider1.CHILD));
assertTestBaseListener(listener, 0, 0, 0, 0, 0, 1, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
MappingUtils.getContainerProviderFactory().removeDescriptor(TestContainerProvider1.class
.getCanonicalName());
}
@Test
public void addManyContainerProviders() {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
MappingUtils.getContainerProviderFactory().addDescriptor(
new ContainerProviderFactory.FactoryDescriptor(TestContainerProvider1.class));
MappingUtils.getContainerProviderFactory().addDescriptor(
new ContainerProviderFactory.FactoryDescriptor(TestContainerProvider2.class));
final String containerProvider1 = "org.eclipse.intent.mapping.tests.base.AbstractBaseTests.TestContainerProvider1";
final String containerProvider2 = "org.eclipse.intent.mapping.tests.base.AbstractBaseTests.TestContainerProvider2";
final List<String> containerProviders = new ArrayList<String>();
containerProviders.add(containerProvider1);
containerProviders.add(containerProvider2);
base.getContainerProviders().addAll(containerProviders);
assertEquals(2, base.getContainerProviders().size());
assertEquals(containerProvider1, base.getContainerProviders().get(0));
assertEquals(containerProvider2, base.getContainerProviders().get(1));
assertEquals(TestContainerProvider1.CONTAINER, base.getContainerProviderRegistry().getContainer(
TestContainerProvider1.CHILD));
assertEquals(TestContainerProvider2.CONTAINER, base.getContainerProviderRegistry().getContainer(
TestContainerProvider2.CHILD));
assertTestBaseListener(listener, 0, 0, 0, 0, 0, 2, 0);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
MappingUtils.getContainerProviderFactory().removeDescriptor(TestContainerProvider1.class
.getCanonicalName());
MappingUtils.getContainerProviderFactory().removeDescriptor(TestContainerProvider2.class
.getCanonicalName());
}
@Test
public void removeContainerProvider() {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
MappingUtils.getContainerProviderFactory().addDescriptor(
new ContainerProviderFactory.FactoryDescriptor(TestContainerProvider1.class));
final String containerProvider = "org.eclipse.intent.mapping.tests.base.AbstractBaseTests.TestContainerProvider1";
base.getContainerProviders().add(containerProvider);
assertEquals(1, base.getContainerProviders().size());
assertEquals(containerProvider, base.getContainerProviders().get(0));
assertEquals(TestContainerProvider1.CONTAINER, base.getContainerProviderRegistry().getContainer(
TestContainerProvider1.CHILD));
base.getContainerProviders().remove(containerProvider);
assertEquals(0, base.getContainerProviders().size());
assertEquals(null, base.getContainerProviderRegistry().getContainer(TestContainerProvider1.CHILD));
assertTestBaseListener(listener, 0, 0, 0, 0, 0, 1, 1);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
MappingUtils.getContainerProviderFactory().removeDescriptor(TestContainerProvider1.class
.getCanonicalName());
}
@Test
public void removeManyContainerProviders() {
final TestBaseListener listener = new TestBaseListener();
final TestBaseListener removedListener = new TestBaseListener();
final IBase base = getBase();
base.addListener(listener);
base.addListener(removedListener);
base.removeListener(removedListener);
MappingUtils.getContainerProviderFactory().addDescriptor(
new ContainerProviderFactory.FactoryDescriptor(TestContainerProvider1.class));
MappingUtils.getContainerProviderFactory().addDescriptor(
new ContainerProviderFactory.FactoryDescriptor(TestContainerProvider2.class));
final String containerProvider1 = "org.eclipse.intent.mapping.tests.base.AbstractBaseTests.TestContainerProvider1";
final String containerProvider2 = "org.eclipse.intent.mapping.tests.base.AbstractBaseTests.TestContainerProvider2";
final List<String> containerProviders = new ArrayList<String>();
containerProviders.add(containerProvider1);
containerProviders.add(containerProvider2);
base.getContainerProviders().addAll(containerProviders);
assertEquals(2, base.getContainerProviders().size());
assertEquals(containerProvider1, base.getContainerProviders().get(0));
assertEquals(containerProvider2, base.getContainerProviders().get(1));
assertEquals(TestContainerProvider1.CONTAINER, base.getContainerProviderRegistry().getContainer(
TestContainerProvider1.CHILD));
assertEquals(TestContainerProvider2.CONTAINER, base.getContainerProviderRegistry().getContainer(
TestContainerProvider2.CHILD));
base.getContainerProviders().removeAll(containerProviders);
assertEquals(0, base.getContainerProviders().size());
assertEquals(null, base.getContainerProviderRegistry().getContainer(TestContainerProvider1.CHILD));
assertEquals(null, base.getContainerProviderRegistry().getContainer(TestContainerProvider2.CHILD));
assertTestBaseListener(listener, 0, 0, 0, 0, 0, 2, 2);
assertTestBaseListener(removedListener, 0, 0, 0, 0, 0, 0, 0);
MappingUtils.getContainerProviderFactory().removeDescriptor(TestContainerProvider1.class
.getCanonicalName());
MappingUtils.getContainerProviderFactory().removeDescriptor(TestContainerProvider2.class
.getCanonicalName());
}
@Test
public void testCreateCouple() throws Exception {
final IBase base = getBase();
final ICouple element = base.getFactory().createElement(ICouple.class);
assertTrue(element instanceof ICouple);
}
@Test
public void testCreateLink() throws Exception {
final IBase base = getBase();
final ILink element = base.getFactory().createElement(ILink.class);
assertTrue(element instanceof ILink);
}
@Test
public void testCreateReport() throws Exception {
final IBase base = getBase();
final IReport element = base.getFactory().createElement(IReport.class);
assertTrue(element instanceof IReport);
}
@Test
public void testCreateTextLocation() throws Exception {
final IBase base = getBase();
final ITextLocation element = base.getFactory().createElement(ITextLocation.class);
assertTrue(element instanceof ITextLocation);
}
}