View Javadoc
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          // {[12 CHF][7 USD]} *2 == {[24 CHF][14 USD]}
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          // {[12 CHF][7 USD]} negate == {[-12 CHF][-7 USD]}
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          // {[12 CHF][7 USD]} + [14 CHF] == {[26 CHF][7 USD]}
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          // {[12 CHF][7 USD]} - {[14 CHF][21 USD] == {[-2 CHF][-14 USD]}
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          // {[12 CHF][7 USD]} + {[14 CHF][21 USD]} == {[26 CHF][28 USD]}
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          // [12 CHF] + [7 USD] == {[12 CHF][7 USD]}
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         // {[12 CHF][7 USD]} - [12 CHF] == [7 USD]
147         Money expected = new Money(7, "USD");
148         assertEquals(expected, fMB1.subtract(f12CHF));
149     }
150 
151     @Test
152     public void testNormalize3() {
153         // {[12 CHF][7 USD]} - {[12 CHF][3 USD]} == [4 USD]
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() { // [12 CHF] - {[12 CHF][3 USD]} == [-3 USD]
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         // [12 CHF] + [14 CHF] == [26 CHF]
174         Money expected = new Money(26, "CHF");
175         assertEquals(expected, f12CHF.add(f14CHF));
176     }
177 
178     @Test
179     public void testSimpleBagAdd() {
180         // [14 CHF] + {[12 CHF][7 USD]} == {[26 CHF][7 USD]}
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         // [14 CHF] *2 == [28 CHF]
188         Money expected = new Money(28, "CHF");
189         assertEquals(expected, f14CHF.multiply(2));
190     }
191 
192     @Test
193     public void testSimpleNegate() {
194         // [14 CHF] negate == [-14 CHF]
195         Money expected = new Money(-14, "CHF");
196         assertEquals(expected, f14CHF.negate());
197     }
198 
199     @Test
200     public void testSimpleSubtract() {
201         // [14 CHF] - [12 CHF] == [2 CHF]
202         Money expected = new Money(2, "CHF");
203         assertEquals(expected, f14CHF.subtract(f12CHF));
204     }
205 }