/*
* This file is part of Bitsquare.
*
* Bitsquare is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* Bitsquare is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
* License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/
package io.bitsquare.gui.util;
import org.bitcoinj.core.Coin;
import org.junit.Test;
import java.util.Locale;
import static org.junit.Assert.*;
public class BSFormatterTest {
@Test
public void testParseToBtc() {
BSFormatter formatter = new BSFormatter();
formatter.useMilliBitFormat(false);
assertEquals(Coin.ZERO, formatter.parseToCoin("0"));
assertEquals(Coin.COIN, formatter.parseToCoin("1"));
assertEquals(Coin.SATOSHI, formatter.parseToCoin("0,00000001"));
assertEquals(Coin.parseCoin("-1"), formatter.parseToCoin("-1"));
assertEquals(Coin.parseCoin("1.1"), formatter.parseToCoin("1,1"));
assertEquals(Coin.parseCoin("1.1"), formatter.parseToCoin("1.1"));
assertEquals(Coin.parseCoin("0"), formatter.parseToCoin("1.123,45"));
assertEquals(Coin.parseCoin("0"), formatter.parseToCoin("1,123.45"));
assertEquals(Coin.parseCoin("1.1234"), formatter.parseToCoinWith4Decimals("1,12342"));
assertEquals(Coin.parseCoin("1.1235"), formatter.parseToCoinWith4Decimals("1,12345"));
assertEquals(Coin.parseCoin("1.1230"), formatter.parseToCoinWith4Decimals("1,123"));
// change to mBTC
formatter.useMilliBitFormat(true);
assertEquals(Coin.parseCoin("1"), formatter.parseToCoin("1000"));
assertEquals(Coin.parseCoin("0.123"), formatter.parseToCoin("123"));
assertEquals(Coin.parseCoin("0.1234"), formatter.parseToCoin("123.4"));
assertEquals(Coin.parseCoin("0.12345"), formatter.parseToCoin("123.45"));
assertEquals(Coin.parseCoin("0.123456"), formatter.parseToCoin("123.456"));
assertEquals(Coin.parseCoin("0"), formatter.parseToCoin("123,456.7"));
assertEquals(Coin.parseCoin("0.001123"), formatter.parseToCoinWith4Decimals("1.123"));
assertEquals(Coin.parseCoin("0.0011234"), formatter.parseToCoinWith4Decimals("1.1234"));
assertEquals(Coin.parseCoin("0.0011234"), formatter.parseToCoinWith4Decimals("1.12342"));
assertEquals(Coin.parseCoin("0.0011235"), formatter.parseToCoinWith4Decimals("1.12345"));
}
//TODO update tests
//@Test
public void testFormatCoin() {
BSFormatter formatter = new BSFormatter();
formatter.useMilliBitFormat(false);
assertEquals("1.00", formatter.formatCoin(Coin.COIN));
assertEquals("1.0120", formatter.formatCoin(Coin.parseCoin("1.012")));
assertEquals("1012.30", formatter.formatCoin(Coin.parseCoin("1012.3")));
assertEquals("1.0120", formatter.formatCoin(Coin.parseCoin("1.01200")));
assertEquals("1.000123", formatter.formatCoin(Coin.parseCoin("1.0001234")));
assertEquals("0.10", formatter.formatCoin(Coin.parseCoin("0.1")));
assertEquals("0.01", formatter.formatCoin(Coin.parseCoin("0.01")));
assertEquals("0.0010", formatter.formatCoin(Coin.parseCoin("0.001")));
assertEquals("0.0001", formatter.formatCoin(Coin.parseCoin("0.0001")));
assertEquals("0.000010", formatter.formatCoin(Coin.parseCoin("0.00001")));
assertEquals("0.000001", formatter.formatCoin(Coin.parseCoin("0.000001")));
assertEquals("0.00", formatter.formatCoin(Coin.parseCoin("0.0000001")));
assertEquals("1.2345", formatter.formatCoin(Coin.parseCoin("1.2345")));
assertEquals("1.002346", formatter.formatCoin(Coin.parseCoin("1.0023456")));
assertEquals("1.002346", formatter.formatCoin(Coin.parseCoin("1.00234567")));
assertEquals("1.002345", formatter.formatCoin(Coin.parseCoin("1.0023448")));
assertEquals("1.00", formatter.formatCoin(Coin.COIN));
assertEquals("1012.30", formatter.formatCoin(Coin.parseCoin("1012.3")));
// change to mBTC
formatter.useMilliBitFormat(true);
assertEquals("1000.00", formatter.formatCoin(Coin.COIN));
assertEquals("1.00", formatter.formatCoin(Coin.MILLICOIN));
assertEquals("0.0010", formatter.formatCoin(Coin.MICROCOIN));
}
//TODO update tests
//@Test
public void testFormatCoinWithCode() {
BSFormatter formatter = new BSFormatter();
formatter.useMilliBitFormat(false);
assertEquals("1.00 BTC", formatter.formatCoinWithCode(Coin.COIN));
assertEquals("1.01 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.01")));
assertEquals("1.0120 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.012")));
assertEquals("1012.30 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1012.3")));
assertEquals("1.0120 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.01200")));
assertEquals("1.012340 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.01234")));
assertEquals("1.012345 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.012345")));
assertEquals("1.012345 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.0123454")));
assertEquals("1.012346 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.0123455")));
assertEquals("0.10 BTC", formatter.formatCoinWithCode(Coin.parseCoin("0.1")));
assertEquals("0.01 BTC", formatter.formatCoinWithCode(Coin.parseCoin("0.01")));
assertEquals("0.0010 BTC", formatter.formatCoinWithCode(Coin.parseCoin("0.001")));
assertEquals("0.0001 BTC", formatter.formatCoinWithCode(Coin.parseCoin("0.0001")));
assertEquals("1.2345 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.2345")));
assertEquals("1.002346 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.0023456")));
assertEquals("1.002346 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.00234567")));
assertEquals("1.002345 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1.0023448")));
assertEquals("1.00 BTC", formatter.formatCoinWithCode(Coin.COIN));
assertEquals("1012.30 BTC", formatter.formatCoinWithCode(Coin.parseCoin("1012.3")));
// change to mBTC
formatter.useMilliBitFormat(true);
assertEquals("1000.00 mBTC", formatter.formatCoinWithCode(Coin.COIN));
assertEquals("1.00 mBTC", formatter.formatCoinWithCode(Coin.MILLICOIN));
assertEquals("0.0010 mBTC", formatter.formatCoinWithCode(Coin.MICROCOIN));
}
@Test
public void testParseToBtcWith4Decimals() {
BSFormatter formatter = new BSFormatter();
formatter.useMilliBitFormat(false);
assertEquals(Coin.parseCoin("0"), formatter.parseToCoinWith4Decimals("0"));
assertEquals(Coin.parseCoin("0"), formatter.parseToCoinWith4Decimals(null));
assertEquals(Coin.parseCoin("0"), formatter.parseToCoinWith4Decimals("s"));
assertEquals(Coin.parseCoin("0.0012"), formatter.parseToCoinWith4Decimals("0,00123"));
assertEquals(Coin.parseCoin("0.0013"), formatter.parseToCoinWith4Decimals("0,00125"));
}
@Test
public void testHasBtcValidDecimals() {
BSFormatter formatter = new BSFormatter();
formatter.useMilliBitFormat(false);
formatter.setLocale(Locale.GERMAN);
assertTrue(formatter.hasBtcValidDecimals(null));
assertTrue(formatter.hasBtcValidDecimals("0"));
assertTrue(formatter.hasBtcValidDecimals("0,0001"));
assertTrue(formatter.hasBtcValidDecimals("0.0001"));
assertTrue(formatter.hasBtcValidDecimals("0.0009"));
assertTrue(formatter.hasBtcValidDecimals("20000000.0001"));
assertFalse(formatter.hasBtcValidDecimals("20000000.000123"));
assertFalse(formatter.hasBtcValidDecimals("0.00012"));
assertFalse(formatter.hasBtcValidDecimals("0.0001222312312312313"));
}
@Test
public void testParseToFiatWith2Decimals() {
BSFormatter formatter = new BSFormatter();
formatter.useMilliBitFormat(false);
formatter.setLocale(Locale.GERMAN);
assertEquals("0", formatter.parseToFiatWithPrecision("0", "EUR").toPlainString());
assertEquals("0", formatter.parseToFiatWithPrecision(null, "EUR").toPlainString());
assertEquals("0", formatter.parseToFiatWithPrecision("s", "EUR").toPlainString());
assertEquals("0.12", formatter.parseToFiatWithPrecision("0.123", "EUR").toPlainString());
assertEquals("0.13", formatter.parseToFiatWithPrecision("0.125", "EUR").toPlainString());
assertEquals("0.13", formatter.parseToFiatWithPrecision("0,125", "EUR").toPlainString());
}
@Test
public void testHasFiatValidDecimals() {
BSFormatter formatter = new BSFormatter();
formatter.useMilliBitFormat(false);
formatter.setLocale(Locale.GERMAN);
assertTrue(formatter.isFiatAlteredWhenPrecisionApplied(null, "EUR"));
assertTrue(formatter.isFiatAlteredWhenPrecisionApplied("0", "EUR"));
assertTrue(formatter.isFiatAlteredWhenPrecisionApplied("0,01", "EUR"));
assertTrue(formatter.isFiatAlteredWhenPrecisionApplied("0.01", "EUR"));
assertTrue(formatter.isFiatAlteredWhenPrecisionApplied("0.09", "EUR"));
assertTrue(formatter.isFiatAlteredWhenPrecisionApplied("20000000.01", "EUR"));
assertFalse(formatter.isFiatAlteredWhenPrecisionApplied("20000000.0123", "EUR"));
assertFalse(formatter.isFiatAlteredWhenPrecisionApplied("0.012", "EUR"));
assertFalse(formatter.isFiatAlteredWhenPrecisionApplied("0.01222312312312313", "EUR"));
}
}