diff options
Diffstat (limited to 'cdo/tests/uml/org.eclipse.uml2.uml.cdo.tests/src/org/eclipse/uml2/uml/cdo/tests/UMLSelfTest.java')
-rwxr-xr-x | cdo/tests/uml/org.eclipse.uml2.uml.cdo.tests/src/org/eclipse/uml2/uml/cdo/tests/UMLSelfTest.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/cdo/tests/uml/org.eclipse.uml2.uml.cdo.tests/src/org/eclipse/uml2/uml/cdo/tests/UMLSelfTest.java b/cdo/tests/uml/org.eclipse.uml2.uml.cdo.tests/src/org/eclipse/uml2/uml/cdo/tests/UMLSelfTest.java new file mode 100755 index 00000000..46f0a5ce --- /dev/null +++ b/cdo/tests/uml/org.eclipse.uml2.uml.cdo.tests/src/org/eclipse/uml2/uml/cdo/tests/UMLSelfTest.java @@ -0,0 +1,130 @@ +package org.eclipse.uml2.uml.cdo.tests; + +import java.io.CharArrayWriter; +import java.io.File; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.emf.cdo.session.CDOSession; +import org.eclipse.emf.cdo.transaction.CDOTransaction; +import org.eclipse.emf.common.util.TreeIterator; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.ecore.xmi.XMIResource; +import org.eclipse.net4j.util.io.IOUtil; +import org.eclipse.uml2.uml.resource.UMLResource; + +/** + * @author Eike Stepper + */ +public class UMLSelfTest + extends AbstractUMLTest { + + private static final boolean PERSIST_RESULTS = false; + + private static final String GIT_CLONE_UML2 = System + .getProperty("git.clone.uml2").replace('\\', '/'); + + private static final URI GIT_URI = URI.createFileURI(GIT_CLONE_UML2); + + private static final String UML_UML = GIT_CLONE_UML2 + + "/plugins/org.eclipse.uml2.uml/model/UML.uml"; + + private static final String UML_TEST_UML = "UMLTest.uml"; + + @Override + protected boolean dbScenario() { + return true; + } + + public void testSelf() + throws Exception { + + UMLResource umlResource = loadUMLResource(UML_UML); + EcoreUtil.resolveAll(umlResource.getResourceSet()); + List<String> xmiDs = listIDs(umlResource); + + URI uri = umlResource.getURI(); + System.out.println(uri); + Resource cdoResource = createResource(umlResource.getContents()); + + saveResources(); + System.out.println(); + + CDOSession session2 = openSession(); + CDOTransaction transaction2 = session2.openTransaction(); + ResourceSet cdoResourceSet = transaction2.getResourceSet(); + configureUMLResourceSet(cdoResourceSet); + + Resource resource2 = cdoResourceSet.getResource(cdoResource.getURI(), + true); + + for (TreeIterator<EObject> it = resource2.getAllContents(); it + .hasNext();) { + EObject element = it.next(); + System.out.println(element); + } + + UMLResource umlResource2 = createUMLResource(UML_TEST_UML); + umlResource2.getContents().addAll(resource2.getContents()); + applyIDs(umlResource2, xmiDs); + + CharArrayWriter output = new CharArrayWriter(); + umlResource2.save(output, null); + + String umlTest = output.toString(); + umlTest = removeHeader(umlTest); + umlTest = umlTest + .replace(GIT_URI + "/plugins/org.eclipse.uml2.uml/model/", ""); + umlTest = umlTest.replace(GIT_URI + "/plugins/", "../../"); + + if (PERSIST_RESULTS) { + IOUtil.writeFile(new File(UML_TEST_UML), umlTest.getBytes()); + } + + String uml = IOUtil.readTextFile(new File(UML_UML)); + uml = removeHeader(uml); + + if (PERSIST_RESULTS) { + IOUtil.writeFile(new File("UMLExpected.uml"), uml.getBytes()); + } + + assertEquals(uml, umlTest); + } + + private static String removeHeader(String xmi) { + return xmi.replaceFirst("<xmi:XMI [^>]*>", ""); + } + + private static List<String> listIDs(XMIResource resource) { + List<String> ids = new ArrayList<String>(); + + for (TreeIterator<EObject> it = resource.getAllContents(); it + .hasNext();) { + EObject element = it.next(); + String id = resource.getID(element); + if (id != null) { + ids.add(id); + } + } + + return ids; + } + + private static void applyIDs(XMIResource resource, List<String> ids) { + Iterator<String> idIterator = ids.iterator(); + + for (TreeIterator<EObject> it = resource.getAllContents(); it + .hasNext();) { + EObject element = it.next(); + String id = resource.getID(element); + if (id != null) { + resource.setID(element, idIterator.next()); + } + } + } +} |