View Javadoc
1   package junit.samples.money;
2   
3   import junit.framework.TestCase;
4   
5   public class MoneyTest extends TestCase {
6       private Money f12CHF;
7       private Money f14CHF;
8       private Money f7USD;
9       private Money f21USD;
10  
11      private IMoney fMB1;
12      private IMoney fMB2;
13  
14      public static void main(String args[]) {
15          junit.textui.TestRunner.run(MoneyTest.class);
16      }
17  
18      @Override
19      protected void setUp() {
20          f12CHF = new Money(12, "CHF");
21          f14CHF = new Money(14, "CHF");
22          f7USD = new Money(7, "USD");
23          f21USD = new Money(21, "USD");
24  
25          fMB1 = MoneyBag.create(f12CHF, f7USD);
26          fMB2 = MoneyBag.create(f14CHF, f21USD);
27      }
28  
29      public void testBagMultiply() {
30          // {[12 CHF][7 USD]} *2 == {[24 CHF][14 USD]}
31          IMoney expected = MoneyBag.create(new Money(24, "CHF"), new Money(14, "USD"));
32          assertEquals(expected, fMB1.multiply(2));
33          assertEquals(fMB1, fMB1.multiply(1));
34          assertTrue(fMB1.multiply(0).isZero());
35      }
36  
37      public void testBagNegate() {
38          // {[12 CHF][7 USD]} negate == {[-12 CHF][-7 USD]}
39          IMoney expected = MoneyBag.create(new Money(-12, "CHF"), new Money(-7, "USD"));
40          assertEquals(expected, fMB1.negate());
41      }
42  
43      public void testBagSimpleAdd() {
44          // {[12 CHF][7 USD]} + [14 CHF] == {[26 CHF][7 USD]}
45          IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));
46          assertEquals(expected, fMB1.add(f14CHF));
47      }
48  
49      public void testBagSubtract() {
50          // {[12 CHF][7 USD]} - {[14 CHF][21 USD] == {[-2 CHF][-14 USD]}
51          IMoney expected = MoneyBag.create(new Money(-2, "CHF"), new Money(-14, "USD"));
52          assertEquals(expected, fMB1.subtract(fMB2));
53      }
54  
55      public void testBagSumAdd() {
56          // {[12 CHF][7 USD]} + {[14 CHF][21 USD]} == {[26 CHF][28 USD]}
57          IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(28, "USD"));
58          assertEquals(expected, fMB1.add(fMB2));
59      }
60  
61      public void testIsZero() {
62          assertTrue(fMB1.subtract(fMB1).isZero());
63          assertTrue(MoneyBag.create(new Money(0, "CHF"), new Money(0, "USD")).isZero());
64      }
65  
66      public void testMixedSimpleAdd() {
67          // [12 CHF] + [7 USD] == {[12 CHF][7 USD]}
68          IMoney expected = MoneyBag.create(f12CHF, f7USD);
69          assertEquals(expected, f12CHF.add(f7USD));
70      }
71  
72      public void testBagNotEquals() {
73          IMoney bag = MoneyBag.create(f12CHF, f7USD);
74          assertFalse(bag.equals(new Money(12, "DEM").add(f7USD)));
75      }
76  
77      public void testMoneyBagEquals() {
78          assertTrue(!fMB1.equals(null));
79  
80          assertEquals(fMB1, fMB1);
81          IMoney equal = MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));
82          assertTrue(fMB1.equals(equal));
83          assertTrue(!fMB1.equals(f12CHF));
84          assertTrue(!f12CHF.equals(fMB1));
85          assertTrue(!fMB1.equals(fMB2));
86      }
87  
88      public void testMoneyBagHash() {
89          IMoney equal = MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));
90          assertEquals(fMB1.hashCode(), equal.hashCode());
91      }
92  
93      public void testMoneyEquals() {
94          assertTrue(!f12CHF.equals(null));
95          Money equalMoney = new Money(12, "CHF");
96          assertEquals(f12CHF, f12CHF);
97          assertEquals(f12CHF, equalMoney);
98          assertEquals(f12CHF.hashCode(), equalMoney.hashCode());
99          assertTrue(!f12CHF.equals(f14CHF));
100     }
101 
102     public void testMoneyHash() {
103         assertTrue(!f12CHF.equals(null));
104         Money equal = new Money(12, "CHF");
105         assertEquals(f12CHF.hashCode(), equal.hashCode());
106     }
107 
108     public void testSimplify() {
109         IMoney money = MoneyBag.create(new Money(26, "CHF"), new Money(28, "CHF"));
110         assertEquals(new Money(54, "CHF"), money);
111     }
112 
113     public void testNormalize2() {
114         // {[12 CHF][7 USD]} - [12 CHF] == [7 USD]
115         Money expected = new Money(7, "USD");
116         assertEquals(expected, fMB1.subtract(f12CHF));
117     }
118 
119     public void testNormalize3() {
120         // {[12 CHF][7 USD]} - {[12 CHF][3 USD]} == [4 USD]
121         IMoney ms1 = MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));
122         Money expected = new Money(4, "USD");
123         assertEquals(expected, fMB1.subtract(ms1));
124     }
125 
126     public void testNormalize4() {
127         // [12 CHF] - {[12 CHF][3 USD]} == [-3 USD]
128         IMoney ms1 = MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));
129         Money expected = new Money(-3, "USD");
130         assertEquals(expected, f12CHF.subtract(ms1));
131     }
132 
133     public void testPrint() {
134         assertEquals("[12 CHF]", f12CHF.toString());
135     }
136 
137     public void testSimpleAdd() {
138         // [12 CHF] + [14 CHF] == [26 CHF]
139         Money expected = new Money(26, "CHF");
140         assertEquals(expected, f12CHF.add(f14CHF));
141     }
142 
143     public void testSimpleBagAdd() {
144         // [14 CHF] + {[12 CHF][7 USD]} == {[26 CHF][7 USD]}
145         IMoney expected = MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));
146         assertEquals(expected, f14CHF.add(fMB1));
147     }
148 
149     public void testSimpleMultiply() {
150         // [14 CHF] *2 == [28 CHF]
151         Money expected = new Money(28, "CHF");
152         assertEquals(expected, f14CHF.multiply(2));
153     }
154 
155     public void testSimpleNegate() {
156         // [14 CHF] negate == [-14 CHF]
157         Money expected = new Money(-14, "CHF");
158         assertEquals(expected, f14CHF.negate());
159     }
160 
161     public void testSimpleSubtract() {
162         // [14 CHF] - [12 CHF] == [2 CHF]
163         Money expected = new Money(2, "CHF");
164         assertEquals(expected, f14CHF.subtract(f12CHF));
165     }
166 }