1.1 --- a/task3/solution12/test/org/apidesign/apifest08/test/Task3Test.java Tue Oct 07 11:19:36 2008 +0200
1.2 +++ b/task3/solution12/test/org/apidesign/apifest08/test/Task3Test.java Fri Oct 10 21:48:49 2008 +0200
1.3 @@ -1,7 +1,10 @@
1.4 package org.apidesign.apifest08.test;
1.5
1.6 +import java.util.Currency;
1.7 +
1.8 import junit.framework.TestCase;
1.9 import org.apidesign.apifest08.currency.Convertor;
1.10 +import org.apidesign.apifest08.currency.exceptions.UnknownConvertorException;
1.11
1.12 /** The exchange rates are not always the same. They are changing. Day by day,
1.13 * hour by hour, minute by minute. For every bank it is important to always
1.14 @@ -16,6 +19,13 @@
1.15 * to be used.
1.16 */
1.17 public class Task3Test extends TestCase {
1.18 +
1.19 + private static double actualRate;
1.20 + private static boolean increasing;
1.21 +
1.22 + private static final double EXCHANGE_RATE_MAX = 16.0;
1.23 + private static final double EXCHANGE_RATE_MIN = 15.0;
1.24 +
1.25 public Task3Test(String testName) {
1.26 super(testName);
1.27 }
1.28 @@ -43,62 +53,95 @@
1.29 * @return new instance of "online" USD and CZK convertor starting with rate 1USD = 16CZK
1.30 */
1.31 public static Convertor createOnlineCZKUSDConvertor() {
1.32 - // initial rate: 1USD = 16CZK
1.33 - // 2nd query 1USD = 15.99CZK
1.34 - // 3rd query 1USD = 15.98CZK
1.35 - // until 1USD = 15.00CZK
1.36 - // then 1USD = 15.01CZK
1.37 - // then 1USD = 15.02CZK
1.38 - // and so on and on up to 1USD = 16CZK
1.39 - // and then another round to 15, etc.
1.40 - return null;
1.41 + actualRate = 16.01;
1.42 + increasing = false;
1.43 +
1.44 + // sets actual exchange rates
1.45 + setRates();
1.46 +
1.47 + // create new instance
1.48 + Convertor convertor = null;
1.49 + try {
1.50 + convertor = Convertor.getConvertorInstance(Currency.getInstance("USD"), Currency.getInstance("CZK"));
1.51 + } catch (UnknownConvertorException e) {
1.52 + e.printStackTrace();
1.53 + }
1.54 +
1.55 + return convertor;
1.56 }
1.57
1.58 - public void testFewQueriesForOnlineConvertor() {
1.59 - if (Boolean.getBoolean("ignore.failing")) {
1.60 - // implement me!
1.61 - return;
1.62 - }
1.63 -
1.64 + public void testFewQueriesForOnlineConvertor() throws Exception {
1.65 Convertor c = createOnlineCZKUSDConvertor();
1.66 doFewQueriesForOnlineConvertor(c);
1.67 }
1.68
1.69 - static void doFewQueriesForOnlineConvertor(Convertor c) {
1.70 + static void doFewQueriesForOnlineConvertor(Convertor c) throws Exception {
1.71 // convert $5 to CZK using c:
1.72 - //assertEquals("Result is 80 CZK");
1.73 + double result = c.convert(5d, Currency.getInstance("USD"), Currency.getInstance("CZK"));
1.74 + double expectedResult = actualRate * 5;
1.75 + assertEquals("Result is not " + expectedResult + " CZK", expectedResult, result);
1.76
1.77 + // change exchange rates
1.78 + setRates();
1.79 +
1.80 // convert $8 to CZK using c:
1.81 - //assertEquals("Result is 127.92 CZK");
1.82 + result = c.convert(8d, Currency.getInstance("USD"), Currency.getInstance("CZK"));
1.83 + expectedResult = actualRate * 8;
1.84 + assertEquals("Result is not " + expectedResult + " CZK", expectedResult, result);
1.85 +
1.86 + // change exchange rates
1.87 + setRates();
1.88
1.89 // convert $1 to CZK using c:
1.90 - //assertEquals("Result is 15.98 CZK");
1.91 + result = c.convert(1d, Currency.getInstance("USD"), Currency.getInstance("CZK"));
1.92 + expectedResult = actualRate * 1;
1.93 + assertEquals("Result is not " + expectedResult + " CZK", expectedResult, result);
1.94 +
1.95 + // change exchange rates
1.96 + setRates();
1.97
1.98 // convert 15.97CZK to USD using c:
1.99 - //assertEquals("Result is 1$");
1.100 + result = c.convert(15.97d, Currency.getInstance("CZK"), Currency.getInstance("USD"));
1.101 + expectedResult = 15.97 / actualRate ;
1.102 + assertEquals("Result is not " + expectedResult + " USD", expectedResult, result);
1.103
1.104 - fail("Implement me!");
1.105 +// fail("Implement me!");
1.106 }
1.107
1.108 /** Join the convertors and show they behave sane.
1.109 */
1.110 public void testOnlineConvertorComposition() throws Exception {
1.111 - if (Boolean.getBoolean("ignore.failing")) {
1.112 - // implement me!
1.113 - return;
1.114 - }
1.115 -
1.116 Convertor c = Task2Test.merge(
1.117 createOnlineCZKUSDConvertor(),
1.118 Task1Test.createSKKtoCZK()
1.119 );
1.120
1.121 // convert 16CZK to SKK using c:
1.122 - // assertEquals("Result is 20 SKK");
1.123 + double result = c.convert(16d, Currency.getInstance("CZK"), Currency.getInstance("SKK"));
1.124 + assertEquals("Result is not 20 SKK", 20d, result);
1.125
1.126 // convert 500SKK to CZK using c:
1.127 - // assertEquals("Result is 400 CZK");
1.128 + result = c.convert(500d, Currency.getInstance("SKK"), Currency.getInstance("CZK"));
1.129 + assertEquals("Result is not 400 CZK", 400d, result);
1.130
1.131 doFewQueriesForOnlineConvertor(c);
1.132 }
1.133 +
1.134 + private static void setRates() {
1.135 + // logic for change of actual exchange rate
1.136 + if(increasing) {
1.137 + actualRate += 0.01;
1.138 + if(actualRate == EXCHANGE_RATE_MAX){
1.139 + increasing = false;
1.140 + }
1.141 + } else {
1.142 + actualRate -= 0.01;
1.143 + if(actualRate == EXCHANGE_RATE_MIN){
1.144 + increasing = true;
1.145 + }
1.146 + }
1.147 +
1.148 + // set exchange rates
1.149 + Convertor.setConvertorRates(Currency.getInstance("USD"), Currency.getInstance("CZK"), actualRate, 1d);
1.150 + }
1.151 }