diff --git a/src/test/java/org/stellar/sdk/AddressTest.java b/src/test/java/org/stellar/sdk/AddressTest.java deleted file mode 100644 index 3baea9346..000000000 --- a/src/test/java/org/stellar/sdk/AddressTest.java +++ /dev/null @@ -1,306 +0,0 @@ -package org.stellar.sdk; - -import static junit.framework.TestCase.assertEquals; -import static org.junit.Assert.fail; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.Base64; -import org.junit.Assert; -import org.junit.Test; -import org.stellar.sdk.xdr.SCAddress; -import org.stellar.sdk.xdr.SCVal; -import org.stellar.sdk.xdr.XdrDataInputStream; - -public class AddressTest { - @Test - public void testConstructorAccountId() { - String accountId = "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"; - Address address = new Address(accountId); - assertEquals(address.toString(), accountId); - assertEquals(address.getAddressType(), Address.AddressType.ACCOUNT); - } - - @Test - public void testConstructorContractId() { - String contractId = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA"; - Address address = new Address(contractId); - assertEquals(address.toString(), contractId); - assertEquals(address.getAddressType(), Address.AddressType.CONTRACT); - } - - @Test - public void testConstructorMuxedAccount() { - String muxedAccountId = "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26"; - Address address = new Address(muxedAccountId); - assertEquals(address.toString(), muxedAccountId); - assertEquals(address.getAddressType(), Address.AddressType.MUXED_ACCOUNT); - } - - @Test - public void testConstructorClaimableBalance() { - String claimableBalanceId = "BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4TU"; - Address address = new Address(claimableBalanceId); - assertEquals(address.toString(), claimableBalanceId); - assertEquals(address.getAddressType(), Address.AddressType.CLAIMABLE_BALANCE); - } - - @Test - public void testConstructorLiquidityPool() { - String liquidityPoolId = "LA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUPJN"; - Address address = new Address(liquidityPoolId); - assertEquals(address.toString(), liquidityPoolId); - assertEquals(address.getAddressType(), Address.AddressType.LIQUIDITY_POOL); - } - - @Test - public void testConstructorInvalidAddressThrows() { - String accountId = "GINVALID"; - try { - new Address(accountId); - fail(); - } catch (IllegalArgumentException e) { - Assert.assertEquals("Unsupported address type", e.getMessage()); - } - } - - @Test - public void testConstructorSecretThrows() { - String secret = "SBUIAXRYKAEJWBSJZYE6P4N4X4ATXP5GAFK5TZ6SKKQ6TS4MLX6G6E4M"; - try { - new Address(secret); - fail(); - } catch (IllegalArgumentException e) { - Assert.assertEquals("Unsupported address type", e.getMessage()); - } - } - - @Test - public void testFromAccountByte() { - String accountId = "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"; - byte[] accountIdBytes = StrKey.decodeEd25519PublicKey(accountId); - Address address = Address.fromAccount(accountIdBytes); - assertEquals(address.toString(), accountId); - assertEquals(address.getAddressType(), Address.AddressType.ACCOUNT); - } - - @Test - public void testFromContractByte() { - String contractId = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA"; - byte[] contractIdBytes = StrKey.decodeContract(contractId); - Address address = Address.fromContract(contractIdBytes); - assertEquals(address.toString(), contractId); - assertEquals(address.getAddressType(), Address.AddressType.CONTRACT); - } - - @Test - public void testFromMuxedAccountByte() { - String muxedAccountId = "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26"; - byte[] muxedAccountIdBytes = StrKey.decodeMed25519PublicKey(muxedAccountId); - Address address = Address.fromMuxedAccount(muxedAccountIdBytes); - assertEquals(address.toString(), muxedAccountId); - assertEquals(address.getAddressType(), Address.AddressType.MUXED_ACCOUNT); - } - - @Test - public void testFromClaimableBalanceByte() { - String claimableBalanceId = "BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4TU"; - byte[] claimableBalanceIdBytes = StrKey.decodeClaimableBalance(claimableBalanceId); - Address address = Address.fromClaimableBalance(claimableBalanceIdBytes); - assertEquals(address.toString(), claimableBalanceId); - assertEquals(address.getAddressType(), Address.AddressType.CLAIMABLE_BALANCE); - } - - @Test - public void testFromLiquidityPoolByte() { - String liquidityPoolId = "LA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUPJN"; - byte[] liquidityPoolIdBytes = StrKey.decodeLiquidityPool(liquidityPoolId); - Address address = Address.fromLiquidityPool(liquidityPoolIdBytes); - assertEquals(address.toString(), liquidityPoolId); - assertEquals(address.getAddressType(), Address.AddressType.LIQUIDITY_POOL); - } - - @Test - public void testToSCAddressAccount() throws IOException { - String accountId = "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"; - Address address = new Address(accountId); - SCAddress scAddress = address.toSCAddress(); - - String xdr = "AAAAAAAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg=="; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress expectScAddress = - SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - assertEquals(scAddress, expectScAddress); - } - - @Test - public void testToSCAddressContract() throws IOException { - String contract = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA"; - Address address = new Address(contract); - SCAddress scAddress = address.toSCAddress(); - - String xdr = "AAAAAT8MNL+TrQ2ZcdBMzJD3BVEcg4qtlzSkovsNegP8f+ia"; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress expectScAddress = - SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - assertEquals(scAddress, expectScAddress); - } - - @Test - public void testToSCAddressMuxedAccount() throws IOException { - String muxedAccountId = "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26"; - Address address = new Address(muxedAccountId); - SCAddress scAddress = address.toSCAddress(); - - String xdr = "AAAAAiAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAABNI="; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress expectScAddress = - SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - assertEquals(scAddress, expectScAddress); - } - - @Test - public void testToSCAddressClaimableBalance() throws IOException { - String claimableBalanceId = "BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4TU"; - Address address = new Address(claimableBalanceId); - SCAddress scAddress = address.toSCAddress(); - - String xdr = "AAAAAwAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg=="; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress expectScAddress = - SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - assertEquals(scAddress, expectScAddress); - } - - @Test - public void testToSCAddressLiquidityPool() throws IOException { - String liquidityPoolId = "LA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUPJN"; - Address address = new Address(liquidityPoolId); - SCAddress scAddress = address.toSCAddress(); - - String xdr = "AAAABD8MNL+TrQ2ZcdBMzJD3BVEcg4qtlzSkovsNegP8f+ia"; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress expectScAddress = - SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - assertEquals(scAddress, expectScAddress); - } - - @Test - public void testFromSCAddressAccount() throws IOException { - String xdr = "AAAAAAAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg=="; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress scAddress = SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - - Address address = Address.fromSCAddress(scAddress); - String accountId = "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"; - assertEquals(address.toString(), accountId); - assertEquals(address.getAddressType(), Address.AddressType.ACCOUNT); - } - - @Test - public void testFromSCAddressContract() throws IOException { - String xdr = "AAAAAT8MNL+TrQ2ZcdBMzJD3BVEcg4qtlzSkovsNegP8f+ia"; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress scAddress = SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - - Address address = Address.fromSCAddress(scAddress); - String contract = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA"; - assertEquals(address.toString(), contract); - assertEquals(address.getAddressType(), Address.AddressType.CONTRACT); - } - - @Test - public void testFromSCAddressMuxedAccount() throws IOException { - String xdr = "AAAAAiAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAABNI="; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress scAddress = SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - - Address address = Address.fromSCAddress(scAddress); - String muxedAccountId = "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26"; - assertEquals(address.toString(), muxedAccountId); - assertEquals(address.getAddressType(), Address.AddressType.MUXED_ACCOUNT); - } - - @Test - public void testFromSCAddressClaimableBalance() throws IOException { - String xdr = "AAAAAwAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg=="; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress scAddress = SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - - Address address = Address.fromSCAddress(scAddress); - String claimableBalanceId = "BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4TU"; - assertEquals(address.toString(), claimableBalanceId); - assertEquals(address.getAddressType(), Address.AddressType.CLAIMABLE_BALANCE); - } - - @Test - public void testFromSCAddressLiquidityPool() throws IOException { - String xdr = "AAAABD8MNL+TrQ2ZcdBMzJD3BVEcg4qtlzSkovsNegP8f+ia"; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCAddress scAddress = SCAddress.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - - Address address = Address.fromSCAddress(scAddress); - String liquidityPoolId = "LA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUPJN"; - assertEquals(address.toString(), liquidityPoolId); - assertEquals(address.getAddressType(), Address.AddressType.LIQUIDITY_POOL); - } - - @Test - public void testToSCVal() throws IOException { - String contract = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA"; - Address address = new Address(contract); - SCVal scVal = address.toSCVal(); - - String xdr = "AAAAEgAAAAE/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg=="; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCVal expectSCVal = SCVal.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - assertEquals(scVal, expectSCVal); - } - - @Test - public void testFromSCVal() throws IOException { - String xdr = "AAAAEgAAAAE/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg=="; - byte[] bytes = Base64.getDecoder().decode(xdr); - SCVal scVal = SCVal.decode(new XdrDataInputStream(new ByteArrayInputStream(bytes))); - - Address address = Address.fromSCVal(scVal); - String contract = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA"; - assertEquals(address.toString(), contract); - assertEquals(address.getAddressType(), Address.AddressType.CONTRACT); - } - - @Test - public void testToStringAccountId() { - String accountId = "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ"; - Address address = new Address(accountId); - assertEquals(address.toString(), accountId); - } - - @Test - public void testToStringContractId() { - String contractId = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA"; - Address address = new Address(contractId); - assertEquals(address.toString(), contractId); - } - - @Test - public void testToStringMuxedAccountId() { - String muxedAccountId = "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26"; - Address address = new Address(muxedAccountId); - assertEquals(address.toString(), muxedAccountId); - } - - @Test - public void testToStringClaimableBalanceId() { - String claimableBalanceId = "BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4TU"; - Address address = new Address(claimableBalanceId); - assertEquals(address.toString(), claimableBalanceId); - } - - @Test - public void testToStringLiquidityPoolId() { - String liquidityPoolId = "LA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUPJN"; - Address address = new Address(liquidityPoolId); - assertEquals(address.toString(), liquidityPoolId); - } -} diff --git a/src/test/kotlin/org/stellar/sdk/AddressTest.kt b/src/test/kotlin/org/stellar/sdk/AddressTest.kt new file mode 100644 index 000000000..54a1491b4 --- /dev/null +++ b/src/test/kotlin/org/stellar/sdk/AddressTest.kt @@ -0,0 +1,237 @@ +package org.stellar.sdk + +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.shouldBe +import java.io.ByteArrayInputStream +import java.util.Base64 +import org.stellar.sdk.xdr.SCAddress +import org.stellar.sdk.xdr.SCVal +import org.stellar.sdk.xdr.XdrDataInputStream + +class AddressTest : + FunSpec({ + val accountId = "GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ" + val contractId = "CA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUWDA" + val muxedAccountId = "MAQAA5L65LSYH7CQ3VTJ7F3HHLGCL3DSLAR2Y47263D56MNNGHSQSAAAAAAAAAAE2LP26" + val claimableBalanceId = "BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4TU" + val liquidityPoolId = "LA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUPJN" + val secretKey = "SB65MHFA2Z342DX4FNKHH2KCNR5JRM7GIVTWQLKG5Z6L3AAH4UZLZV4E" + val invalidAddress = "GINVALID" + + context("Address constructor") { + test("should create address from account ID") { + val address = Address(accountId) + address.toString() shouldBe accountId + address.addressType shouldBe Address.AddressType.ACCOUNT + } + + test("should create address from contract ID") { + val address = Address(contractId) + address.toString() shouldBe contractId + address.addressType shouldBe Address.AddressType.CONTRACT + } + + test("should create address from muxed account ID") { + val address = Address(muxedAccountId) + address.toString() shouldBe muxedAccountId + address.addressType shouldBe Address.AddressType.MUXED_ACCOUNT + } + + test("should create address from claimable balance ID") { + val address = Address(claimableBalanceId) + address.toString() shouldBe claimableBalanceId + address.addressType shouldBe Address.AddressType.CLAIMABLE_BALANCE + } + + test("should create address from liquidity pool ID") { + val address = Address(liquidityPoolId) + address.toString() shouldBe liquidityPoolId + address.addressType shouldBe Address.AddressType.LIQUIDITY_POOL + } + + test("should throw exception for invalid address") { + val exception = shouldThrow { Address(invalidAddress) } + exception.message shouldBe "Unsupported address type" + } + + test("should throw exception for secret key") { + val exception = shouldThrow { Address(secretKey) } + exception.message shouldBe "Unsupported address type" + } + } + + context("Address factory methods with byte arrays") { + test("should create address from account bytes") { + val accountIdBytes = StrKey.decodeEd25519PublicKey(accountId) + val address = Address.fromAccount(accountIdBytes) + address.toString() shouldBe accountId + address.addressType shouldBe Address.AddressType.ACCOUNT + } + + test("should create address from contract bytes") { + val contractIdBytes = StrKey.decodeContract(contractId) + val address = Address.fromContract(contractIdBytes) + address.toString() shouldBe contractId + address.addressType shouldBe Address.AddressType.CONTRACT + } + + test("should create address from muxed account bytes") { + val muxedAccountIdBytes = StrKey.decodeMed25519PublicKey(muxedAccountId) + val address = Address.fromMuxedAccount(muxedAccountIdBytes) + address.toString() shouldBe muxedAccountId + address.addressType shouldBe Address.AddressType.MUXED_ACCOUNT + } + + test("should create address from claimable balance bytes") { + val claimableBalanceIdBytes = StrKey.decodeClaimableBalance(claimableBalanceId) + val address = Address.fromClaimableBalance(claimableBalanceIdBytes) + address.toString() shouldBe claimableBalanceId + address.addressType shouldBe Address.AddressType.CLAIMABLE_BALANCE + } + + test("should create address from liquidity pool bytes") { + val liquidityPoolIdBytes = StrKey.decodeLiquidityPool(liquidityPoolId) + val address = Address.fromLiquidityPool(liquidityPoolIdBytes) + address.toString() shouldBe liquidityPoolId + address.addressType shouldBe Address.AddressType.LIQUIDITY_POOL + } + } + + context("SCAddress conversion") { + test("should convert account to SCAddress") { + val address = Address(accountId) + val scAddress = address.toSCAddress() + + val expectedXdr = "AAAAAAAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg==" + val expectedBytes = Base64.getDecoder().decode(expectedXdr) + val expectedScAddress = + SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(expectedBytes))) + + scAddress shouldBe expectedScAddress + } + + test("should convert contract to SCAddress") { + val address = Address(contractId) + val scAddress = address.toSCAddress() + + val expectedXdr = "AAAAAT8MNL+TrQ2ZcdBMzJD3BVEcg4qtlzSkovsNegP8f+ia" + val expectedBytes = Base64.getDecoder().decode(expectedXdr) + val expectedScAddress = + SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(expectedBytes))) + + scAddress shouldBe expectedScAddress + } + + test("should convert muxed account to SCAddress") { + val address = Address(muxedAccountId) + val scAddress = address.toSCAddress() + + val expectedXdr = "AAAAAiAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAABNI=" + val expectedBytes = Base64.getDecoder().decode(expectedXdr) + val expectedScAddress = + SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(expectedBytes))) + + scAddress shouldBe expectedScAddress + } + + test("should convert claimable balance to SCAddress") { + val address = Address(claimableBalanceId) + val scAddress = address.toSCAddress() + + val expectedXdr = "AAAAAwAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg==" + val expectedBytes = Base64.getDecoder().decode(expectedXdr) + val expectedScAddress = + SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(expectedBytes))) + + scAddress shouldBe expectedScAddress + } + + test("should convert liquidity pool to SCAddress") { + val address = Address(liquidityPoolId) + val scAddress = address.toSCAddress() + + val expectedXdr = "AAAABD8MNL+TrQ2ZcdBMzJD3BVEcg4qtlzSkovsNegP8f+ia" + val expectedBytes = Base64.getDecoder().decode(expectedXdr) + val expectedScAddress = + SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(expectedBytes))) + + scAddress shouldBe expectedScAddress + } + } + + context("SCAddress to Address conversion") { + test("should create address from account SCAddress") { + val xdr = "AAAAAAAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg==" + val bytes = Base64.getDecoder().decode(xdr) + val scAddress = SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(bytes))) + + val address = Address.fromSCAddress(scAddress) + address.toString() shouldBe accountId + address.addressType shouldBe Address.AddressType.ACCOUNT + } + + test("should create address from contract SCAddress") { + val xdr = "AAAAAT8MNL+TrQ2ZcdBMzJD3BVEcg4qtlzSkovsNegP8f+ia" + val bytes = Base64.getDecoder().decode(xdr) + val scAddress = SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(bytes))) + + val address = Address.fromSCAddress(scAddress) + address.toString() shouldBe contractId + address.addressType shouldBe Address.AddressType.CONTRACT + } + + test("should create address from muxed account SCAddress") { + val xdr = "AAAAAiAAdX7q5YP8UN1mn5dnOswl7HJYI6xz+vbH3zGtMeUJAAAAAAAABNI=" + val bytes = Base64.getDecoder().decode(xdr) + val scAddress = SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(bytes))) + + val address = Address.fromSCAddress(scAddress) + address.toString() shouldBe muxedAccountId + address.addressType shouldBe Address.AddressType.MUXED_ACCOUNT + } + + test("should create address from claimable balance SCAddress") { + val xdr = "AAAAAwAAAAA/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg==" + val bytes = Base64.getDecoder().decode(xdr) + val scAddress = SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(bytes))) + + val address = Address.fromSCAddress(scAddress) + address.toString() shouldBe claimableBalanceId + address.addressType shouldBe Address.AddressType.CLAIMABLE_BALANCE + } + + test("should create address from liquidity pool SCAddress") { + val xdr = "AAAABD8MNL+TrQ2ZcdBMzJD3BVEcg4qtlzSkovsNegP8f+ia" + val bytes = Base64.getDecoder().decode(xdr) + val scAddress = SCAddress.decode(XdrDataInputStream(ByteArrayInputStream(bytes))) + + val address = Address.fromSCAddress(scAddress) + address.toString() shouldBe liquidityPoolId + address.addressType shouldBe Address.AddressType.LIQUIDITY_POOL + } + } + + context("SCVal conversion") { + test("should convert address to SCVal") { + val address = Address(contractId) + val scVal = address.toSCVal() + + val expectedXdr = "AAAAEgAAAAE/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg==" + val expectedBytes = Base64.getDecoder().decode(expectedXdr) + val expectedSCVal = SCVal.decode(XdrDataInputStream(ByteArrayInputStream(expectedBytes))) + + scVal shouldBe expectedSCVal + } + + test("should create address from SCVal") { + val xdr = "AAAAEgAAAAE/DDS/k60NmXHQTMyQ9wVRHIOKrZc0pKL7DXoD/H/omg==" + val bytes = Base64.getDecoder().decode(xdr) + val scVal = SCVal.decode(XdrDataInputStream(ByteArrayInputStream(bytes))) + + val address = Address.fromSCVal(scVal) + address.toString() shouldBe contractId + address.addressType shouldBe Address.AddressType.CONTRACT + } + } + })