blob: 6b2e5ed41f666708e78a812e6cc34d84446d9863 [file] [log] [blame]
/*
* Copyright (c) 2012, 2013 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:
* Christian W. Damus (CEA) - initial API and implementation
*/
package org.eclipse.emf.cdo.tests.bugzilla;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.tests.model6.Holdable;
import org.eclipse.emf.cdo.tests.model6.Holder;
import org.eclipse.emf.cdo.tests.model6.Thing;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
/**
* Bug 392956: Tests the partial persistence of features.
*/
public class Bugzilla_392956_Test extends AbstractCDOTest
{
public void testPartialPersistence() throws Exception
{
Holder rootHolder = createModel();
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
Resource resource = transaction.getOrCreateResource(getResourcePath("model.model7"));
resource.getContents().add(rootHolder);
transaction.commit();
// Make sure it's a clean retrieval
transaction.close();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("model.model7"), true);
rootHolder = (Holder)EcoreUtil.getObjectByType(resource.getContents(), getModel6Package().getHolder());
// Only some values returned
EList<Holdable> held = rootHolder.getHeld();
assertEquals(2, held.size());
assertThing("A", held.get(0));
assertThing("C", held.get(1));
held = ((Holder)EcoreUtil.getObjectByType(rootHolder.getOwned(), getModel6Package().getHolder())).getHeld();
assertEquals(1, held.size());
assertThing("B", held.get(0));
}
private Holder createModel()
{
Holder result = getModel6Factory().createHolder();
result.setName("root");
Holder nested = getModel6Factory().createHolder();
nested.setName("nested");
Thing a = getModel6Factory().createThing();
a.setName("A");
Thing b = getModel6Factory().createThing();
b.setName("B");
Thing c = getModel6Factory().createThing();
c.setName("C");
result.getOwned().add(a);
result.getOwned().add(nested);
nested.getOwned().add(b);
result.getOwned().add(c);
// The partially persisted feature
result.getHeld().add(a);
result.getHeld().add(b);
result.getHeld().add(c);
nested.getHeld().add(b);
return result;
}
private void assertThing(String name, Holdable holdable)
{
assertInstanceOf(Thing.class, holdable);
assertEquals(name, holdable.getName());
}
}