/app/src/test/java/zapsolutions/zap/util/InvoiceUtilTest.java

https://github.com/LN-Zap/zap-android · Java · 56 lines · 43 code · 12 blank · 1 comment · 0 complexity · c26101e7380cd6012452664ecb1ce42f MD5 · raw file

  1. package zapsolutions.zap.util;
  2. import org.junit.Test;
  3. import static org.junit.Assert.assertFalse;
  4. import static org.junit.Assert.assertTrue;
  5. public class InvoiceUtilTest {
  6. @Test
  7. public void givenLightningInvoiceMainnet_whenIsLightningInvoice_ThenIsLightningInvoiceReturnTrue() {
  8. String lightningUri = "lnbc1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdpl2pkx2ctnv5sxxmmwwd5kgetjypeh2ursdae8g6twvus8g6rfwvs8qun0dfjkxaq8rkx3yf5tcsyz3d73gafnh3cax9rn449d9p5uxz9ezhhypd0elx87sjle52x86fux2ypatgddc6k63n7erqz25le42c4u4ecky03ylcqca784w";
  9. assertTrue(InvoiceUtil.isLightningInvoice(lightningUri));
  10. }
  11. @Test
  12. public void givenLightningInvoiceTestnet_whenIsLightningInvoice_ThenIsLightningInvoiceReturnTrue() {
  13. String lightningUri = "lntb1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdpl2pkx2ctnv5sxxmmwwd5kgetjypeh2ursdae8g6twvus8g6rfwvs8qun0dfjkxaq8rkx3yf5tcsyz3d73gafnh3cax9rn449d9p5uxz9ezhhypd0elx87sjle52x86fux2ypatgddc6k63n7erqz25le42c4u4ecky03ylcqca784w";
  14. assertTrue(InvoiceUtil.isLightningInvoice(lightningUri));
  15. }
  16. @Test
  17. public void givenArbitraryString_whenIsLightningInvoice_ThenIsLightningInvoiceReturnFalse() {
  18. String arbitraryString = "bitcoinFixesThis";
  19. assertFalse(InvoiceUtil.isLightningInvoice(arbitraryString));
  20. }
  21. @Test
  22. public void givenBitcoinAddress_whenIsBitcoinAddress_ThenIsBitcoinAddressReturnTrue() {
  23. // example addresses taken from: https://en.bitcoin.it/wiki/List_of_address_prefixes
  24. assertTrue(InvoiceUtil.isBitcoinAddress("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4")); //bech32, mainnet, lower case
  25. assertTrue(InvoiceUtil.isBitcoinAddress("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4".toUpperCase())); //bech32, mainnet, upper case
  26. assertTrue(InvoiceUtil.isBitcoinAddress("bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0")); //bech32m, mainnet (example from BIP 350)
  27. assertTrue(InvoiceUtil.isBitcoinAddress("tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx")); //bech32, testnet, lower case
  28. assertTrue(InvoiceUtil.isBitcoinAddress("bcrt1q6rhpng9evdsfnn833a4f4vej0asu6dk5srld6x")); //bech32, regtest, lower case
  29. assertTrue(InvoiceUtil.isBitcoinAddress("17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem")); //base58, mainnet, P2PKH
  30. assertTrue(InvoiceUtil.isBitcoinAddress("mipcBbFg9gMiCh81Kj8tqqdgoZub1ZJRfn")); //base58, testnet, P2PKH
  31. assertTrue(InvoiceUtil.isBitcoinAddress("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")); //base58, mainnet, P2SH
  32. assertTrue(InvoiceUtil.isBitcoinAddress("2MzQwSSnBHWHqSAqtTVQ6v47XtaisrJa1Vc")); //base58, testnet, P2SH
  33. }
  34. @Test
  35. public void givenInvalidBitcoinAddress_whenIsBitcoinAddress_ThenIsBitcoinAddressReturnFalse() {
  36. assertFalse(InvoiceUtil.isBitcoinAddress("bc1Qw508d6qEjxtdg4y5r3zarvArY0c5xw7kv8f3T4")); //bech32, mixed case
  37. assertFalse(InvoiceUtil.isBitcoinAddress("bc1qi508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4")); //bech32, invalid character (i)
  38. assertFalse(InvoiceUtil.isBitcoinAddress("b1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4")); //bech32, invalid prefix/hrp
  39. assertFalse(InvoiceUtil.isBitcoinAddress("1IVZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem")); //base58, invalid character (I)
  40. assertFalse(InvoiceUtil.isBitcoinAddress("47VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem")); //base58, invalid prefix
  41. assertFalse(InvoiceUtil.isBitcoinAddress("bc1test")); //valid address prefix, but random ending
  42. assertFalse(InvoiceUtil.isBitcoinAddress("bitcoinFixesThis")); //arbitraryString
  43. }
  44. }