blob: 5750afd1b0e55850b9544af9377690f57bc67b0d [file] [log] [blame]
/*
* TestMultiTableSelfCollection.java
*
* Created on October 4, 2006, 2:35 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openjpa.persistence.jdbc.meta;
import java.util.*;
import org.apache.openjpa.persistence.jdbc.common.apps.*;
import java.lang.annotation.Annotation;
import junit.framework.*;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
public class TestMultiTableSelfCollection extends org.apache.openjpa.persistence.jdbc.kernel.BaseJDBCTest
{
private Object a1oid;
private Object a2oid;
private Object a3oid;
private Object a4oid;
private Object c1oid;
private Object c2oid;
private Object c3oid;
private Object c4oid;
public TestMultiTableSelfCollection(String name) {
super(name);
}
/** Creates a new instance of TestMultiTableSelfCollection */
public TestMultiTableSelfCollection() {
}
public void setUp() {
deleteAll(MultiA.class);
OpenJPAEntityManager pm = (OpenJPAEntityManager)currentEntityManager();
pm.getTransaction().begin();
Collection os = new ArrayList();
MultiA a1 = new MultiA();
MultiA a2 = new MultiA();
MultiA a3 = new MultiA();
MultiA a4 = new MultiA();
MultiC c1 = new MultiC();
MultiC c2 = new MultiC();
MultiC c3 = new MultiC();
MultiC c4 = new MultiC();
os.add(a1);
os.add(a2);
os.add(a3);
os.add(a4);
os.add(c1);
os.add(c2);
os.add(c3);
os.add(c4);
c1.getMultiAs().add(a1);
c1.getMultiAs().add(a2);
a1.getMultiCs().add(c1);
a2.getMultiCs().add(c1);
c2.getMultiAs().add(a1);
c2.getMultiAs().add(a2);
a1.getMultiCs().add(c2);
a2.getMultiCs().add(c2);
c3.getMultiAs().add(a3);
c3.getMultiAs().add(a4);
a3.getMultiCs().add(c3);
a4.getMultiCs().add(c3);
c4.getMultiAs().add(a3);
c4.getMultiAs().add(a4);
a3.getMultiCs().add(c4);
a4.getMultiCs().add(c4);
pm.persistAll(os);
pm.getTransaction().commit();
a1oid = pm.getObjectId(a1);
a2oid = pm.getObjectId(a2);
a3oid = pm.getObjectId(a3);
a4oid = pm.getObjectId(a4);
c1oid = pm.getObjectId(c1);
c2oid = pm.getObjectId(c2);
c3oid = pm.getObjectId(c3);
c4oid = pm.getObjectId(c4);
pm.close();
}
public void testSelfCollections() {
OpenJPAEntityManager pm = (OpenJPAEntityManager)currentEntityManager();
// check that all the sets are the right size, and equal where
// they should be.
MultiA a1 = (MultiA) pm.getObjectId(a1oid);
assertEquals(2, a1.getMultiCs().size());
MultiA a2 = (MultiA) pm.getObjectId(a2oid);
assertEquals(2, a2.getMultiCs().size());
assertEquals(a1.getMultiCs(), a2.getMultiCs());
MultiA a3 = (MultiA) pm.getObjectId(a3oid);
assertEquals(2, a3.getMultiCs().size());
MultiA a4 = (MultiA) pm.getObjectId(a4oid);
assertEquals(2, a4.getMultiCs().size());
assertEquals(a3.getMultiCs(), a4.getMultiCs());
MultiC c1 = (MultiC) pm.getObjectId(c1oid);
assertEquals(2, c1.getMultiAs().size());
MultiC c2 = (MultiC) pm.getObjectId(c2oid);
assertEquals(2, c2.getMultiAs().size());
assertEquals(c1.getMultiAs(), c2.getMultiAs());
MultiC c3 = (MultiC) pm.getObjectId(c3oid);
assertEquals(2, c3.getMultiAs().size());
MultiC c4 = (MultiC) pm.getObjectId(c4oid);
assertEquals(2, c4.getMultiAs().size());
assertEquals(c3.getMultiAs(), c4.getMultiAs());
// check that all the sets contain the correct values, and
// don't contain the wrong values. Probably don't need to do
// the above check as well.
assertTrue(a1.getMultiCs().contains(c1));
assertTrue(a1.getMultiCs().contains(c2));
assertTrue(!a1.getMultiCs().contains(c3));
assertTrue(!a1.getMultiCs().contains(c4));
assertTrue(a2.getMultiCs().contains(c1));
assertTrue(a2.getMultiCs().contains(c2));
assertTrue(!a2.getMultiCs().contains(c3));
assertTrue(!a2.getMultiCs().contains(c4));
assertTrue(!a3.getMultiCs().contains(c1));
assertTrue(!a3.getMultiCs().contains(c2));
assertTrue(a3.getMultiCs().contains(c3));
assertTrue(a3.getMultiCs().contains(c4));
assertTrue(!a4.getMultiCs().contains(c1));
assertTrue(!a4.getMultiCs().contains(c2));
assertTrue(a4.getMultiCs().contains(c3));
assertTrue(a4.getMultiCs().contains(c4));
assertTrue(c1.getMultiAs().contains(a1));
assertTrue(c1.getMultiAs().contains(a2));
assertTrue(!c1.getMultiAs().contains(a3));
assertTrue(!c1.getMultiAs().contains(a4));
assertTrue(c2.getMultiAs().contains(a1));
assertTrue(c2.getMultiAs().contains(a2));
assertTrue(!c2.getMultiAs().contains(a3));
assertTrue(!c2.getMultiAs().contains(a4));
assertTrue(!c3.getMultiAs().contains(a1));
assertTrue(!c3.getMultiAs().contains(a2));
assertTrue(c3.getMultiAs().contains(a3));
assertTrue(c3.getMultiAs().contains(a4));
assertTrue(!c4.getMultiAs().contains(a1));
assertTrue(!c4.getMultiAs().contains(a2));
assertTrue(c4.getMultiAs().contains(a3));
assertTrue(c4.getMultiAs().contains(a4));
pm.close();
}
}