blob: 3e4d03485b73bea81ac187636b2a9b22793a5699 [file] [log] [blame]
/*
* Copyright (c) 2011, 2012 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:
* Caspar De Groot - initial API and implementation
* Eike Stepper - maintenance
*/
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.Order;
import org.eclipse.emf.cdo.tests.model1.OrderDetail;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.util.CommitException;
/**
* @author Caspar De Groot
*/
public class Bugzilla_283985_2_Test extends AbstractCDOTest
{
private Order order1, order2;
private OrderDetail detail1, detail2, detail3, detail4;
@Override
public void setUp() throws Exception
{
super.setUp();
order1 = getModel1Factory().createPurchaseOrder();
order2 = getModel1Factory().createPurchaseOrder();
detail1 = getModel1Factory().createOrderDetail();
detail2 = getModel1Factory().createOrderDetail();
detail3 = getModel1Factory().createOrderDetail();
detail4 = getModel1Factory().createOrderDetail();
order1.getOrderDetails().add(detail1);
order1.getOrderDetails().add(detail2);
order1.getOrderDetails().add(detail3);
order1.getOrderDetails().add(detail4);
}
@Override
protected void doTearDown() throws Exception
{
order1 = null;
order2 = null;
detail1 = null;
detail2 = null;
detail3 = null;
detail4 = null;
super.doTearDown();
}
public void testMoveOnce() throws CommitException
{
{
CDOSession session = openSession();
CDOTransaction tx = session.openTransaction();
CDOResource r1 = tx.getOrCreateResource(getResourcePath("/r1"));
r1.getContents().clear();
r1.getContents().add(order1);
r1.getContents().add(order2);
boolean contains = order1.getOrderDetails().contains(detail1);
assertEquals(true, contains);
// Commit so that everything gets a CDOID
tx.commit();
contains = order1.getOrderDetails().contains(detail1);
assertEquals(true, contains);
tx.commit();
order1.getOrderDetails().remove(detail1);
order2.getOrderDetails().add(detail1);
contains = order2.getOrderDetails().contains(detail1);
assertEquals(true, contains);
tx.commit();
tx.close();
session.close();
}
{
// Check if all OK if we reload in a new session
CDOSession session = openSession();
CDOTransaction tx = session.openTransaction();
CDOResource r1 = tx.getResource(getResourcePath("/r1"));
order1 = (Order)r1.getContents().get(0);
order2 = (Order)r1.getContents().get(1);
// lookup detail object in new transaction
detail1 = (OrderDetail)CDOUtil.getEObject(tx.getObject(CDOUtil.getCDOObject(detail1).cdoID()));
boolean contains1 = order1.getOrderDetails().contains(detail1);
boolean contains2 = order2.getOrderDetails().contains(detail1);
assertEquals(false, contains1);
assertEquals(true, contains2);
tx.close();
session.close();
}
}
public void testMoveOnceAndBack() throws CommitException
{
{
CDOSession session = openSession();
CDOTransaction tx = session.openTransaction();
CDOResource r1 = tx.getOrCreateResource(getResourcePath("/r1"));
r1.getContents().clear();
r1.getContents().add(order1);
r1.getContents().add(order2);
boolean contains = order1.getOrderDetails().contains(detail1);
assertEquals(true, contains);
// Commit so that everything gets a CDOID
tx.commit();
contains = order1.getOrderDetails().contains(detail1);
assertEquals(true, contains);
tx.commit();
order1.getOrderDetails().remove(detail1);
order2.getOrderDetails().add(detail1);
contains = order2.getOrderDetails().contains(detail1);
assertEquals(true, contains);
order2.getOrderDetails().remove(detail1);
order1.getOrderDetails().add(detail1);
contains = order1.getOrderDetails().contains(detail1);
assertEquals(true, contains);
tx.commit();
tx.close();
session.close();
}
{
// Check if all OK if we reload in a new session
CDOSession session = openSession();
CDOTransaction tx = session.openTransaction();
CDOResource r1 = tx.getResource(getResourcePath("/r1"));
order1 = (Order)r1.getContents().get(0);
order2 = (Order)r1.getContents().get(1);
detail1 = (OrderDetail)CDOUtil.getEObject(tx.getObject(CDOUtil.getCDOObject(detail1).cdoID()));
boolean contains1 = order1.getOrderDetails().contains(detail1);
boolean contains2 = order2.getOrderDetails().contains(detail1);
assertEquals(false, contains2);
assertEquals(true, contains1);
tx.close();
session.close();
}
}
}