diff --git a/address/pom.xml b/address/pom.xml index 766a9e90..1c00967c 100644 --- a/address/pom.xml +++ b/address/pom.xml @@ -82,5 +82,20 @@ <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/address/src/test/java/org/ton/java/address/TestTonSdkTestCases.java b/address/src/test/java/org/ton/java/address/TestTonSdkTestCases.java new file mode 100644 index 00000000..ca8f8c9a --- /dev/null +++ b/address/src/test/java/org/ton/java/address/TestTonSdkTestCases.java @@ -0,0 +1,276 @@ +package org.ton.java.address; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.ToNumberPolicy; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.io.IOException; +import java.net.URL; +import java.nio.charset.Charset; + +import static org.assertj.core.api.Assertions.assertThat; + +@Slf4j +@RunWith(JUnit4.class) +public class TestTonSdkTestCases { + + public static final String addressTestFileUrl = "https://raw.githubusercontent.com/neodix42/ton-sdk-test-cases/main/address.json"; + Gson gson = new GsonBuilder().setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE).create(); + + String fileContentWithUseCases = IOUtils.toString(new URL(addressTestFileUrl), Charset.defaultCharset()); + + public TestTonSdkTestCases() throws IOException { + } + + @Test + public void testAddress1() { + + // read the JSON file with tests cases + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-1"; + // select particular test case by category name and test id + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + // fetch test's description and id. It's always good to show test id, since it is unique across all tests. + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + // fetch input parameters and print test case details + Address address = Address.of((String) testCase.getInput().get("inputRawAddress")); + + log.info("input parameters:"); + log.info(" address: {}", address.toRaw()); + + // test the functionality of your library + + // fetch the expected result and compare it against the actual one + String expectedBounceableUrlSafe = (String) testCase.getExpectedOutput().get("bounceableUrlSafe"); + String expectedNonBounceableUrlSafe = (String) testCase.getExpectedOutput().get("nonBounceableUrlSafe"); + String expectedBounceable = (String) testCase.getExpectedOutput().get("bounceable"); + String expectedNonBounceable = (String) testCase.getExpectedOutput().get("nonBounceable"); + String expectedBounceableUrlSafeTest = (String) testCase.getExpectedOutput().get("bounceableUrlSafeTest"); + String expectedNonBounceableUrlSafeTest = (String) testCase.getExpectedOutput().get("nonBounceableUrlSafeTest"); + String expectedBounceableTest = (String) testCase.getExpectedOutput().get("bounceableTest"); + String expectedNonBounceableTest = (String) testCase.getExpectedOutput().get("nonBounceableTest"); + + assertThat(expectedBounceableUrlSafe).isEqualTo(address.toBounceable()); + assertThat(expectedNonBounceableUrlSafe).isEqualTo(address.toNonBounceable()); + assertThat(expectedBounceable).isEqualTo(address.toString(true, false, true)); + assertThat(expectedNonBounceable).isEqualTo(address.toString(true, false, false)); + assertThat(expectedBounceableUrlSafeTest).isEqualTo(address.toString(true, true, true, true)); + assertThat(expectedNonBounceableUrlSafeTest).isEqualTo(address.toString(true, true, false, true)); + assertThat(expectedBounceableTest).isEqualTo(address.toString(true, false, true, true)); + assertThat(expectedNonBounceableTest).isEqualTo(address.toString(true, false, false, true)); + } + + @Test + public void testAddress2() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-2"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("inputRawAddress")); + + log.info("input parameters:"); + log.info(" address: {}", address.toRaw()); + + String expectedBounceableUrlSafe = (String) testCase.getExpectedOutput().get("bounceableUrlSafe"); + String expectedNonBounceableUrlSafe = (String) testCase.getExpectedOutput().get("nonBounceableUrlSafe"); + String expectedBounceable = (String) testCase.getExpectedOutput().get("bounceable"); + String expectedNonBounceable = (String) testCase.getExpectedOutput().get("nonBounceable"); + + assertThat(expectedBounceableUrlSafe).isEqualTo(address.toBounceable()); + assertThat(expectedNonBounceableUrlSafe).isEqualTo(address.toNonBounceable()); + assertThat(expectedBounceable).isEqualTo(address.toString(true, false, true)); + assertThat(expectedNonBounceable).isEqualTo(address.toString(true, false, false)); + } + + @Test(expected = Error.class) + public void testAddress3() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-3"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("inputRawAddress")); + log.info("address {}", address); + } + + @Test(expected = Error.class) + public void testAddress4() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-4"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("inputRawAddress")); + log.info("address {}", address); + } + + @Test(expected = Error.class) + public void testAddress5() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-5"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("inputRawAddress")); + log.info("address {}", address); + } + + @Test + public void testAddress6() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-6"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("inputRawAddress")); + + log.info("input parameters:"); + log.info(" address: {}", address.toRaw()); + + String expectedBounceableUrlSafe = (String) testCase.getExpectedOutput().get("bounceableUrlSafe"); + String expectedNonBounceableUrlSafe = (String) testCase.getExpectedOutput().get("nonBounceableUrlSafe"); + String expectedBounceable = (String) testCase.getExpectedOutput().get("bounceable"); + String expectedNonBounceable = (String) testCase.getExpectedOutput().get("nonBounceable"); + + assertThat(expectedBounceableUrlSafe).isEqualTo(address.toBounceable()); + assertThat(expectedNonBounceableUrlSafe).isEqualTo(address.toNonBounceable()); + assertThat(expectedBounceable).isEqualTo(address.toString(true, false, true)); + assertThat(expectedNonBounceable).isEqualTo(address.toString(true, false, false)); + } + + @Test + public void testAddress7() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-7"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("inputRawAddress")); + + log.info("input parameters:"); + log.info(" address: {}", address.toRaw()); + + String expectedBounceableUrlSafe = (String) testCase.getExpectedOutput().get("bounceableUrlSafe"); + String expectedNonBounceableUrlSafe = (String) testCase.getExpectedOutput().get("nonBounceableUrlSafe"); + String expectedBounceable = (String) testCase.getExpectedOutput().get("bounceable"); + String expectedNonBounceable = (String) testCase.getExpectedOutput().get("nonBounceable"); + + assertThat(expectedBounceableUrlSafe).isEqualTo(address.toBounceable()); + assertThat(expectedNonBounceableUrlSafe).isEqualTo(address.toNonBounceable()); + assertThat(expectedBounceable).isEqualTo(address.toString(true, false, true)); + assertThat(expectedNonBounceable).isEqualTo(address.toString(true, false, false)); + } + + @Test + public void testAddress8() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-8"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("bounceableUrlSafe")); + + log.info("input parameters:"); + log.info(" address: {}", address.toBounceable()); + + String expectedRawAddress = (String) testCase.getExpectedOutput().get("rawAddress"); + + assertThat(expectedRawAddress).isEqualTo(address.toRaw()); + } + + @Test + public void testAddress9() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-9"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("nonBounceable")); + + log.info("input parameters:"); + log.info(" address: {}", address.toBounceable()); + + String expectedRawAddress = (String) testCase.getExpectedOutput().get("rawAddress"); + + assertThat(expectedRawAddress).isEqualTo(address.toRaw()); + } + + @Test(expected = Error.class) + public void testAddress10() { + + TonSdkTestCases tonSdkTestCases = gson.fromJson(fileContentWithUseCases, TonSdkTestCases.class); + + String testId = "address-10"; + TonSdkTestCases.TestCase testCase = tonSdkTestCases.getTestCases().get(testId); + + String description = testCase.getDescription(); + + log.info("testId: {}", testId); + log.info("description: {}", description); + + Address address = Address.of((String) testCase.getInput().get("bounceableUrlSafe")); + + log.info("input parameters:"); + log.info(" address: {}", address.toBounceable()); + } +} diff --git a/address/src/test/java/org/ton/java/address/TonSdkTestCases.java b/address/src/test/java/org/ton/java/address/TonSdkTestCases.java new file mode 100644 index 00000000..f7de323d --- /dev/null +++ b/address/src/test/java/org/ton/java/address/TonSdkTestCases.java @@ -0,0 +1,33 @@ +package org.ton.java.address; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.io.Serializable; +import java.util.Map; + +@Builder +@Getter +@Setter +@ToString +public class TonSdkTestCases implements Serializable { + private Map<String, TestCase> testCases; + + @Setter + @Getter + public static class TestCase { + + private String description; + private Map<String, Object> input; + private Map<String, Object> expectedOutput; + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); + } + } +}