/**
* Copyright (c) 2013 IBM Corporation 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:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.test.xml.xmi;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.emf.test.models.library.Book;
import org.eclipse.emf.test.models.library.Library;
import org.eclipse.emf.test.models.library.LibraryFactory;
import org.eclipse.emf.test.models.library.LibraryPackage;
import org.eclipse.emf.test.models.library.Writer;
import org.junit.Test;
/**
* XMI tests: unloading preserves XMI IDs in proxy URIs.
* @see <a href="data/library.mdl">data/library.mdl</a>
* @see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=412753">Bugzilla 412753</a>
*/
public class UnloadXMIResourceTest
{
@Test
public void testHREF() throws Exception
{
ResourceSet resourceSet = new ResourceSetImpl();
LibraryPackage.eINSTANCE.getName();
LibraryFactory libFactory = LibraryFactory.eINSTANCE;
Library library = libFactory.createLibrary();
Book book = libFactory.createBook();
book.setTitle("Eclipse Modeling Framework");
Writer writer = libFactory.createWriter();
writer.setName("Frank Budinsky");
book.setAuthor(writer);
library.getBooks().add(book);
library.getWriters().add(writer);
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
("xmi",
new XMIResourceFactoryImpl()
{
@Override
public Resource createResource(URI uri)
{
return
new XMIResourceImpl(uri)
{
@Override
protected boolean useUUIDs()
{
return true;
}
};
}
});
Resource resource = resourceSet.createResource(URI.createURI("library.xmi"));
resource.getContents().add(library);
Map<EObject, URI> proxyURIMap = new HashMap<EObject, URI>();
for (Iterator<EObject> i = resource.getAllContents(); i.hasNext(); )
{
EObject eObject = i.next();
URI proxyURI = EcoreUtil.getURI(eObject);
assertTrue(proxyURI.fragment().indexOf('/') == -1);
proxyURIMap.put(eObject, proxyURI);
}
resource.unload();
for (Map.Entry<EObject, URI> entry : proxyURIMap.entrySet())
{
EObject eObject = entry.getKey();
URI proxyURI = entry.getValue();
assertEquals(proxyURI, ((InternalEObject)eObject).eProxyURI());
}
}
}