1   package junit.samples.money;
2   
3   import junit.framework.*;
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  	protected void setUp() {
18  		f12CHF= new Money(12, "CHF");
19  		f14CHF= new Money(14, "CHF");
20  		f7USD= new Money( 7, "USD");
21  		f21USD= new Money(21, "USD");
22  
23  		fMB1= MoneyBag.create(f12CHF, f7USD);
24  		fMB2= MoneyBag.create(f14CHF, f21USD);
25  	}
26  	public void testBagMultiply() {
27  		// {[12 CHF][7 USD]} *2 == {[24 CHF][14 USD]}
28  		IMoney expected= MoneyBag.create(new Money(24, "CHF"), new Money(14, "USD"));
29  		assertEquals(expected, fMB1.multiply(2)); 
30  		assertEquals(fMB1, fMB1.multiply(1));
31  		assertTrue(fMB1.multiply(0).isZero());
32  	}
33  	public void testBagNegate() {
34  		// {[12 CHF][7 USD]} negate == {[-12 CHF][-7 USD]}
35  		IMoney expected= MoneyBag.create(new Money(-12, "CHF"), new Money(-7, "USD"));
36  		assertEquals(expected, fMB1.negate());
37  	}
38  	public void testBagSimpleAdd() {
39  		// {[12 CHF][7 USD]} + [14 CHF] == {[26 CHF][7 USD]}
40  		IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));
41  		assertEquals(expected, fMB1.add(f14CHF));
42  	}
43  	public void testBagSubtract() {
44  		// {[12 CHF][7 USD]} - {[14 CHF][21 USD] == {[-2 CHF][-14 USD]}
45  		IMoney expected= MoneyBag.create(new Money(-2, "CHF"), new Money(-14, "USD"));
46  		assertEquals(expected, fMB1.subtract(fMB2));
47  	}
48  	public void testBagSumAdd() {
49  		// {[12 CHF][7 USD]} + {[14 CHF][21 USD]} == {[26 CHF][28 USD]}
50  		IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(28, "USD"));
51  		assertEquals(expected, fMB1.add(fMB2));
52  	}
53  	public void testIsZero() {
54  		assertTrue(fMB1.subtract(fMB1).isZero()); 
55  		assertTrue(MoneyBag.create(new Money (0, "CHF"), new Money (0, "USD")).isZero());
56  	}
57  	public void testMixedSimpleAdd() {
58  		// [12 CHF] + [7 USD] == {[12 CHF][7 USD]}
59  		IMoney expected= MoneyBag.create(f12CHF, f7USD);
60  		assertEquals(expected, f12CHF.add(f7USD));
61  	}
62  	public void testBagNotEquals() {
63  		IMoney bag= MoneyBag.create(f12CHF, f7USD);
64  		assertFalse(bag.equals(new Money(12, "DEM").add(f7USD)));
65  	}
66  	public void testMoneyBagEquals() {
67  		assertTrue(!fMB1.equals(null)); 
68  
69  		assertEquals(fMB1, fMB1);
70  		IMoney equal= MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));
71  		assertTrue(fMB1.equals(equal));
72  		assertTrue(!fMB1.equals(f12CHF));
73  		assertTrue(!f12CHF.equals(fMB1));
74  		assertTrue(!fMB1.equals(fMB2));
75  	}
76  	public void testMoneyBagHash() {
77  		IMoney equal= MoneyBag.create(new Money(12, "CHF"), new Money(7, "USD"));
78  		assertEquals(fMB1.hashCode(), equal.hashCode());
79  	}
80  	public void testMoneyEquals() {
81  		assertTrue(!f12CHF.equals(null)); 
82  		Money equalMoney= new Money(12, "CHF");
83  		assertEquals(f12CHF, f12CHF);
84  		assertEquals(f12CHF, equalMoney);
85  		assertEquals(f12CHF.hashCode(), equalMoney.hashCode());
86  		assertTrue(!f12CHF.equals(f14CHF));
87  	}
88  	public void testMoneyHash() {
89  		assertTrue(!f12CHF.equals(null)); 
90  		Money equal= new Money(12, "CHF");
91  		assertEquals(f12CHF.hashCode(), equal.hashCode());
92  	}
93  	public void testSimplify() {
94  		IMoney money= MoneyBag.create(new Money(26, "CHF"), new Money(28, "CHF"));
95  		assertEquals(new Money(54, "CHF"), money);
96  	}
97  	public void testNormalize2() {
98  		// {[12 CHF][7 USD]} - [12 CHF] == [7 USD]
99  		Money expected= new Money(7, "USD");
100 		assertEquals(expected, fMB1.subtract(f12CHF));
101 	}
102 	public void testNormalize3() {
103 		// {[12 CHF][7 USD]} - {[12 CHF][3 USD]} == [4 USD]
104 		IMoney ms1= MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));
105 		Money expected= new Money(4, "USD");
106 		assertEquals(expected, fMB1.subtract(ms1));
107 	}
108 	public void testNormalize4() {
109 		// [12 CHF] - {[12 CHF][3 USD]} == [-3 USD]
110 		IMoney ms1= MoneyBag.create(new Money(12, "CHF"), new Money(3, "USD"));
111 		Money expected= new Money(-3, "USD");
112 		assertEquals(expected, f12CHF.subtract(ms1));
113 	}
114 	public void testPrint() {
115 		assertEquals("[12 CHF]", f12CHF.toString());
116 	}
117 	public void testSimpleAdd() {
118 		// [12 CHF] + [14 CHF] == [26 CHF]
119 		Money expected= new Money(26, "CHF");
120 		assertEquals(expected, f12CHF.add(f14CHF));
121 	}
122 	public void testSimpleBagAdd() {
123 		// [14 CHF] + {[12 CHF][7 USD]} == {[26 CHF][7 USD]}
124 		IMoney expected= MoneyBag.create(new Money(26, "CHF"), new Money(7, "USD"));
125 		assertEquals(expected, f14CHF.add(fMB1));
126 	}
127 	public void testSimpleMultiply() {
128 		// [14 CHF] *2 == [28 CHF]
129 		Money expected= new Money(28, "CHF");
130 		assertEquals(expected, f14CHF.multiply(2));
131 	}
132 	public void testSimpleNegate() {
133 		// [14 CHF] negate == [-14 CHF]
134 		Money expected= new Money(-14, "CHF");
135 		assertEquals(expected, f14CHF.negate());
136 	}
137 	public void testSimpleSubtract() {
138 		// [14 CHF] - [12 CHF] == [2 CHF]
139 		Money expected= new Money(2, "CHF");
140 		assertEquals(expected, f14CHF.subtract(f12CHF));
141 	}
142 }