001: /*
002: * Copyright 2004-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.compass.core.test.component.cyclic3;
018:
019: import org.compass.core.CompassSession;
020: import org.compass.core.CompassTransaction;
021: import org.compass.core.Resource;
022: import org.compass.core.test.AbstractTestCase;
023:
024: /**
025: * @author kimchy
026: */
027: public class SimpleCyclicTests extends AbstractTestCase {
028:
029: protected String[] getMappings() {
030: return new String[] { "component/cyclic3/Cyclic.cpm.xml" };
031: }
032:
033: public void testCyclicWithParent() throws Exception {
034: CompassSession session = openSession();
035: CompassTransaction tr = session.beginTransaction();
036:
037: Cyclic1 cyclic1 = new Cyclic1();
038: cyclic1.id = new Long(1);
039: cyclic1.value = "cyclic1";
040:
041: Cyclic2 cyclic2 = new Cyclic2();
042: cyclic2.value = "cyclic2";
043:
044: cyclic1.cyclic2 = cyclic2;
045: cyclic2.cyclic1 = cyclic1;
046:
047: session.save("cyclic1", cyclic1);
048:
049: cyclic1 = (Cyclic1) session.load("cyclic1", new Long(1));
050: assertNotNull(cyclic1.cyclic2);
051: assertEquals("cyclic2", cyclic1.cyclic2.value);
052: cyclic2 = cyclic1.cyclic2;
053: assertNotNull(cyclic2);
054: assertEquals("cyclic1", cyclic2.cyclic1.value);
055:
056: tr.commit();
057: session.close();
058: }
059:
060: public void testCyclicNullWithParent() throws Exception {
061: CompassSession session = openSession();
062: CompassTransaction tr = session.beginTransaction();
063:
064: Long id = new Long(1);
065: Cyclic1 cyclic1 = new Cyclic1();
066: cyclic1.id = id;
067: cyclic1.value = "cyclic1";
068:
069: session.save("cyclic1", cyclic1);
070:
071: cyclic1 = (Cyclic1) session.load("cyclic1", id);
072: assertNull(cyclic1.cyclic2);
073:
074: tr.commit();
075: session.close();
076: }
077:
078: public void testCyclicWithComponent() throws Exception {
079: CompassSession session = openSession();
080: CompassTransaction tr = session.beginTransaction();
081:
082: Long id = new Long(1);
083: Cyclic1 cyclic1 = new Cyclic1();
084: cyclic1.id = id;
085: cyclic1.value = "cyclic1";
086:
087: Cyclic2 cyclic2 = new Cyclic2();
088: cyclic2.id = id;
089: cyclic2.value = "cyclic2";
090:
091: cyclic1.cyclic2 = cyclic2;
092: cyclic2.cyclic1 = cyclic1;
093:
094: session.save("cyclic1c", cyclic1);
095: session.save("cyclic2c", cyclic2);
096:
097: cyclic1 = (Cyclic1) session.load("cyclic1c", id);
098: assertNotNull(cyclic1.cyclic2);
099: assertEquals("cyclic2", cyclic1.cyclic2.value);
100: cyclic2 = cyclic1.cyclic2;
101: assertNotNull(cyclic2);
102: assertEquals("cyclic1", cyclic2.cyclic1.value);
103:
104: // check that compass creates the same object (when ids are invoved
105: // when in cyclic reference
106: assertEquals(System.identityHashCode(cyclic1), System
107: .identityHashCode(cyclic1.cyclic2.cyclic1));
108:
109: cyclic2 = (Cyclic2) session.load("cyclic2c", id);
110: assertNotNull(cyclic2.cyclic1);
111: assertEquals("cyclic1", cyclic2.cyclic1.value);
112: cyclic1 = cyclic2.cyclic1;
113: assertNotNull(cyclic1);
114: assertEquals("cyclic2", cyclic1.cyclic2.value);
115:
116: // check that we don't go into cyclic hell
117: Resource resource = session.loadResource("cyclic1c", id);
118: assertEquals(2, resource.getProperties("value").length);
119: assertNotNull(resource.getProperty("$/cyclic1c/id"));
120: assertNotNull(resource.getProperty("$/cyclic1c/value"));
121: assertNotNull(resource.getProperty("$/cyclic1c/cyclic2/id"));
122: assertNotNull(resource.getProperty("$/cyclic1c/cyclic2/value"));
123: assertNotNull(resource
124: .getProperty("$/cyclic1c/cyclic2/cyclic1/id"));
125: assertNull(resource
126: .getProperty("$/cyclic1c/cyclic2/cyclic1/value"));
127: assertNull(resource
128: .getProperty("$/cyclic1c/cyclic2/cyclic1/cyclic2/id"));
129: assertNull(resource
130: .getProperty("$/cyclic1c/cyclic2/cyclic1/cyclic2/cyclic1/id"));
131:
132: tr.commit();
133: session.close();
134: }
135:
136: }
|