/** * Copyright (c) Eclipse contributors 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 */ package org.eclipse.emf.test.core.ecore; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; public class ResourceSetMappedResourceLocatorTest extends TestCase { public ResourceSetMappedResourceLocatorTest(String name) { super(name); } public static Test suite() { TestSuite testSuite = new TestSuite("ResourceLocatorTests"); testSuite.addTest(new ResourceSetMappedResourceLocatorTest("test")); return testSuite; } protected ResourceSet createResourceSet(boolean tracked) { ResourceSetImpl resourceSet = new ResourceSetImpl(); if (tracked) { new ResourceSetImpl.MappedResourceLocator(resourceSet); } return resourceSet; } public void test() throws Exception { test1(createResourceSet(false)); test1(createResourceSet(true)); } public void test1(ResourceSet resourceSet) { // Create a resource with a given URI 1 and confirm that we can find it with that URI. // URI uri1 = URI.createURI("http://www.eclipse.org/emf/test/core/ecore/Resource1"); Resource resource = resourceSet.createResource(uri1); assertSame(resource, resourceSet.getResource(uri1, false)); // Change the resource's URI to 2 and confirm that we can't find it with the old URI but can find it with in the new URI. // URI uri2 = URI.createURI("http://www.eclipse.org/emf/test/core/ecore/Resource2"); resource.setURI(uri2); assertNull(resourceSet.getResource(uri1, false)); assertSame(resource, resourceSet.getResource(uri2, false)); // Define a mapping from URI 3 to URI 2 and confirm that we can find it with URI 3 and with URI 2.. // URI remappedURI = URI.createURI("http://www.eclipse.org/emf/test/core/ecore/Resource3"); resourceSet.getURIConverter().getURIMap().put(remappedURI, uri2); assertSame(resource, resourceSet.getResource(uri2, false)); assertSame(resource, resourceSet.getResource(remappedURI, false)); // Remove the resource and confirm that we can't find it anymore. // resourceSet.getResources().remove(resource); assertNull(resourceSet.getResource(remappedURI, false)); // Add the resource back and confirm that we can find it again with both URI 3 and URI 2. // resourceSet.getResources().add(resource); assertSame(resource, resourceSet.getResource(uri2, false)); assertSame(resource, resourceSet.getResource(remappedURI, false)); // Create another resource with URI 3 and confirm that it's shadowed. // Resource resource2 = resourceSet.createResource(remappedURI); assertSame(resource, resourceSet.getResource(remappedURI, false)); // Move that other resource to the beginning and confirm it's now visible and the other one is shadowed. // resourceSet.getResources().move(0, 1); assertSame(resource2, resourceSet.getResource(remappedURI, false)); } }