/* * Copyright (c) 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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: * Victor Roldan Betancort - initial API and implementation */ package org.eclipse.emf.cdo.tests.bugzilla; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.tests.AbstractCDOTest; import org.eclipse.emf.cdo.tests.model1.Company; import org.eclipse.emf.cdo.transaction.CDOTransaction; 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; /** * Cannot load resource on a previously cleared ResourceSet * <p> * See Bug 338921 * * @author Victor Roldan Betancort */ public class Bugzilla_338921_Test extends AbstractCDOTest { public void testLoadResourceAfterSingleRemoval() throws Exception { Company company = getModel1Factory().createCompany(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource = transaction.createResource(getResourcePath("/Bug338921")); resource.getContents().add(company); transaction.commit(); URI uri = resource.getURI(); ResourceSet resourceSet = resource.getResourceSet(); resourceSet.getResources().remove(resource); assertInvalid(resource); Resource resource2 = resourceSet.getResource(uri, true); assertNotNull(resource2); // forcing transition from PROXY to CLEAN. Revision is loaded resource2.getContents().size(); assertClean((EObject)resource2, transaction); } public void testRemoveDirtyResourceOnResourceSetWithSingleResource() throws Exception { Company company = getModel1Factory().createCompany(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource = transaction.createResource(getResourcePath("/Bug338921")); resource.getContents().add(company); transaction.commit(); company.setName("foobar"); URI uri = resource.getURI(); ResourceSet resourceSet = resource.getResourceSet(); resourceSet.getResources().remove(resource); Resource resource2 = resourceSet.getResource(uri, true); assertNotNull(resource2); // forcing transition from PROXY to CLEAN. Revision is loaded resource2.getContents().size(); assertClean((EObject)resource2, transaction); } public void testRemoveDirtyResourceOnResourceSetWithMultipleResource() throws Exception { CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource1 = transaction.createResource(getResourcePath("/Bug338921/res1")); CDOResource resource2 = transaction.createResource(getResourcePath("/Bug338921/res2")); Company company1 = getModel1Factory().createCompany(); Company company2 = getModel1Factory().createCompany(); resource1.getContents().add(company1); resource2.getContents().add(company2); transaction.commit(); company1.setName("foo"); company2.setName("bar"); ResourceSet resourceSet = resource1.getResourceSet(); resourceSet.getResources().remove(resource1); assertEquals(true, transaction.isDirty()); } public void testLoadResourceAfterClearOnCleanResourceSet() throws Exception { Company company = getModel1Factory().createCompany(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource1 = transaction.createResource(getResourcePath("/Bug338921/res1")); transaction.createResource(getResourcePath("/Bug338921/res2")); resource1.getContents().add(company); transaction.commit(); URI uri = resource1.getURI(); company.setName("foobar"); ResourceSet resourceSet = resource1.getResourceSet(); resourceSet.getResources().clear(); assertEquals(true, transaction.isDirty()); assertInvalid(resource1); Resource resource3 = resourceSet.getResource(uri, true); assertNotNull(resource3); // forcing transition from PROXY to CLEAN. Revision is loaded resource3.getContents().size(); assertClean((EObject)resource3, transaction); } public void testLoadResourceAfterClearOnDirtyResourceSet() throws Exception { Company company = getModel1Factory().createCompany(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOResource resource1 = transaction.createResource(getResourcePath("/Bug338921/res1")); CDOResource resource2 = transaction.createResource(getResourcePath("/Bug338921/res2")); resource1.getContents().add(company); transaction.commit(); URI uri1 = resource1.getURI(); URI uri2 = resource2.getURI(); company.setName("foobar"); ResourceSet resourceSet = resource1.getResourceSet(); resourceSet.getResources().clear(); assertEquals(true, transaction.isDirty()); assertInvalid(resource1); assertInvalid(resource2); CDOResource resource3 = (CDOResource)resourceSet.getResource(uri1, true); CDOResource resource4 = (CDOResource)resourceSet.getResource(uri2, true); assertNotNull(resource3); assertNotNull(resource4); // forcing transition from PROXY to CLEAN. Revision is loaded resource3.getContents().size(); assertClean(resource3, transaction); resource4.getContents().size(); assertClean(resource4, transaction); } }