1.1 --- a/task3/solution06/test/org/apidesign/apifest08/test/Task3Test.java Tue Oct 07 11:19:36 2008 +0200
1.2 +++ b/task3/solution06/test/org/apidesign/apifest08/test/Task3Test.java Fri Oct 10 21:54:39 2008 +0200
1.3 @@ -1,7 +1,11 @@
1.4 package org.apidesign.apifest08.test;
1.5
1.6 +import java.math.BigDecimal;
1.7 +import java.math.RoundingMode;
1.8 +
1.9 import junit.framework.TestCase;
1.10 import org.apidesign.apifest08.currency.Convertor;
1.11 +import static org.apidesign.apifest08.test.Currencies.*;
1.12
1.13 /** The exchange rates are not always the same. They are changing. Day by day,
1.14 * hour by hour, minute by minute. For every bank it is important to always
1.15 @@ -43,6 +47,21 @@
1.16 * @return new instance of "online" USD and CZK convertor starting with rate 1USD = 16CZK
1.17 */
1.18 public static Convertor createOnlineCZKUSDConvertor() {
1.19 + Convertor.RateProvider rateProvider = new Convertor.RateProvider() {
1.20 + private BigDecimal seed = new BigDecimal("16.01").setScale(2);
1.21 +
1.22 + @Override
1.23 + public BigDecimal getRate() {
1.24 + if(seed.equals(new BigDecimal("15").setScale(2))) {
1.25 + seed = seed.add(new BigDecimal("0.01")).setScale(2);
1.26 + } else {
1.27 + seed = seed.subtract(new BigDecimal("0.01")).setScale(2);
1.28 + }
1.29 + return seed;
1.30 + }
1.31 +
1.32 + };
1.33 +
1.34 // initial rate: 1USD = 16CZK
1.35 // 2nd query 1USD = 15.99CZK
1.36 // 3rd query 1USD = 15.98CZK
1.37 @@ -51,7 +70,7 @@
1.38 // then 1USD = 15.02CZK
1.39 // and so on and on up to 1USD = 16CZK
1.40 // and then another round to 15, etc.
1.41 - return null;
1.42 + return new Convertor(rateProvider, USD, CZK);
1.43 }
1.44
1.45 public void testFewQueriesForOnlineConvertor() {
1.46 @@ -66,18 +85,16 @@
1.47
1.48 static void doFewQueriesForOnlineConvertor(Convertor c) {
1.49 // convert $5 to CZK using c:
1.50 - //assertEquals("Result is 80 CZK");
1.51 + assertEquals("Result is 80 CZK",80 ,c.convert(new BigDecimal(5), USD, CZK).getValue().intValue());
1.52
1.53 // convert $8 to CZK using c:
1.54 - //assertEquals("Result is 127.92 CZK");
1.55 + assertEquals("Result is 127.92 CZK", 127.92d , c.convert(new BigDecimal(8), USD, CZK).getValue().doubleValue());
1.56
1.57 // convert $1 to CZK using c:
1.58 - //assertEquals("Result is 15.98 CZK");
1.59 + assertEquals("Result is 15.98 CZK", 15.98d, c.convert(new BigDecimal(1), USD, CZK).getValue().doubleValue());
1.60
1.61 // convert 15.97CZK to USD using c:
1.62 - //assertEquals("Result is 1$");
1.63 -
1.64 - fail("Implement me!");
1.65 + assertEquals("Result is 1$", 1, c.convert(new BigDecimal("15.97").setScale(2), CZK, USD).getValue().intValue());
1.66 }
1.67
1.68 /** Join the convertors and show they behave sane.
1.69 @@ -94,10 +111,10 @@
1.70 );
1.71
1.72 // convert 16CZK to SKK using c:
1.73 - // assertEquals("Result is 20 SKK");
1.74 + assertEquals("Result is 20 SKK", 20, c.convert(new BigDecimal(16), CZK, SKK).getValue().intValue());
1.75
1.76 // convert 500SKK to CZK using c:
1.77 - // assertEquals("Result is 400 CZK");
1.78 + assertEquals("Result is 400 CZK", 400, c.convert(new BigDecimal(500), SKK, CZK).getValue().intValue());
1.79
1.80 doFewQueriesForOnlineConvertor(c);
1.81 }