From c87a9a3accca5d2532b8752a64131ebf90e2f746 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Fri, 29 Aug 2014 23:15:14 +0200 Subject: [PATCH] changed formatter to use CoinFormat instead of BtcFormat --- .../trade/createoffer/CreateOfferModel.java | 74 ++++++++++----- .../gui/trade/createoffer/CreateOfferPM.java | 2 +- .../io/bitsquare/gui/util/BSFormatter.java | 54 ++++++----- .../java/io/bitsquare/BitSquareTestSuite.java | 4 +- .../trade/createoffer/CreateOfferPMTest.java | 30 +++--- .../bitsquare/gui/util/BSFormatterTest.java | 94 ++++++++----------- 6 files changed, 139 insertions(+), 119 deletions(-) diff --git a/src/main/java/io/bitsquare/gui/trade/createoffer/CreateOfferModel.java b/src/main/java/io/bitsquare/gui/trade/createoffer/CreateOfferModel.java index b45c71dd98..9eb01292d5 100644 --- a/src/main/java/io/bitsquare/gui/trade/createoffer/CreateOfferModel.java +++ b/src/main/java/io/bitsquare/gui/trade/createoffer/CreateOfferModel.java @@ -52,7 +52,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static com.google.common.base.Preconditions.checkArgument; -import static io.bitsquare.gui.util.BSFormatter.reduceto4Dezimals; +import static io.bitsquare.gui.util.BSFormatter.reduceTo4Decimals; /** * Domain for that UI element. @@ -132,16 +132,20 @@ class CreateOfferModel extends UIModel { super.activate(); // might be changed after screen change - collateralAsLong.set(settings.getCollateral()); - - BankAccount bankAccount = user.getCurrentBankAccount(); - if (bankAccount != null) { - bankAccountType.set(bankAccount.getBankAccountType().toString()); - bankAccountCurrency.set(bankAccount.getCurrency().getCurrencyCode()); - bankAccountCounty.set(bankAccount.getCountry().getName()); + if (settings != null) { + collateralAsLong.set(settings.getCollateral()); + acceptedCountries.setAll(settings.getAcceptedCountries()); + acceptedLanguages.setAll(settings.getAcceptedLanguageLocales()); + } + + if (user != null) { + BankAccount bankAccount = user.getCurrentBankAccount(); + if (bankAccount != null) { + bankAccountType.set(bankAccount.getBankAccountType().toString()); + bankAccountCurrency.set(bankAccount.getCurrency().getCurrencyCode()); + bankAccountCounty.set(bankAccount.getCountry().getName()); + } } - acceptedCountries.setAll(settings.getAcceptedCountries()); - acceptedLanguages.setAll(settings.getAcceptedLanguageLocales()); } @Override @@ -178,34 +182,54 @@ class CreateOfferModel extends UIModel { } void calculateVolume() { - if (priceAsFiat.get() != null && amountAsCoin.get() != null /*&& !amountAsCoin.get().isZero()*/) { - volumeAsFiat.set(new ExchangeRate(priceAsFiat.get()).coinToFiat(amountAsCoin.get())); + try { + if (priceAsFiat.get() != null && amountAsCoin.get() != null && !amountAsCoin.get().isZero() && !priceAsFiat + .get().isZero()) { + volumeAsFiat.set(new ExchangeRate(priceAsFiat.get()).coinToFiat(amountAsCoin.get())); + } + } catch (Throwable t) { + // Should be never reached + log.error(t.toString()); } } void calculateAmount() { + try { + if (volumeAsFiat.get() != null && priceAsFiat.get() != null && !volumeAsFiat.get().isZero() && !priceAsFiat + .get().isZero()) { + amountAsCoin.set(new ExchangeRate(priceAsFiat.get()).fiatToCoin(volumeAsFiat.get())); - if (volumeAsFiat.get() != null && priceAsFiat.get() != null/* && !volumeAsFiat.get().isZero() && !priceAsFiat - .get().isZero()*/) { - amountAsCoin.set(new ExchangeRate(priceAsFiat.get()).fiatToCoin(volumeAsFiat.get())); - - // If we got a btc value with more then 4 decimals we convert it to max 4 decimals - amountAsCoin.set(reduceto4Dezimals(amountAsCoin.get())); - calculateTotalToPay(); - calculateCollateral(); + // If we got a btc value with more then 4 decimals we convert it to max 4 decimals + amountAsCoin.set(reduceTo4Decimals(amountAsCoin.get())); + calculateTotalToPay(); + calculateCollateral(); + } + } catch (Throwable t) { + // Should be never reached + log.error(t.toString()); } } void calculateTotalToPay() { calculateCollateral(); - - if (collateralAsCoin.get() != null) - totalToPayAsCoin.set(collateralAsCoin.get().add(totalFeesAsCoin.get())); + try { + if (collateralAsCoin.get() != null) + totalToPayAsCoin.set(collateralAsCoin.get().add(totalFeesAsCoin.get())); + } catch (Throwable t) { + // Should be never reached + log.error(t.toString()); + } } void calculateCollateral() { - if (amountAsCoin.get() != null) - collateralAsCoin.set(amountAsCoin.get().multiply(collateralAsLong.get()).divide(1000)); + try { + + if (amountAsCoin.get() != null) + collateralAsCoin.set(amountAsCoin.get().multiply(collateralAsLong.get()).divide(1000L)); + } catch (Throwable t) { + // The multiply might lead to too large numbers, we don't handle it but it should not break the app + log.error(t.toString()); + } } diff --git a/src/main/java/io/bitsquare/gui/trade/createoffer/CreateOfferPM.java b/src/main/java/io/bitsquare/gui/trade/createoffer/CreateOfferPM.java index 3d3634e074..c3d5b463e2 100644 --- a/src/main/java/io/bitsquare/gui/trade/createoffer/CreateOfferPM.java +++ b/src/main/java/io/bitsquare/gui/trade/createoffer/CreateOfferPM.java @@ -282,7 +282,7 @@ class CreateOfferPM extends PresentationModel { // We do volume/amount calculation during input, so user has immediate feedback amount.addListener((ov, oldValue, newValue) -> { if (isBtcInputValid(newValue).isValid) { - setMinAmountToModel(); + setAmountToModel(); calculateVolume(); model.calculateTotalToPay(); model.calculateCollateral(); diff --git a/src/main/java/io/bitsquare/gui/util/BSFormatter.java b/src/main/java/io/bitsquare/gui/util/BSFormatter.java index 649f404552..786eddcd2c 100644 --- a/src/main/java/io/bitsquare/gui/util/BSFormatter.java +++ b/src/main/java/io/bitsquare/gui/util/BSFormatter.java @@ -23,7 +23,6 @@ import io.bitsquare.locale.Localisation; import io.bitsquare.trade.Direction; import com.google.bitcoin.core.Coin; -import com.google.bitcoin.utils.BtcFormat; import com.google.bitcoin.utils.CoinFormat; import com.google.bitcoin.utils.Fiat; @@ -55,10 +54,15 @@ public class BSFormatter { private static Locale locale = Locale.getDefault(); private static boolean useMilliBit; - private static String code = "BTC"; private static int scale = 3; - // format is like: 1,00 or 1,0010 never more then 4 decimals + // Format use 2 min decimal places and 2 more optional: 1.00 or 1.0010 + // There are not more then 4 decimals allowed. + // We don't support localized formatting. Format is always using "." as decimal mark and no grouping separator. + // Input of "," as decimal mark (like in german locale) will be replaced with ".". + // Input of a group separator (1,123,45) lead to an validation error. + // Note: BtcFormat was intended to be used, but it lead to many problems (automatic format to mBit, + // no way to remove grouping separator). It seems to be not optimal for user input formatting. private static CoinFormat coinFormat = CoinFormat.BTC.repeatOptionalDecimals(2, 1); // format is like: 1,00 never more then 2 decimals @@ -66,11 +70,9 @@ public class BSFormatter { private static String currencyCode = Currency.getInstance(Locale.getDefault()).getCurrencyCode(); - private static BtcFormat btcFormat = getBtcFormat(); - static { //useMilliBitFormat(true); - setLocale(Locale.US); + // setLocale(Locale.US); } @@ -81,8 +83,7 @@ public class BSFormatter { public static void useMilliBitFormat(boolean useMilliBit) { BSFormatter.useMilliBit = useMilliBit; - code = useMilliBit ? "mBTC" : "BTC"; - btcFormat = getBtcFormat(); + coinFormat = getCoinFormat(); scale = useMilliBit ? 0 : 3; } @@ -91,11 +92,13 @@ public class BSFormatter { */ public static void setLocale(Locale locale) { BSFormatter.locale = locale; - btcFormat = getBtcFormat(); } - private static BtcFormat getBtcFormat() { - return BtcFormat.getInstance(useMilliBit ? BtcFormat.MILLICOIN_SCALE : BtcFormat.COIN_SCALE, locale, 2, 2); + private static CoinFormat getCoinFormat() { + if (useMilliBit) + return CoinFormat.MBTC.repeatOptionalDecimals(2, 1); + else + return CoinFormat.BTC.repeatOptionalDecimals(2, 1); } public static void setFiatCurrencyCode(String currencyCode) { @@ -109,7 +112,7 @@ public class BSFormatter { public static String formatCoin(Coin coin) { try { - return btcFormat.format(coin); + return coinFormat.noCode().format(coin).toString(); } catch (Throwable t) { log.warn("Exception at formatBtc: " + t.toString()); return ""; @@ -118,18 +121,19 @@ public class BSFormatter { public static String formatCoinWithCode(Coin coin) { try { - // we don't use the code feature from btcFormat as it does automatic switching between mBTC and BTC and + // we don't use the code feature from coinFormat as it does automatic switching between mBTC and BTC and // pre and post fixing - return btcFormat.format(coin) + " " + code; + return coinFormat.postfixCode().format(coin).toString(); } catch (Throwable t) { log.warn("Exception at formatBtcWithCode: " + t.toString()); return ""; } } + public static Coin parseToCoin(String input) { try { - return btcFormat.parse(input); + return coinFormat.parse(cleanedInput(input)); } catch (Throwable t) { log.warn("Exception at parseToBtc: " + t.toString()); return Coin.ZERO; @@ -146,7 +150,7 @@ public class BSFormatter { */ public static Coin parseToCoinWith4Decimals(String input) { try { - return Coin.valueOf(new BigDecimal(parseToCoin(input).value).setScale(-scale - 1, + return Coin.valueOf(new BigDecimal(parseToCoin(cleanedInput(input)).value).setScale(-scale - 1, BigDecimal.ROUND_HALF_UP).setScale(scale + 1).toBigInteger().longValue()); } catch (Throwable t) { log.warn("Exception at parseToCoinWith4Decimals: " + t.toString()); @@ -164,7 +168,7 @@ public class BSFormatter { * @param coin The coin which should be transformed * @return The transformed coin */ - public static Coin reduceto4Dezimals(Coin coin) { + public static Coin reduceTo4Decimals(Coin coin) { return parseToCoin(formatCoin(coin)); } @@ -193,9 +197,7 @@ public class BSFormatter { public static Fiat parseToFiat(String input) { try { - input = input.replace(",", "."); - Double.parseDouble(input); // test if valid double - return Fiat.parseFiat(currencyCode, input); + return Fiat.parseFiat(currencyCode, cleanedInput(input)); } catch (Exception e) { return Fiat.valueOf(currencyCode, 0); } @@ -211,9 +213,7 @@ public class BSFormatter { */ public static Fiat parseToFiatWith2Decimals(String input) { try { - input = input.replace(",", "."); - Double.parseDouble(input); // test if valid double - return parseToFiat(new BigDecimal(input).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + return parseToFiat(new BigDecimal(cleanedInput(input)).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); } catch (Throwable t) { log.warn("Exception at parseCoinTo4Decimals: " + t.toString()); return Fiat.valueOf(currencyCode, 0); @@ -358,4 +358,12 @@ public class BSFormatter { public static String formatCoinWithCode(Coin coin) { return coin != null ? coin.toFriendlyString() : ""; }*/ + + private static String cleanedInput(String input) { + input = input.replace(",", "."); + // don't use String.valueOf(Double.parseDouble(input)) as return value as it gives scientific + // notation (1.0E-6) which screw up coinFormat.parse + Double.parseDouble(input); + return input; + } } diff --git a/src/test/java/io/bitsquare/BitSquareTestSuite.java b/src/test/java/io/bitsquare/BitSquareTestSuite.java index d14acbdd7a..dce66f45f9 100644 --- a/src/test/java/io/bitsquare/BitSquareTestSuite.java +++ b/src/test/java/io/bitsquare/BitSquareTestSuite.java @@ -22,6 +22,7 @@ import io.bitsquare.gui.trade.createoffer.CreateOfferPMTest; import io.bitsquare.gui.util.BSFormatterTest; import io.bitsquare.gui.util.BitSquareConverterTest; import io.bitsquare.gui.util.BitSquareNumberValidatorTest; +import io.bitsquare.gui.util.BtcValidatorTest; import io.bitsquare.gui.util.FiatValidatorTest; import io.bitsquare.msg.P2PNodeTest; @@ -37,7 +38,8 @@ import org.junit.runners.Suite; FiatValidatorTest.class, RestrictionsTest.class, CreateOfferPMTest.class, - BSFormatterTest.class + BSFormatterTest.class, + BtcValidatorTest.class }) public class BitSquareTestSuite { diff --git a/src/test/java/io/bitsquare/gui/trade/createoffer/CreateOfferPMTest.java b/src/test/java/io/bitsquare/gui/trade/createoffer/CreateOfferPMTest.java index 583d337cdc..a74aa79136 100644 --- a/src/test/java/io/bitsquare/gui/trade/createoffer/CreateOfferPMTest.java +++ b/src/test/java/io/bitsquare/gui/trade/createoffer/CreateOfferPMTest.java @@ -58,38 +58,38 @@ public class CreateOfferPMTest { presenter.price.set("500"); presenter.amount.set("1"); assertEquals("500.00", presenter.volume.get()); - assertEquals(Coin.COIN, model.amountAsCoin); - assertEquals(Fiat.valueOf("USD", 500 * 10000), model.priceAsFiat); - assertEquals(Fiat.valueOf("USD", 500 * 10000), model.volumeAsFiat); + assertEquals(Coin.COIN, model.amountAsCoin.get()); + assertEquals(Fiat.valueOf("USD", 500 * 10000), model.priceAsFiat.get()); + assertEquals(Fiat.valueOf("USD", 500 * 10000), model.volumeAsFiat.get()); assertEquals(Coin.parseCoin("0.1011"), model.totalToPayAsCoin.get()); presenter.price.set("500"); presenter.volume.set("500"); assertEquals("1.00", presenter.amount.get()); - assertEquals(Coin.COIN, model.amountAsCoin); - assertEquals(Fiat.valueOf("USD", 500 * 10000), model.priceAsFiat); - assertEquals(Fiat.valueOf("USD", 500 * 10000), model.volumeAsFiat); + assertEquals(Coin.COIN, model.amountAsCoin.get()); + assertEquals(Fiat.valueOf("USD", 500 * 10000), model.priceAsFiat.get()); + assertEquals(Fiat.valueOf("USD", 500 * 10000), model.volumeAsFiat.get()); presenter.price.set("300"); presenter.volume.set("1000"); assertEquals("3.3333", presenter.amount.get()); - assertEquals(Coin.parseCoin("3.3333"), model.amountAsCoin); - assertEquals(Fiat.valueOf("USD", 300 * 10000), model.priceAsFiat); - assertEquals(Fiat.valueOf("USD", 9999900), model.volumeAsFiat); + assertEquals(Coin.parseCoin("3.3333"), model.amountAsCoin.get()); + assertEquals(Fiat.valueOf("USD", 300 * 10000), model.priceAsFiat.get()); + assertEquals(Fiat.valueOf("USD", 9999900), model.volumeAsFiat.get()); presenter.price.set("300"); presenter.amount.set("3.3333"); assertEquals("999.99", presenter.volume.get()); - assertEquals(Coin.parseCoin("3.3333"), model.amountAsCoin); - assertEquals(Fiat.valueOf("USD", 300 * 10000), model.priceAsFiat); - assertEquals(Fiat.valueOf("USD", 9999900), model.volumeAsFiat); + assertEquals(Coin.parseCoin("3.3333"), model.amountAsCoin.get()); + assertEquals(Fiat.valueOf("USD", 300 * 10000), model.priceAsFiat.get()); + assertEquals(Fiat.valueOf("USD", 9999900), model.volumeAsFiat.get()); presenter.price.set("300"); presenter.amount.set("3.33333333"); assertEquals("999.99", presenter.volume.get()); - assertEquals(Coin.parseCoin("3.3333"), model.amountAsCoin); - assertEquals(Fiat.valueOf("USD", 300 * 10000), model.priceAsFiat); - assertEquals(Fiat.valueOf("USD", 9999900), model.volumeAsFiat); + assertEquals(Coin.parseCoin("3.3333"), model.amountAsCoin.get()); + assertEquals(Fiat.valueOf("USD", 300 * 10000), model.priceAsFiat.get()); + assertEquals(Fiat.valueOf("USD", 9999900), model.volumeAsFiat.get()); model.collateralAsLong.set(100); diff --git a/src/test/java/io/bitsquare/gui/util/BSFormatterTest.java b/src/test/java/io/bitsquare/gui/util/BSFormatterTest.java index 8ede4eb7ca..ea2ea53db5 100644 --- a/src/test/java/io/bitsquare/gui/util/BSFormatterTest.java +++ b/src/test/java/io/bitsquare/gui/util/BSFormatterTest.java @@ -35,29 +35,20 @@ public class BSFormatterTest { @Test public void testParseToBtc() { useMilliBitFormat(false); - setLocale(Locale.GERMAN); assertEquals(Coin.ZERO, parseToCoin("0")); assertEquals(Coin.COIN, parseToCoin("1")); assertEquals(Coin.SATOSHI, parseToCoin("0,00000001")); assertEquals(Coin.parseCoin("-1"), parseToCoin("-1")); assertEquals(Coin.parseCoin("1.1"), parseToCoin("1,1")); - assertEquals(Coin.parseCoin("11"), parseToCoin("1.1")); - assertEquals(Coin.parseCoin("1123.45"), parseToCoin("1.123,45")); - assertEquals(Coin.parseCoin("1.123"), parseToCoin("1,123.45")); + assertEquals(Coin.parseCoin("1.1"), parseToCoin("1.1")); + assertEquals(Coin.parseCoin("0"), parseToCoin("1.123,45")); + assertEquals(Coin.parseCoin("0"), parseToCoin("1,123.45")); assertEquals(Coin.parseCoin("1.1234"), parseToCoinWith4Decimals("1,12342")); assertEquals(Coin.parseCoin("1.1235"), parseToCoinWith4Decimals("1,12345")); assertEquals(Coin.parseCoin("1.1230"), parseToCoinWith4Decimals("1,123")); - - // change locale - setLocale(Locale.US); - assertEquals(Coin.parseCoin("1.1"), parseToCoin("1.1")); - assertEquals(Coin.parseCoin("11"), parseToCoin("1,1")); - assertEquals(Coin.parseCoin("1.123"), parseToCoin("1.123,45")); - assertEquals(Coin.parseCoin("1123.45"), parseToCoin("1,123.45")); - // change to mBTC useMilliBitFormat(true); assertEquals(Coin.parseCoin("1"), parseToCoin("1000")); @@ -65,7 +56,7 @@ public class BSFormatterTest { assertEquals(Coin.parseCoin("0.1234"), parseToCoin("123.4")); assertEquals(Coin.parseCoin("0.12345"), parseToCoin("123.45")); assertEquals(Coin.parseCoin("0.123456"), parseToCoin("123.456")); - assertEquals(Coin.parseCoin("123.4567"), parseToCoin("123,456.7")); + assertEquals(Coin.parseCoin("0"), parseToCoin("123,456.7")); assertEquals(Coin.parseCoin("0.001123"), parseToCoinWith4Decimals("1.123")); assertEquals(Coin.parseCoin("0.0011234"), parseToCoinWith4Decimals("1.1234")); @@ -76,25 +67,23 @@ public class BSFormatterTest { @Test public void testFormatCoin() { useMilliBitFormat(false); - setLocale(Locale.GERMAN); - assertEquals("1,00", formatCoin(Coin.COIN)); - assertEquals("1,0120", formatCoin(Coin.parseCoin("1.012"))); - assertEquals("1.012,30", formatCoin(Coin.parseCoin("1012.3"))); - assertEquals("1,0120", formatCoin(Coin.parseCoin("1.01200"))); - assertEquals("1,0123", formatCoin(Coin.parseCoin("1.01234"))); - - assertEquals("1,2345", formatCoin(Coin.parseCoin("1.2345"))); - assertEquals("1,2346", formatCoin(Coin.parseCoin("1.23456"))); - assertEquals("1,2346", formatCoin(Coin.parseCoin("1.234567"))); - assertEquals("1,2345", formatCoin(Coin.parseCoin("1.23448"))); - - setLocale(Locale.US); assertEquals("1.00", formatCoin(Coin.COIN)); - assertEquals("1,012.30", formatCoin(Coin.parseCoin("1012.3"))); + assertEquals("1.0120", formatCoin(Coin.parseCoin("1.012"))); + assertEquals("1012.30", formatCoin(Coin.parseCoin("1012.3"))); + assertEquals("1.0120", formatCoin(Coin.parseCoin("1.01200"))); + assertEquals("1.0123", formatCoin(Coin.parseCoin("1.01234"))); + + assertEquals("1.2345", formatCoin(Coin.parseCoin("1.2345"))); + assertEquals("1.2346", formatCoin(Coin.parseCoin("1.23456"))); + assertEquals("1.2346", formatCoin(Coin.parseCoin("1.234567"))); + assertEquals("1.2345", formatCoin(Coin.parseCoin("1.23448"))); + + assertEquals("1.00", formatCoin(Coin.COIN)); + assertEquals("1012.30", formatCoin(Coin.parseCoin("1012.3"))); // change to mBTC useMilliBitFormat(true); - assertEquals("1,000.00", formatCoin(Coin.COIN)); + assertEquals("1000.00", formatCoin(Coin.COIN)); assertEquals("1.00", formatCoin(Coin.MILLICOIN)); assertEquals("0.0010", formatCoin(Coin.MICROCOIN)); } @@ -102,26 +91,24 @@ public class BSFormatterTest { @Test public void testFormatCoinWithCode() { useMilliBitFormat(false); - setLocale(Locale.GERMAN); - assertEquals("1,00 BTC", formatCoinWithCode(Coin.COIN)); - assertEquals("1,01 BTC", formatCoinWithCode(Coin.parseCoin("1.01"))); - assertEquals("1,0120 BTC", formatCoinWithCode(Coin.parseCoin("1.012"))); - assertEquals("1.012,30 BTC", formatCoinWithCode(Coin.parseCoin("1012.3"))); - assertEquals("1,0120 BTC", formatCoinWithCode(Coin.parseCoin("1.01200"))); - assertEquals("1,0123 BTC", formatCoinWithCode(Coin.parseCoin("1.01234"))); - - assertEquals("1,2345 BTC", formatCoinWithCode(Coin.parseCoin("1.2345"))); - assertEquals("1,2346 BTC", formatCoinWithCode(Coin.parseCoin("1.23456"))); - assertEquals("1,2346 BTC", formatCoinWithCode(Coin.parseCoin("1.234567"))); - assertEquals("1,2345 BTC", formatCoinWithCode(Coin.parseCoin("1.23448"))); - - setLocale(Locale.US); assertEquals("1.00 BTC", formatCoinWithCode(Coin.COIN)); - assertEquals("1,012.30 BTC", formatCoinWithCode(Coin.parseCoin("1012.3"))); + assertEquals("1.01 BTC", formatCoinWithCode(Coin.parseCoin("1.01"))); + assertEquals("1.0120 BTC", formatCoinWithCode(Coin.parseCoin("1.012"))); + assertEquals("1012.30 BTC", formatCoinWithCode(Coin.parseCoin("1012.3"))); + assertEquals("1.0120 BTC", formatCoinWithCode(Coin.parseCoin("1.01200"))); + assertEquals("1.0123 BTC", formatCoinWithCode(Coin.parseCoin("1.01234"))); + + assertEquals("1.2345 BTC", formatCoinWithCode(Coin.parseCoin("1.2345"))); + assertEquals("1.2346 BTC", formatCoinWithCode(Coin.parseCoin("1.23456"))); + assertEquals("1.2346 BTC", formatCoinWithCode(Coin.parseCoin("1.234567"))); + assertEquals("1.2345 BTC", formatCoinWithCode(Coin.parseCoin("1.23448"))); + + assertEquals("1.00 BTC", formatCoinWithCode(Coin.COIN)); + assertEquals("1012.30 BTC", formatCoinWithCode(Coin.parseCoin("1012.3"))); // change to mBTC useMilliBitFormat(true); - assertEquals("1,000.00 mBTC", formatCoinWithCode(Coin.COIN)); + assertEquals("1000.00 mBTC", formatCoinWithCode(Coin.COIN)); assertEquals("1.00 mBTC", formatCoinWithCode(Coin.MILLICOIN)); assertEquals("0.0010 mBTC", formatCoinWithCode(Coin.MICROCOIN)); } @@ -130,14 +117,13 @@ public class BSFormatterTest { @Test public void testParseToBtcWith4Decimals() { useMilliBitFormat(false); - setLocale(Locale.GERMAN); assertEquals(Coin.parseCoin("0"), parseToCoinWith4Decimals("0")); assertEquals(Coin.parseCoin("0"), parseToCoinWith4Decimals(null)); assertEquals(Coin.parseCoin("0"), parseToCoinWith4Decimals("s")); assertEquals(Coin.parseCoin("0.0012"), parseToCoinWith4Decimals("0,00123")); assertEquals(Coin.parseCoin("0.0013"), parseToCoinWith4Decimals("0,00125")); } - /* + @Test public void testHasBtcValidDecimals() { useMilliBitFormat(false); @@ -153,16 +139,16 @@ public class BSFormatterTest { assertFalse(hasBtcValidDecimals("0.0001222312312312313")); } - @Test + @Test public void testParseToFiatWith2Decimals() { useMilliBitFormat(false); setLocale(Locale.GERMAN); - assertEquals("0", parseToFiatWith2Decimals("0")); - assertEquals("0", parseToFiatWith2Decimals(null)); - assertEquals("0", parseToFiatWith2Decimals("s")); - assertEquals("0.12", parseToFiatWith2Decimals("0.123")); - assertEquals("0.13", parseToFiatWith2Decimals("0.125")); - assertEquals("0.13", parseToFiatWith2Decimals("0,125")); + assertEquals("0", parseToFiatWith2Decimals("0").toPlainString()); + assertEquals("0", parseToFiatWith2Decimals(null).toPlainString()); + assertEquals("0", parseToFiatWith2Decimals("s").toPlainString()); + assertEquals("0.12", parseToFiatWith2Decimals("0.123").toPlainString()); + assertEquals("0.13", parseToFiatWith2Decimals("0.125").toPlainString()); + assertEquals("0.13", parseToFiatWith2Decimals("0,125").toPlainString()); } @Test @@ -178,6 +164,6 @@ public class BSFormatterTest { assertFalse(hasFiatValidDecimals("20000000.0123")); assertFalse(hasFiatValidDecimals("0.012")); assertFalse(hasFiatValidDecimals("0.01222312312312313")); - }*/ + } }