/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.cmp2.commerce; import java.util.Collection; import java.util.Iterator; import java.util.Properties; import javax.naming.InitialContext; import org.jboss.test.util.ejb.EJBTestCase; public class OneToManyBiTest extends EJBTestCase { public OneToManyBiTest(String name) { super(name); } private OrderHome getOrderHome() { try { InitialContext jndiContext = new InitialContext(); return (OrderHome) jndiContext.lookup("commerce/Order"); } catch(Exception e) { e.printStackTrace(); fail("Exception in getOrder: " + e.getMessage()); } return null; } private LineItemHome getLineItemHome() { try { InitialContext jndiContext = new InitialContext(); return (LineItemHome) jndiContext.lookup("commerce/LineItem"); } catch(Exception e) { e.printStackTrace(); fail("Exception in getLineItemHome: " + e.getMessage()); } return null; } private Order a1; private Order a2; private Collection b1; private Collection b2; private LineItem[] b1x = new LineItem[20]; private LineItem[] b2x = new LineItem[30]; public void setUpEJB(Properties props) throws Exception { OrderHome orderHome = getOrderHome(); LineItemHome lineItemHome = getLineItemHome(); // clean out the db deleteAllOrders(orderHome); deleteAllLineItems(lineItemHome); // setup the before change part of the test beforeChange(orderHome, lineItemHome); } private void beforeChange(OrderHome orderHome, LineItemHome lineItemHome) throws Exception { // Before change: a1 = orderHome.create(); a2 = orderHome.create(); b1 = a1.getLineItems(); b2 = a2.getLineItems(); for(int i=0; i<b1x.length; i++) { b1x[i] = lineItemHome.create(); b1.add(b1x[i]); } for(int i=0; i<b2x.length; i++) { b2x[i] = lineItemHome.create(); b2.add(b2x[i]); } // B b11, b12, ... , b1n; members of b1 for(int i=0; i<b1x.length; i++) { assertTrue(b1.contains(b1x[i])); } // B b21, b22, ... , b2m; members of b2 for(int i=0; i<b2x.length; i++) { assertTrue(b2.contains(b2x[i])); } } public void setUp() { // get the collections again as they are only // valid for the tx length, and were from last tx b1 = a1.getLineItems(); b2 = a2.getLineItems(); } // a1.setB(a2.getB()); public void test_a1SetB_a2GetB() { // Change: a1.setLineItems(a2.getLineItems()); // Expected result: // a2.getB().isEmpty() assertTrue(a2.getLineItems().isEmpty()); // b2.isEmpty() assertTrue(b2.isEmpty()); // b1 == a1.getB() assertTrue(b1 == a1.getLineItems()); // b2 == a2.getB() assertTrue(b2 == a2.getLineItems()); // a1.getB().contains(b21) // a1.getB().contains(b22) // a1.getB().contains(...) // a1.getB().contains(b2m) for(int i=0; i<b2x.length; i++) { assertTrue(a1.getLineItems().contains(b2x[i])); } // b11.getA() == null // b12.getA() == null // ....getA() == null // b1n.getA() == null for(int i=0; i<b1x.length; i++) { assertTrue(b1x[i].getOrder() == null); } // a1.isIdentical(b21.getA()) // a1.isIdentical(b22.getA()) // a1.isIdentical(....getA()) // a1.isIdentical(b2m.getA())) for(int i=0; i<b2x.length; i++) { assertTrue(a1.isIdentical(b2x[i].getOrder())); } } // b2m.setA(b1n.getA()); public void test_b2mSetA_b1nGetA() { // Change: // b2m.setA(b1n.getA()); b2x[b2x.length-1].setOrder(b1x[b1x.length-1].getOrder()); // Expected result: // b1.contains(b11) // b1.contains(b12) // b1.contains(...) // b1.contains(b1n) for(int i=0; i<b1x.length; i++) { assertTrue(b1.contains(b1x[i])); } // b1.contains(b2m) assertTrue(b1.contains(b2x[b2x.length-1])); // b2.contains(b21) // b2.contains(b22) // b2.contains(...) // b2.contains(b2m_1) for(int i=0; i<b2x.length-1; i++) { assertTrue(b2.contains(b2x[i])); } // a1.isIdentical(b11.getA()) // a1.isIdentical(b12.getA()) // a1.isIdentical(....getA()) // a1.isIdentical(b1n.getA()) for(int i=0; i<b1x.length; i++) { assertTrue(a1.isIdentical(b1x[i].getOrder())); } // a2.isIdentical(b21.getA()) // a2.isIdentical(b22.getA()) // a2.isIdentical(....getA()) // a2.isIdentical(b2m_1.getA()) for(int i=0; i<b2x.length-1; i++) { assertTrue(a2.isIdentical(b2x[i].getOrder())); } // a1.isIdentical(b2m.getA()) assertTrue(a1.isIdentical(b2x[b2x.length-1].getOrder())); } // a1.getB().add(b2m); public void test_a1GetB_addB2m() { // Change: // a1.getB().add(b2m); a1.getLineItems().add(b2x[b2x.length-1]); // Expected result: // b1.contains(b11) // b1.contains(b12) // b1.contains(...) // b1.contains(b1n) for(int i=0; i<b1x.length; i++) { assertTrue(b1.contains(b1x[i])); } // b1.contains(b2m) assertTrue(b1.contains(b2x[b2x.length-1])); // b2.contains(b21) // b2.contains(b22) // b2.contains(...) // b2.contains(b2m_1) for(int i=0; i<b2x.length-1; i++) { assertTrue(b2.contains(b2x[i])); } // a1.isIdentical(b11.getA()) // a1.isIdentical(b12.getA()) // a1.isIdentical(....getA()) // a1.isIdentical(b1n.getA()) for(int i=0; i<b1x.length; i++) { assertTrue(a1.isIdentical(b1x[i].getOrder())); } // a2.isIdentical(b21.getA()) // a2.isIdentical(b22.getA()) // a2.isIdentical(....getA()) // a2.isIdentical(b2m_1.getA()) for(int i=0; i<b2x.length-1; i++) { assertTrue(a2.isIdentical(b2x[i].getOrder())); } // a1.isIdentical(b2m.getA()) assertTrue(a1.isIdentical(b2x[b2x.length-1].getOrder())); } // a1.getB().remove(b1n); public void test_a1GetB_removeB1n() { // Change: // a1.getB().remove(b1n); a1.getLineItems().remove(b1x[b1x.length-1]); // Expected result: // b1n.getA() == null assertTrue(b1x[b1x.length-1].getOrder() == null); // b1 == a1.getB() assertTrue(b1 == a1.getLineItems()); // b1.contains(b11) // b1.contains(b12) // b1.contains(...) // b1.contains(b1n_1) for(int i=0; i<b1x.length-1; i++) { assertTrue(b1.contains(b1x[i])); } // !(b1.contains(b1n)) assertTrue(!(b1.contains(b1x[b1x.length-1]))); } public void tearDownEJB(Properties props) throws Exception { OrderHome orderHome = getOrderHome(); LineItemHome lineItemHome = getLineItemHome(); // clean out the db deleteAllOrders(orderHome); deleteAllLineItems(lineItemHome); } public void deleteAllOrders(OrderHome orderHome) throws Exception { // delete all Orders Iterator currentOrders = orderHome.findAll().iterator(); while(currentOrders.hasNext()) { Order o = (Order)currentOrders.next(); o.remove(); } } public void deleteAllLineItems(LineItemHome lineItemHome) throws Exception { // delete all LineItems Iterator currentLineItems = lineItemHome.findAll().iterator(); while(currentLineItems.hasNext()) { LineItem l = (LineItem)currentLineItems.next(); l.remove(); } } }