Skip to content

Commit d13b5de

Browse files
committed
- Added tests.
1 parent 6169d0e commit d13b5de

File tree

2 files changed

+187
-28
lines changed

2 files changed

+187
-28
lines changed

src/test/java/org/javamoney/tck/tests/ModellingMonetaryAmountsTest.java

Lines changed: 165 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,30 @@ public void testCurrencyCode(){
5656
@SpecAssertion(section = "4.2.2", id = "422-A2")
5757
@Test
5858
public void testGetNumber(){
59-
fail();
59+
for(Class type : MonetaryAmounts.getAmountTypes()){
60+
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
61+
f.setCurrency("CHF");
62+
MonetaryAmount[] moneys = new MonetaryAmount[]{f.setNumber(100).create(), f.setNumber(34242344).create(),
63+
f.setNumber(new BigDecimal("23123213.435")).create(),
64+
f.setNumber(new BigDecimal("-23123213.435")).create(), f.setNumber(-23123213).create(),
65+
f.setNumber(0).create()};
66+
BigDecimal[] numbers = new BigDecimal[]{new BigDecimal("100,34242344"), new BigDecimal("23123213.435"),
67+
new BigDecimal("-23123213.435"), new BigDecimal("-23123213"), BigDecimal.ZERO};
68+
int[] intNums = new int[]{100, 23123213, -23123213, -23123213, 0};
69+
long[] longNums = new long[]{100, 23123213, -23123213, -23123213, 0};
70+
double[] doubleNums = new double[]{100, 34242344, 23123213.435, -23123213.435, -23123213, 0};
71+
float[] floatNums = new float[]{100f, 34242344f, 23123213.435f, -23123213.435f, -23123213, 0f};
72+
73+
for(int i = 0; i < moneys.length; i++){
74+
NumberValue nv = moneys[i].getNumber();
75+
assertNotNull(nv);
76+
assertEquals("getNumber() incorrect.", numbers[i], nv.numberValue(BigDecimal.class));
77+
assertEquals("getNumber().intValue() incorrect.", intNums[i], nv.intValue());
78+
assertEquals("getNumber().longValue() incorrect.", longNums[i], nv.longValue());
79+
assertEquals("getNumber().doubleValue() incorrect.", doubleNums[i], nv.doubleValue(), 0.0d);
80+
assertEquals("getNumber().floatValue() incorrect.", floatNums[i], nv.floatValue(), 0.0d);
81+
}
82+
}
6083
}
6184

6285
/**
@@ -94,38 +117,52 @@ public void testIsNegative(){
94117
}
95118

96119
/**
97-
* For each MonetaryAmount implementation: Ensure isNegative()
120+
* For each MonetaryAmount implementation: Ensure isPositive()
98121
* returns correct results.
99122
*/
100-
@SpecAssertion(section = "4.2.2", id = "422-A4")
123+
@SpecAssertion(section = "4.2.2", id = "422-A5")
101124
@Test
102-
public void testIsNegativeOrZero(){
125+
public void testIsPositive(){
103126
for(Class type : MonetaryAmounts.getAmountTypes()){
104127
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
105128
f.setCurrency("CHF");
106129
MonetaryAmount[] moneys = new MonetaryAmount[]{f.setNumber(100).create(), f.setNumber(34242344).create(),
107130
f.setNumber(23123213.435).create()};
108131
for(MonetaryAmount m : moneys){
109-
assertFalse("Invalid negativeOrZero (expected false): " + m, m.isNegativeOrZero());
132+
assertTrue(m.isPositive());
110133
}
111134
moneys = new MonetaryAmount[]{f.setNumber(0).create(), f.setNumber(0.0).create(),
112-
f.setNumber(BigDecimal.ZERO).create(), f.setNumber(new BigDecimal("0.0000")).create(),
135+
f.setNumber(BigDecimal.ZERO).create(), f.setNumber(new BigDecimal("0.00000000000000000")).create(),
113136
f.setNumber(-100).create(), f.setNumber(-34242344).create(), f.setNumber(-23123213.435).create()};
114137
for(MonetaryAmount m : moneys){
115-
assertTrue("Invalid negativeOrZero (expected true): " + m, m.isNegativeOrZero());
138+
assertFalse(m.isPositive());
116139
}
117140
}
118141
}
119142

120143

121144
/**
122-
* For each MonetaryAmount implementation: Ensure isPositive()
145+
* For each MonetaryAmount implementation: Ensure isZero()
123146
* returns correct results.
124147
*/
125-
@SpecAssertion(section = "4.2.2", id = "422-A5")
148+
@SpecAssertion(section = "4.2.2", id = "422-A6")
126149
@Test
127150
public void testIsZero(){
128-
fail();
151+
for(Class type : MonetaryAmounts.getAmountTypes()){
152+
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
153+
f.setCurrency("CHF");
154+
MonetaryAmount[] moneys = new MonetaryAmount[]{f.setNumber(100).create(), f.setNumber(34242344).create(),
155+
f.setNumber(23123213.435).create(), f.setNumber(-100).create(),
156+
f.setNumber(-723527.36532).create()};
157+
for(MonetaryAmount m : moneys){
158+
assertFalse(m.isZero());
159+
}
160+
moneys = new MonetaryAmount[]{f.setNumber(0).create(), f.setNumber(0.0).create(),
161+
f.setNumber(BigDecimal.ZERO).create(), f.setNumber(new BigDecimal("0.00000000000000000")).create()};
162+
for(MonetaryAmount m : moneys){
163+
assertTrue(m.isZero());
164+
}
165+
}
129166
}
130167

131168
/**
@@ -135,7 +172,16 @@ public void testIsZero(){
135172
@SpecAssertion(section = "4.2.2", id = "422-A6")
136173
@Test
137174
public void testIsZeroAdvanced(){
138-
fail();
175+
for(Class type : MonetaryAmounts.getAmountTypes()){
176+
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
177+
f.setCurrency("CHF");
178+
MonetaryAmount[] moneys =
179+
new MonetaryAmount[]{f.setNumber(-0).create(), f.setNumber(0).create(), f.setNumber(-0.0f).create(),
180+
f.setNumber(0.0f).create(), f.setNumber(-0.0d).create(), f.setNumber(0.0d).create()};
181+
for(MonetaryAmount m : moneys){
182+
assertTrue(m.isZero());
183+
}
184+
}
139185
}
140186

141187
/**
@@ -163,6 +209,54 @@ public void testSignum(){
163209
}
164210
}
165211

212+
/**
213+
* For each MonetaryAmount implementation: Ensure isNegativeOrZero()
214+
* returns correct results.
215+
*/
216+
@SpecAssertion(section = "4.2.2", id = "422-A8")
217+
@Test
218+
public void testIsNegativeOrZero(){
219+
for(Class type : MonetaryAmounts.getAmountTypes()){
220+
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
221+
f.setCurrency("CHF");
222+
MonetaryAmount[] moneys = new MonetaryAmount[]{f.setNumber(100).create(), f.setNumber(34242344).create(),
223+
f.setNumber(23123213.435).create()};
224+
for(MonetaryAmount m : moneys){
225+
assertFalse("Invalid negativeOrZero (expected false): " + m, m.isNegativeOrZero());
226+
}
227+
moneys = new MonetaryAmount[]{f.setNumber(0).create(), f.setNumber(0.0).create(),
228+
f.setNumber(BigDecimal.ZERO).create(), f.setNumber(new BigDecimal("0.0000")).create(),
229+
f.setNumber(-100).create(), f.setNumber(-34242344).create(), f.setNumber(-23123213.435).create()};
230+
for(MonetaryAmount m : moneys){
231+
assertTrue("Invalid negativeOrZero (expected true): " + m, m.isNegativeOrZero());
232+
}
233+
}
234+
}
235+
236+
/**
237+
* For each MonetaryAmount implementation: Ensure isPositiveOrZero()
238+
* returns correct results.
239+
*/
240+
@SpecAssertion(section = "4.2.2", id = "422-A9")
241+
@Test
242+
public void testIsPositiveOrZero(){
243+
for(Class type : MonetaryAmounts.getAmountTypes()){
244+
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
245+
f.setCurrency("CHF");
246+
MonetaryAmount[] moneys = new MonetaryAmount[]{f.setNumber(0).create(), f.setNumber(0.0).create(),
247+
f.setNumber(BigDecimal.ZERO).create(), f.setNumber(new BigDecimal("0.00000000000000000")).create(),
248+
f.setNumber(100).create(), f.setNumber(34242344).create(), f.setNumber(23123213.435).create()};
249+
for(MonetaryAmount m : moneys){
250+
assertTrue("Invalid positiveOrZero (expected true): " + m, m.isPositiveOrZero());
251+
}
252+
moneys = new MonetaryAmount[]{f.setNumber(-100).create(), f.setNumber(-34242344).create(),
253+
f.setNumber(-23123213.435).create()};
254+
for(MonetaryAmount m : moneys){
255+
assertFalse("Invalid positiveOrZero (expected false): " + m, m.isPositiveOrZero());
256+
}
257+
}
258+
}
259+
166260

167261
// ********************* B. Prototyping Support *****************************
168262

@@ -257,7 +351,18 @@ public void testMonetaryAmountFactories_CreateWithMonetaryContextNumberAndCurren
257351
@SpecAssertion(section = "4.2.2", id = "422-C1")
258352
@Test
259353
public void testMonetaryAmount_isGreaterThan(){
260-
fail("Not implemented");
354+
for(Class type : MonetaryAmounts.getAmountTypes()){
355+
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
356+
f.setCurrency("CHF");
357+
assertFalse(f.setNumber(BigDecimal.valueOf(0d)).create()
358+
.isGreaterThan(f.setNumber(BigDecimal.valueOf(0)).create()));
359+
assertTrue(f.setNumber(BigDecimal.valueOf(0.00000000001d)).create()
360+
.isGreaterThan(f.setNumber(BigDecimal.valueOf(0d)).create()));
361+
assertTrue(f.setNumber(15).create().isGreaterThan(f.setNumber(10).create()));
362+
assertTrue(f.setNumber(15.546).create().isGreaterThan(f.setNumber(10.34).create()));
363+
assertFalse(f.setNumber(5).create().isGreaterThan(f.setNumber(10).create()));
364+
assertFalse(f.setNumber(5.546).create().isGreaterThan(f.setNumber(10.34).create()));
365+
}
261366
}
262367

263368
/**
@@ -267,7 +372,18 @@ public void testMonetaryAmount_isGreaterThan(){
267372
@SpecAssertion(section = "4.2.2", id = "422-C2")
268373
@Test
269374
public void testMonetaryAmount_isGreaterThanOrEquals(){
270-
fail("Not implemented");
375+
for(Class type : MonetaryAmounts.getAmountTypes()){
376+
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
377+
f.setCurrency("CHF");
378+
assertTrue(f.setNumber(BigDecimal.valueOf(0d)).create()
379+
.isGreaterThanOrEqualTo(f.setNumber(BigDecimal.valueOf(0)).create()));
380+
assertTrue(f.setNumber(BigDecimal.valueOf(0.00000000001d)).create()
381+
.isGreaterThanOrEqualTo(f.setNumber(BigDecimal.valueOf(0d)).create()));
382+
assertTrue(f.setNumber(15).create().isGreaterThanOrEqualTo(f.setNumber(10).create()));
383+
assertTrue(f.setNumber(15.546).create().isGreaterThanOrEqualTo(f.setNumber(10.34).create()));
384+
assertFalse(f.setNumber(5).create().isGreaterThanOrEqualTo(f.setNumber(10).create()));
385+
assertFalse(f.setNumber(5.546).create().isGreaterThanOrEqualTo(f.setNumber(10.34).create()));
386+
}
271387
}
272388

273389
/**
@@ -319,7 +435,42 @@ public void testMonetaryAmount_isLessThanOrEquals(){
319435
@SpecAssertion(section = "4.2.2", id = "422-C5")
320436
@Test
321437
public void testMonetaryAmount_isEqualTo(){
322-
fail("Not implemented");
438+
for(Class type : MonetaryAmounts.getAmountTypes()){
439+
MonetaryAmountFactory<MonetaryAmount> f = MonetaryAmounts.getAmountFactory(type);
440+
f.setCurrency("CHF");
441+
assertTrue(f.setNumber(BigDecimal.valueOf(0d)).create()
442+
.isEqualTo(f.setNumber(BigDecimal.valueOf(0)).create()));
443+
assertFalse(f.setNumber(BigDecimal.valueOf(0.00000000001d)).create()
444+
.isEqualTo(f.setNumber(BigDecimal.valueOf(0d)).create()));
445+
assertTrue(f.setNumber(BigDecimal.valueOf(5d)).create()
446+
.isEqualTo(f.setNumber(BigDecimal.valueOf(5)).create()));
447+
assertTrue(f.setNumber(BigDecimal.valueOf(1d)).create()
448+
.isEqualTo(f.setNumber(BigDecimal.valueOf(1.00)).create()));
449+
assertTrue(f.setNumber(BigDecimal.valueOf(1d)).create().isEqualTo(f.setNumber(BigDecimal.ONE).create()));
450+
assertTrue(f.setNumber(BigDecimal.valueOf(1)).create().isEqualTo(f.setNumber(BigDecimal.ONE).create()));
451+
assertTrue(f.setNumber(new BigDecimal("1.0000")).create()
452+
.isEqualTo(f.setNumber(new BigDecimal("1.00")).create()));
453+
// Test with different scales, but numeric equal values
454+
assertTrue(f.setNumber(BigDecimal.valueOf(0d)).create()
455+
.isEqualTo(f.setNumber(BigDecimal.valueOf(0)).create()));
456+
assertTrue(f.setNumber(BigDecimal.ZERO).create().isEqualTo(f.setNumber(BigDecimal.valueOf(0)).create()));
457+
assertTrue(
458+
f.setNumber(BigDecimal.valueOf(5)).create().isEqualTo(f.setNumber(new BigDecimal("5.0")).create()));
459+
assertTrue(f.setNumber(BigDecimal.valueOf(5)).create()
460+
.isEqualTo(f.setNumber(new BigDecimal("5.00")).create()));
461+
assertTrue(f.setNumber(BigDecimal.valueOf(5)).create()
462+
.isEqualTo(f.setNumber(new BigDecimal("5.000")).create()));
463+
assertTrue(f.setNumber(BigDecimal.valueOf(5)).create()
464+
.isEqualTo(f.setNumber(new BigDecimal("5.0000")).create()));
465+
assertTrue(f.setNumber(new BigDecimal("-1.23")).create()
466+
.isEqualTo(f.setNumber(new BigDecimal("-1.230")).create()));
467+
assertTrue(f.setNumber(new BigDecimal("-1.23")).create()
468+
.isEqualTo(f.setNumber(new BigDecimal("-1.2300")).create()));
469+
assertTrue(f.setNumber(new BigDecimal("-1.23")).create()
470+
.isEqualTo(f.setNumber(new BigDecimal("-1.23000")).create()));
471+
assertTrue(f.setNumber(new BigDecimal("-1.23")).create()
472+
.isEqualTo(f.setNumber(new BigDecimal("-1.230000000000000000000")).create()));
473+
}
323474
}
324475

325476
/**

test-audit.xml

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,22 @@
1515
</assertion>
1616
</group>
1717
</section>
18-
<section id="1" title="Introduction, Use Cases, Requirements (no tests)" testable="false" />
19-
<section id="2" title="Use Cases" testable="false" />
20-
<section id="3" title="Requirements" testable="false" />
21-
<section id="3.1" title="Core Requirements" testable="false" />
22-
<section id="3.2" title="Formatting Requirements" testable="false" />
23-
<section id="3.3" title="EE and ME Support" testable="false" />
24-
<section id="3.4" title="Non Functional Requirements" testable="false" />
18+
<section id="1" title="Introduction, Use Cases, Requirements (no tests)" />
19+
<section id="2" title="Use Cases" />
20+
<section id="3" title="Requirements" />
21+
<section id="3.1" title="Core Requirements" />
22+
<section id="3.2" title="Formatting Requirements" />
23+
<section id="3.3" title="EE and ME Support" />
24+
<section id="3.4" title="Non Functional Requirements"/>
2525

2626
<section id="4" title="Specification" />
2727

2828
<!-- **************************************************************** ****
2929
Core API **************************************************************** -->
30-
<section id="4.1" title="Package and Project Structure" testable="false" />
31-
<section id="4.1.1" title="Package Overview" testable="false" />
32-
<section id="4.1.2" title="Module/Repository Overview" testable="false" />
33-
<section id="4.2" title="Money and Currency Core API" testable="false" />
30+
<section id="4.1" title="Package and Project Structure" />
31+
<section id="4.1.1" title="Package Overview" />
32+
<section id="4.1.2" title="Module/Repository Overview" />
33+
<section id="4.2" title="Money and Currency Core API" />
3434
<section id="4.2.1" title="Modelling of Currencies">
3535
<!-- Tests class ModellingCurrenciesTest -->
3636
<group>
@@ -134,6 +134,14 @@
134134
<text>For each MonetaryAmount implementation: signum() function is
135135
implemented correctly.</text>
136136
</assertion>
137+
<assertion id="422-A8">
138+
<text>For each MonetaryAmount implementation: Ensure isNegativeOrZero()
139+
returns correct results.</text>
140+
</assertion>
141+
<assertion id="422-A9">
142+
<text>For each MonetaryAmount implementation: Ensure isPositiveOrZero()
143+
returns correct results.</text>
144+
</assertion>
137145
</group>
138146
<group>
139147
<text>B. Prototyping Support</text>
@@ -1071,8 +1079,8 @@
10711079
</assertion>
10721080
</group>
10731081
</section>
1074-
<section id="4.5.3" title="The Bootstrapping Mechanism" testable="false" >
1082+
<section id="4.5.3" title="The Bootstrapping Mechanism" >
10751083
</section>
1076-
<section id="5" title="Recommendations" testable="false" />
1077-
<section id="6" title="Examples" testable="false" />
1084+
<section id="5" title="Recommendations" />
1085+
<section id="6" title="Examples" />
10781086
</specification>

0 commit comments

Comments
 (0)