1 package org.junit.samples.money;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6
7 import junit.framework.JUnit4TestAdapter;
8 import junit.samples.money.IMoney;
9 import junit.samples.money.Money;
10 import junit.samples.money.MoneyBag;
11 import org.junit.Before;
12 import org.junit.Test;
13
14 public class MoneyTest {
15 private Money f12CHF;
16 private Money f14CHF;
17 private Money f7USD;
18 private Money f21USD;
19
20 private IMoney fMB1;
21 private IMoney fMB2;
22
23 public static junit.framework.Test suite() {
24 return new JUnit4TestAdapter(MoneyTest.class);
25 }
26
27 @Before
28 public void setUp() {
29 f12CHF = new Money(12, "CHF");
30 f14CHF = new Money(14, "CHF");
31 f7USD = new Money(7, "USD");
32 f21USD = new Money(21, "USD");
33
34 fMB1 = MoneyBag.create(f12CHF, f7USD);
35 fMB2 = MoneyBag.create(f14CHF, f21USD);
36 }
37
38 @Test
39 public void testBagMultiply() {
40
41 IMoney expected = MoneyBag.create(new Money(24, "CHF"), new Money(14, "USD"));
42 assertEquals(expected, fMB1.multiply(2));
43 assertEquals(fMB1, fMB1.multiply(1));
44 assertTrue(fMB1.multiply(0).isZero());
45 }
46
47 @Test
48 public void testBagNegate() {
49
50 IMoney expected = MoneyBag.create(new Money(-12, "CHF"), new Money(-7, "USD"));
51 assertEquals(expected, fMB1.negate());
52 }
53
54 @Test
55 public void testBagSimpleAdd() {
56
57 IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));
58 assertEquals(expected, fMB1.add(f14CHF));
59 }
60
61 @Test
62 public void testBagSubtract() {
63
64 IMoney expected = MoneyBag.create(new Money(-2, "CHF"), new Money(-14, "USD"));
65 assertEquals(expected, fMB1.subtract(fMB2));
66 }
67
68 @Test
69 public void testBagSumAdd() {
70
71 IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(28, "USD"));
72 assertEquals(expected, fMB1.add(fMB2));
73 }
74
75 @Test
76 public void testIsZero() {
77 assertTrue(fMB1.subtract(fMB1).isZero());
78 assertTrue(MoneyBag.create(new Money(0, "CHF"), new Money(0, "USD")).isZero());
79 }
80
81 @Test
82 public void testMixedSimpleAdd() {
83
84 IMoney expected = MoneyBag.create(f12CHF, f7USD);
85 assertEquals(expected, f12CHF.add(f7USD));
86 }
87
88 @Test
89 public void testBagNotEquals() {
90 IMoney bag = MoneyBag.create(f12CHF, f7USD);
91 assertFalse(bag.equals(new Money(12, "DEM").add(f7USD)));
92 }
93
94 @Test
95 public void testMoneyBagEquals() {
96 assertTrue(!fMB1.equals(null));
97
98 assertEquals(fMB1, fMB1);
99 IMoney equal = MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));
100 assertTrue(fMB1.equals(equal));
101 assertTrue(!fMB1.equals(f12CHF));
102 assertTrue(!f12CHF.equals(fMB1));
103 assertTrue(!fMB1.equals(fMB2));
104 }
105
106 @Test
107 public void testMoneyBagHash() {
108 IMoney equal = MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));
109 assertEquals(fMB1.hashCode(), equal.hashCode());
110 }
111
112 @Test
113 public void testMoneyEquals() {
114 assertTrue(!f12CHF.equals(null));
115 Money equalMoney = new Money(12, "CHF");
116 assertEquals(f12CHF, f12CHF);
117 assertEquals(f12CHF, equalMoney);
118 assertEquals(f12CHF.hashCode(), equalMoney.hashCode());
119 assertTrue(!f12CHF.equals(f14CHF));
120 }
121
122 @Test
123 public void zeroMoniesAreEqualRegardlessOfCurrency() {
124 Money zeroDollars = new Money(0, "USD");
125 Money zeroFrancs = new Money(0, "CHF");
126
127 assertEquals(zeroDollars, zeroFrancs);
128 assertEquals(zeroDollars.hashCode(), zeroFrancs.hashCode());
129 }
130
131 @Test
132 public void testMoneyHash() {
133 assertTrue(!f12CHF.equals(null));
134 Money equal = new Money(12, "CHF");
135 assertEquals(f12CHF.hashCode(), equal.hashCode());
136 }
137
138 @Test
139 public void testSimplify() {
140 IMoney money = MoneyBag.create(new Money(26, "CHF"), new Money(28, "CHF"));
141 assertEquals(new Money(54, "CHF"), money);
142 }
143
144 @Test
145 public void testNormalize2() {
146
147 Money expected = new Money(7, "USD");
148 assertEquals(expected, fMB1.subtract(f12CHF));
149 }
150
151 @Test
152 public void testNormalize3() {
153
154 IMoney ms1 = MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));
155 Money expected = new Money(4, "USD");
156 assertEquals(expected, fMB1.subtract(ms1));
157 }
158
159 @Test
160 public void testNormalize4() {
161 IMoney ms1 = MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));
162 Money expected = new Money(-3, "USD");
163 assertEquals(expected, f12CHF.subtract(ms1));
164 }
165
166 @Test
167 public void testPrint() {
168 assertEquals("[12 CHF]", f12CHF.toString());
169 }
170
171 @Test
172 public void testSimpleAdd() {
173
174 Money expected = new Money(26, "CHF");
175 assertEquals(expected, f12CHF.add(f14CHF));
176 }
177
178 @Test
179 public void testSimpleBagAdd() {
180
181 IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));
182 assertEquals(expected, f14CHF.add(fMB1));
183 }
184
185 @Test
186 public void testSimpleMultiply() {
187
188 Money expected = new Money(28, "CHF");
189 assertEquals(expected, f14CHF.multiply(2));
190 }
191
192 @Test
193 public void testSimpleNegate() {
194
195 Money expected = new Money(-14, "CHF");
196 assertEquals(expected, f14CHF.negate());
197 }
198
199 @Test
200 public void testSimpleSubtract() {
201
202 Money expected = new Money(2, "CHF");
203 assertEquals(expected, f14CHF.subtract(f12CHF));
204 }
205 }