diff --git a/core/src/main/java/org/bitcoinj/utils/ExchangeRate.java b/core/src/main/java/org/bitcoinj/utils/ExchangeRate.java index d3b8468d..71980f06 100644 --- a/core/src/main/java/org/bitcoinj/utils/ExchangeRate.java +++ b/core/src/main/java/org/bitcoinj/utils/ExchangeRate.java @@ -33,14 +33,16 @@ public class ExchangeRate implements Serializable { /** Construct exchange rate. This amount of coin is worth that amount of fiat. */ public ExchangeRate(Coin coin, Fiat fiat) { + checkArgument(coin.isPositive()); + checkArgument(fiat.isPositive()); + checkArgument(fiat.currencyCode != null, "currency code required"); this.coin = coin; this.fiat = fiat; } /** Construct exchange rate. One coin is worth this amount of fiat. */ public ExchangeRate(Fiat fiat) { - this.coin = Coin.COIN; - this.fiat = fiat; + this(Coin.COIN, fiat); } /** diff --git a/core/src/test/java/org/bitcoinj/utils/ExchangeRateTest.java b/core/src/test/java/org/bitcoinj/utils/ExchangeRateTest.java index 8c8f2b0f..2444cf0c 100644 --- a/core/src/test/java/org/bitcoinj/utils/ExchangeRateTest.java +++ b/core/src/test/java/org/bitcoinj/utils/ExchangeRateTest.java @@ -74,4 +74,19 @@ public class ExchangeRateTest { ExchangeRate rate = new ExchangeRate(Fiat.parseFiat("XXX", "1000000000")); rate.coinToFiat(Coin.parseCoin("-1000000")); } + + @Test(expected = IllegalArgumentException.class) + public void constructMissingCurrencyCode() { + new ExchangeRate(Fiat.valueOf(null, 1)); + } + + @Test(expected = IllegalArgumentException.class) + public void constructNegativeCoin() { + new ExchangeRate(Coin.valueOf(-1), Fiat.valueOf("EUR", 1)); + } + + @Test(expected = IllegalArgumentException.class) + public void constructFiatCoin() { + new ExchangeRate(Fiat.valueOf("EUR", -1)); + } }