### Question:
BtcValidator extends NumberValidator { @Override public ValidationResult validate(String input) { ValidationResult result = validateIfNotEmpty(input); if (result.isValid) { input = cleanInput(input); result = validateIfNumber(input); } if (result.isValid) { result = result.andValidation(input, this::validateIfNotZero, this::validateIfNotNegative, this::validateIfNotFractionalBtcValue, this::validateIfNotExceedsMaxTradeLimit, this::validateIfNotExceedsMaxBtcValue, this::validateIfNotUnderMinValue, this::validateIfAboveDust); } return result; } @Inject  BtcValidator(@Named(FormattingUtils.BTC_FORMATTER_KEY) CoinFormatter formatter); @Override ValidationResult validate(String input);  }### Answer:
@Test public void testIsValid() { BtcValidator validator = new BtcValidator(coinFormatter); assertTrue(validator.validate("1").isValid); assertTrue(validator.validate("0,1").isValid); assertTrue(validator.validate("0.1").isValid); assertTrue(validator.validate(",1").isValid); assertTrue(validator.validate(".1").isValid); assertTrue(validator.validate("0.12345678").isValid); assertFalse(validator.validate(Coin.SATOSHI.toPlainString()).isValid); assertFalse(validator.validate(null).isValid); assertFalse(validator.validate("").isValid); assertFalse(validator.validate("0").isValid); assertFalse(validator.validate("0.0").isValid); assertFalse(validator.validate("0,1,1").isValid); assertFalse(validator.validate("0.1.1").isValid); assertFalse(validator.validate("0,000.1").isValid); assertFalse(validator.validate("0.000,1").isValid); assertFalse(validator.validate("0.123456789").isValid); assertFalse(validator.validate("-1").isValid); }