From 683c50b3fa6ca71802e9d6489cdaf65c0938005e Mon Sep 17 00:00:00 2001 From: Giannis Dzegoutanis Date: Fri, 24 Oct 2014 11:08:57 +0200 Subject: [PATCH] made Coin.parseCoin method to throw an IllegalArgumentException instead of an ArithmeticException in cases of fractional satoshis --- core/src/main/java/org/bitcoinj/core/Coin.java | 7 ++++++- core/src/test/java/org/bitcoinj/core/CoinTest.java | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/bitcoinj/core/Coin.java b/core/src/main/java/org/bitcoinj/core/Coin.java index 4d8728a9..8a81c535 100644 --- a/core/src/main/java/org/bitcoinj/core/Coin.java +++ b/core/src/main/java/org/bitcoinj/core/Coin.java @@ -128,7 +128,12 @@ public final class Coin implements Monetary, Comparable, Serializable { * @throws IllegalArgumentException if you try to specify fractional satoshis, or a value out of range. */ public static Coin parseCoin(final String str) { - return Coin.valueOf(new BigDecimal(str).movePointRight(SMALLEST_UNIT_EXPONENT).toBigIntegerExact().longValue()); + try { + long satoshis = new BigDecimal(str).movePointRight(SMALLEST_UNIT_EXPONENT).toBigIntegerExact().longValue(); + return Coin.valueOf(satoshis); + } catch (ArithmeticException e) { + throw new IllegalArgumentException(e); // Repackage exception to honor method contract + } } public Coin add(final Coin value) { diff --git a/core/src/test/java/org/bitcoinj/core/CoinTest.java b/core/src/test/java/org/bitcoinj/core/CoinTest.java index 362a8df0..2ac1b150 100644 --- a/core/src/test/java/org/bitcoinj/core/CoinTest.java +++ b/core/src/test/java/org/bitcoinj/core/CoinTest.java @@ -39,7 +39,9 @@ public class CoinTest { try { parseCoin("2E-20"); org.junit.Assert.fail("should not have accepted fractional satoshis"); - } catch (ArithmeticException e) { + } catch (IllegalArgumentException expected) { + } catch (Exception e) { + org.junit.Assert.fail("should throw IllegalArgumentException"); } }