1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package com.enspire.gemini.integration.test.listsimple;
25
26 import java.util.LinkedList;
27 import java.util.List;
28
29 import org.jmock.Mock;
30 import org.jmock.MockObjectTestCase;
31
32 import com.enspire.gemini.integration.model.listsimple.ABidirectionalDefault;
33 import com.enspire.gemini.integration.model.listsimple.A;
34 import com.enspire.gemini.integration.model.listsimple.AUnidirectional;
35 import com.enspire.gemini.integration.model.listsimple.B;
36 import com.enspire.gemini.integration.model.listsimple.BBidirectional;
37
38 /***
39 * @author Dragan Djuric <dragand@dev.java.net>
40 *
41 */
42 public class BBidirectionalTest extends MockObjectTestCase {
43
44 private B testClass;
45
46 private Mock mockA;
47
48 protected A createABidirectional() {
49 ABidirectionalDefault a = new ABidirectionalDefault();
50 a.setB(new LinkedList());
51 return a;
52 }
53
54 protected A createAUnidirectional() {
55 AUnidirectional a = new AUnidirectional();
56 a.setB(new LinkedList());
57 return a;
58 }
59
60 /***
61 * @see TestCase#setUp()
62 */
63 protected void setUp() throws Exception {
64 super.setUp();
65 testClass = new BBidirectional();
66 mockA = new Mock(A.class);
67 }
68
69 public void testASetOppositeBidirectional() {
70 A aBidirectional = createABidirectional();
71 testClass.setA(aBidirectional);
72 assertSame(aBidirectional, testClass.getA());
73 assertTrue(aBidirectional.getB().contains(testClass));
74 }
75
76 public void testASetOppositeUnidirectional() {
77 A aUnidirectional = createAUnidirectional();
78 testClass.setA(aUnidirectional);
79 assertSame(aUnidirectional, testClass.getA());
80 assertTrue(aUnidirectional.getB().contains(testClass));
81 }
82
83 public void testAUnset() {
84 A aBidirectional = createABidirectional();
85 testClass.setA(aBidirectional);
86 assertSame(aBidirectional, testClass.getA());
87 assertTrue(aBidirectional.getB().contains(testClass));
88 testClass.setA(null);
89 assertNull(testClass.getA());
90 assertFalse(aBidirectional.getB().contains(testClass));
91 }
92
93 public void testASetAgain() {
94 A aBidirectional = createABidirectional();
95 testClass.setA(aBidirectional);
96 assertSame(aBidirectional, testClass.getA());
97 assertTrue(aBidirectional.getB().contains(testClass));
98 testClass.setA(aBidirectional);
99 assertSame(aBidirectional, testClass.getA());
100 assertTrue(aBidirectional.getB().contains(testClass));
101 assertSame(1, aBidirectional.getB().size());
102 }
103
104 public void testAReplace() {
105 A aBidirectional = createABidirectional();
106 A aUnidirectional = createAUnidirectional();
107 testClass.setA(aBidirectional);
108 assertSame(aBidirectional, testClass.getA());
109 assertTrue(aBidirectional.getB().contains(testClass));
110 testClass.setA(aUnidirectional);
111 assertSame(aUnidirectional, testClass.getA());
112 assertTrue(aUnidirectional.getB().contains(testClass));
113 assertFalse(aBidirectional.getB().contains(testClass));
114 }
115
116 public void testAReplaceConnected() {
117 A aBidirectional = createABidirectional();
118 A aBidirectional1 = createABidirectional();
119 testClass.setA(aBidirectional1);
120 assertSame(aBidirectional1, testClass.getA());
121 assertTrue(aBidirectional1.getB().contains(testClass));
122 testClass.setA(aBidirectional);
123 assertSame(aBidirectional, testClass.getA());
124 assertTrue(aBidirectional.getB().contains(testClass));
125 assertFalse(aBidirectional1.getB().contains(testClass));
126 }
127
128 public void testAThrowsException() {
129 Mock mockList = new Mock(List.class);
130 List aBSet = (List)mockList.proxy();
131 A a = (A)mockA.proxy();
132 A aBidirectional = createABidirectional();
133 testClass.setA(aBidirectional);
134 assertSame(aBidirectional, testClass.getA());
135 assertTrue(aBidirectional.getB().contains(testClass));
136 mockA.expects(once()).method("getB").withNoArguments().
137 will(returnValue(aBSet));
138 mockList.expects(once()).method("contains").with(same(testClass)).
139 will(returnValue(false));
140 mockList.expects(once()).method("add").with(same(testClass)).
141 will(throwException(new RuntimeException()));
142 try {
143 testClass.setA(a);
144 fail("RuntimeException should be thrown");
145 }catch(RuntimeException e) {
146 assertSame(aBidirectional, testClass.getA());
147 assertTrue(aBidirectional.getB().contains(testClass));
148 }
149 }
150
151 }