blob: 6bf402336f491b2714d86a05fc06248f90a60236 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2012 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 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:
* Eugen Neufeld - initial API and implementation
*
*******************************************************************************/
package org.eclipse.emf.ecp.core.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecp.core.exceptions.ECPProjectWithNameExistsException;
import org.eclipse.emf.ecp.spi.core.InternalProject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* ECPProject-tests
*
* @author Tobias Verhoeven
*/
public class ECPProject_PTest extends AbstractTest {
/** The project. */
private InternalProject project;
/**
* Setup.
*/
@Before
public void setup() {
boolean done = false;
while (!done) {
try {
project = (InternalProject) getProjectManager().createProject(getProvider(),
"Projekt " + UUID.randomUUID());
done = true;
} catch (final ECPProjectWithNameExistsException e) {
}
}
}
/**
* Tear down.
*/
@After
public void tearDown() {
project.delete();
}
/**
* Test get elements.
*/
@Test
public void testGetElements() {
assertEquals(0, project.getContents().size());
final EObject clazz = EcoreFactory.eINSTANCE.createEClass();
final EObject reference = EcoreFactory.eINSTANCE.createEReference();
project.getContents().add(clazz);
assertEquals(1, project.getContents().size());
assertTrue(project.contains(clazz));
assertTrue(project.getContents().contains(clazz));
project.getContents().add(reference);
assertEquals(2, project.getContents().size());
assertTrue(project.contains(clazz));
assertTrue(project.getContents().contains(clazz));
assertTrue(project.contains(reference));
assertTrue(project.getContents().contains(reference));
project.getContents().remove(clazz);
assertEquals(1, project.getContents().size());
assertFalse(project.contains(clazz));
assertFalse(project.getContents().contains(clazz));
assertTrue(project.contains(reference));
assertTrue(project.getContents().contains(reference));
project.getContents().remove(reference);
assertEquals(0, project.getContents().size());
assertFalse(project.contains(clazz));
assertFalse(project.getContents().contains(clazz));
assertFalse(project.contains(reference));
assertFalse(project.getContents().contains(reference));
}
/**
* Test get unsupported e packages.
*/
@Test
public void testGetUnsupportedEPackages() {
project.getUnsupportedEPackages();
// TODO add correct assert
// fail("This method always returns an empty list");
}
/**
* Test visible packages.
*/
@Test
public void testVisiblePackages() {
final Set<EPackage> packages = project.getVisiblePackages();
assertFalse(packages.contains(EcorePackage.eINSTANCE));
final EObject clazz = EcoreFactory.eINSTANCE.createEClass();
final EObject reference = EcoreFactory.eINSTANCE.createEReference();
project.getContents().add(clazz);
assertTrue(project.contains(clazz));
packages.add(EcorePackage.eINSTANCE);
assertTrue(packages.contains(EcorePackage.eINSTANCE));
project.getContents().add(reference);
assertTrue(project.contains(reference));
}
/**
* Test visible classes.
*/
@Test
public void testVisibleClasses() {
boolean failed = true;
final EObject clazz = EcoreFactory.eINSTANCE.createEClass();
final EObject reference = EcoreFactory.eINSTANCE.createEReference();
try {
project.getVisibleEClasses().add(clazz.eClass());
} catch (final UnsupportedOperationException upe) {
failed = false;
}
if (failed) {
fail("Class list is modifiable");
}
final Set<EClass> classes = new HashSet<EClass>(project.getVisibleEClasses());
assertEquals(0, classes.size());
classes.add(clazz.eClass());
project.setVisibleEClasses(classes);
assertEquals(1, project.getVisibleEClasses().size());
assertTrue(project.getVisibleEClasses().contains(clazz.eClass()));
classes.add(reference.eClass());
assertEquals(2, project.getVisibleEClasses().size());
assertTrue(project.getVisibleEClasses().contains(clazz.eClass()));
assertTrue(project.getVisibleEClasses().contains(reference.eClass()));
}
/**
* Test get reference candidates.
*/
@Test
public void testGetReferenceCandidates() {
final EObject clazz = EcoreFactory.eINSTANCE.createEClass();
final EObject referenceObjectA = EcoreFactory.eINSTANCE.createEReference();
referenceObjectA.eSet(referenceObjectA.eClass().getEStructuralFeature("name"), "my little reference");
final EObject referenceObjectB = EcoreFactory.eINSTANCE.createEReference();
referenceObjectB.eSet(referenceObjectB.eClass().getEStructuralFeature("name"), "my big reference");
final EReference reference = (EReference) clazz.eClass().getEStructuralFeature(EcorePackage.EREFERENCE);
project.getContents().add(clazz);
assertFalse(project.getReferenceCandidates(clazz, reference).hasNext());
project.getContents().add(referenceObjectA);
Iterator<EObject> iterator = project.getReferenceCandidates(clazz, reference);
final List<EObject> objects = new ArrayList<EObject>(2);
while (iterator.hasNext()) {
objects.add(iterator.next());
}
assertFalse(iterator.hasNext());
assertEquals(1, objects.size());
assertTrue(objects.contains(referenceObjectA));
objects.clear();
project.getContents().add(referenceObjectB);
iterator = project.getReferenceCandidates(clazz, reference);
while (iterator.hasNext()) {
objects.add(iterator.next());
}
assertFalse(iterator.hasNext());
assertEquals(2, objects.size());
assertTrue(objects.contains(referenceObjectA));
assertTrue(objects.contains(referenceObjectB));
}
/**
* Test save properties.
*/
@SuppressWarnings("deprecation")
@Test
public void testSaveProperties() {
project.saveProperties();
}
/**
* Test dirty save model.
*/
@Test
public void testDirtySaveModel() {
final EObject clazz = EcoreFactory.eINSTANCE.createEClass();
assertFalse(project.hasDirtyContents());
project.getContents().add(clazz);
assertTrue(project.hasDirtyContents());
project.saveContents();
assertFalse(project.hasDirtyContents());
}
/**
* Test delete elements.
*/
@Test
public void testDeleteElements() {
final EObject clazz = EcoreFactory.eINSTANCE.createEClass();
final EObject reference = EcoreFactory.eINSTANCE.createEReference();
final EObject attribute = EcoreFactory.eINSTANCE.createEAttribute();
assertEquals(0, project.getContents().size());
project.getContents().add(clazz);
project.getContents().add(reference);
assertEquals(2, project.getContents().size());
final Collection<Object> collection = new ArrayList<Object>();
collection.add(clazz);
project.deleteElements(collection);
assertEquals(1, project.getContents().size());
assertTrue(project.contains(reference));
assertFalse(project.contains(clazz));
collection.clear();
collection.add(reference);
project.deleteElements(collection);
assertEquals(0, project.getContents().size());
project.getContents().add(clazz);
project.getContents().add(reference);
project.getContents().add(attribute);
collection.clear();
collection.add(clazz);
collection.add(reference);
collection.add(attribute);
assertEquals(3, project.getContents().size());
project.deleteElements(collection);
assertEquals(0, project.getContents().size());
boolean thrown = false;
try {
collection.clear();
collection.add(clazz);
project.deleteElements(collection);
} catch (final IllegalArgumentException iae) {
thrown = true;
}
assertTrue(thrown);
}
/**
* Checks if is modelroot.
*/
@Test
public void testIsModelroot() {
final EObject clazz = EcoreFactory.eINSTANCE.createEClass();
final EObject reference = EcoreFactory.eINSTANCE.createEReference();
final EObject attribute = EcoreFactory.eINSTANCE.createEAttribute();
assertEquals(0, project.getContents().size());
project.getContents().add(clazz);
project.getContents().add(reference);
project.getContents().add(attribute);
assertEquals(3, project.getContents().size());
assertFalse(project.isModelRoot(clazz));
assertFalse(project.isModelRoot(reference));
assertFalse(project.isModelRoot(attribute));
assertTrue(project.isModelRoot(clazz.eContainer()));
}
}