From c08cbcb00f91f2fe895aa028272dce55c163c568 Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Sun, 4 Feb 2024 01:12:43 +0800 Subject: [PATCH 1/4] Working on tests for composite field and value --- .../fields/composite/JsonCadenceBuilderCompositeFieldTest.kt | 4 ++++ .../fields/composite/JsonCadenceBuilderCompositeValueTest.kt | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeFieldTest.kt create mode 100644 src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeValueTest.kt diff --git a/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeFieldTest.kt b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeFieldTest.kt new file mode 100644 index 0000000..06a467d --- /dev/null +++ b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeFieldTest.kt @@ -0,0 +1,4 @@ +package com.nftco.flow.sdk.cadence.fields.composite + +class JsonCadenceBuilderCompositeFieldTest { +} diff --git a/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeValueTest.kt b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeValueTest.kt new file mode 100644 index 0000000..f275a4b --- /dev/null +++ b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeValueTest.kt @@ -0,0 +1,4 @@ +package com.nftco.flow.sdk.cadence.fields.composite + +class JsonCadenceBuilderCompositeValueTest { +} From 7ffcb3738b3a94ffeada9a63d565d89f19eb3f16 Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Sun, 4 Feb 2024 01:15:31 +0800 Subject: [PATCH 2/4] Working on tests for composite attribute and value --- ...FieldTest.kt => JsonCadenceBuilderCompositeAttributeTest.kt} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/{JsonCadenceBuilderCompositeFieldTest.kt => JsonCadenceBuilderCompositeAttributeTest.kt} (52%) diff --git a/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeFieldTest.kt b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeAttributeTest.kt similarity index 52% rename from src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeFieldTest.kt rename to src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeAttributeTest.kt index 06a467d..3f45d89 100644 --- a/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeFieldTest.kt +++ b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeAttributeTest.kt @@ -1,4 +1,4 @@ package com.nftco.flow.sdk.cadence.fields.composite -class JsonCadenceBuilderCompositeFieldTest { +class JsonCadenceBuilderCompositeAttributeTest { } From 65bb60594398170884a5058d23e14d142b08d6e2 Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Sun, 4 Feb 2024 01:33:38 +0800 Subject: [PATCH 3/4] Working on tests for composite attribute and value --- .../nftco/flow/sdk/cadence/json-cadence.kt | 17 ++++++++- ...sonCadenceBuilderCompositeAttributeTest.kt | 37 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/nftco/flow/sdk/cadence/json-cadence.kt b/src/main/kotlin/com/nftco/flow/sdk/cadence/json-cadence.kt index f86e0b2..7b468ac 100644 --- a/src/main/kotlin/com/nftco/flow/sdk/cadence/json-cadence.kt +++ b/src/main/kotlin/com/nftco/flow/sdk/cadence/json-cadence.kt @@ -352,7 +352,22 @@ open class CompositeField(type: String, value: CompositeValue) : Field> get(name: String): T? = value?.getField(name) operator fun contains(name: String): Boolean = value?.getField>(name) != null } -open class CompositeAttribute(val name: String, val value: Field<*>) : Serializable +open class CompositeAttribute(val name: String, val value: Field<*>) : Serializable { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as CompositeAttribute + if (name != other.name) return false + if (value != other.value) return false + return true + } + + override fun hashCode(): Int { + var result = name.hashCode() + result = 31 * result + value.hashCode() + return result + } +} open class CompositeValue(val id: String, val fields: Array) : Serializable { @Suppress("UNCHECKED_CAST") fun > getField(name: String): T? = fields.find { it.name == name }?.value as T? diff --git a/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeAttributeTest.kt b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeAttributeTest.kt index 3f45d89..bc0bd60 100644 --- a/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeAttributeTest.kt +++ b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeAttributeTest.kt @@ -1,4 +1,41 @@ package com.nftco.flow.sdk.cadence.fields.composite +import com.nftco.flow.sdk.cadence.CompositeAttribute +import com.nftco.flow.sdk.cadence.StringField +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNotEquals +import org.junit.jupiter.api.Test + class JsonCadenceBuilderCompositeAttributeTest { + @Test + fun `Test creating CompositeAttribute with valid values`() { + val stringValue = StringField("test") + val compositeAttribute = CompositeAttribute("name", stringValue) + + assertEquals("name", compositeAttribute.name) + assertEquals(stringValue, compositeAttribute.value) + } + + @Test + fun `Test hashCode`() { + val stringValue1 = StringField("test") + val stringValue2 = StringField("test") + val compositeAttribute1 = CompositeAttribute("name", stringValue1) + val compositeAttribute2 = CompositeAttribute("name", stringValue2) + + assertEquals(compositeAttribute1.hashCode(), compositeAttribute2.hashCode()) + } + + @Test + fun `Test equals`() { + val stringValue1 = StringField("test") + val stringValue2 = StringField("test") + val stringValue3 = StringField("anotherTest") + val compositeAttribute1 = CompositeAttribute("name", stringValue1) + val compositeAttribute2 = CompositeAttribute("name", stringValue2) + val compositeAttribute3 = CompositeAttribute("name", stringValue3) + + assertEquals(compositeAttribute1, compositeAttribute2) + assertNotEquals(compositeAttribute1, compositeAttribute3) + } } From 443a88b904b77845b19fcfc4bfd7d9e52f5d6a36 Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Sun, 4 Feb 2024 01:50:41 +0800 Subject: [PATCH 4/4] Working on tests for composite attribute and value --- .../nftco/flow/sdk/cadence/json-cadence.kt | 15 ++++-- .../JsonCadenceBuilderCompositeValueTest.kt | 51 +++++++++++++++++++ 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/nftco/flow/sdk/cadence/json-cadence.kt b/src/main/kotlin/com/nftco/flow/sdk/cadence/json-cadence.kt index 7b468ac..288607a 100644 --- a/src/main/kotlin/com/nftco/flow/sdk/cadence/json-cadence.kt +++ b/src/main/kotlin/com/nftco/flow/sdk/cadence/json-cadence.kt @@ -355,10 +355,11 @@ open class CompositeField(type: String, value: CompositeValue) : Field) : Serializable { override fun equals(other: Any?): Boolean { if (this === other) return true - if (javaClass != other?.javaClass) return false - other as CompositeAttribute + if (other !is CompositeAttribute) return false + if (name != other.name) return false if (value != other.value) return false + return true } @@ -372,8 +373,14 @@ open class CompositeValue(val id: String, val fields: Array) @Suppress("UNCHECKED_CAST") fun > getField(name: String): T? = fields.find { it.name == name }?.value as T? fun > getRequiredField(name: String): T = getField(name) ?: throw IllegalStateException("Value for $name not found") - @Suppress("UNCHECKED_CAST") - operator fun get(name: String): T? = getField>(name)?.value as T? + inline operator fun > get(name: String): T? { + val field = fields.find { it.name == name }?.value + return if (field is T) { + field + } else { + null + } + } operator fun contains(name: String): Boolean = fields.find { it.name == name } != null } open class StructField(value: CompositeValue) : CompositeField(TYPE_STRUCT, value) diff --git a/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeValueTest.kt b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeValueTest.kt index f275a4b..e03d9be 100644 --- a/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeValueTest.kt +++ b/src/test/kotlin/com/nftco/flow/sdk/cadence/fields/composite/JsonCadenceBuilderCompositeValueTest.kt @@ -1,4 +1,55 @@ package com.nftco.flow.sdk.cadence.fields.composite +import com.nftco.flow.sdk.cadence.CompositeAttribute +import com.nftco.flow.sdk.cadence.CompositeValue +import com.nftco.flow.sdk.cadence.IntNumberField +import com.nftco.flow.sdk.cadence.StringField +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows + class JsonCadenceBuilderCompositeValueTest { + @Test + fun `Test getField`() { + val stringValue = StringField("test") + val compositeAttribute = CompositeAttribute("name", stringValue) + val compositeValue = CompositeValue("id", arrayOf(compositeAttribute)) + + assertEquals(stringValue, compositeValue.getField("name")) + assertNull(compositeValue.getField("nonExistentField")) + } + + @Test + fun `Test getRequiredField`() { + val stringValue = StringField("test") + val compositeAttribute = CompositeAttribute("name", stringValue) + val compositeValue = CompositeValue("id", arrayOf(compositeAttribute)) + + assertEquals(stringValue, compositeValue.getRequiredField("name")) + assertThrows { + compositeValue.getRequiredField("nonExistentField") + } + } + + @Test + fun `Test operator get`() { + val stringValue = StringField("test") + val compositeAttribute = CompositeAttribute("name", stringValue) + val compositeValue = CompositeValue("id", arrayOf(compositeAttribute)) + + assertEquals(stringValue, compositeValue["name"]) + assertNull(compositeValue[IntNumberField::class.java.simpleName]) + assertNull(compositeValue["nonExistentField"]) + } + + @Test + fun `Test operator contains`() { + val stringValue = StringField("test") + val compositeAttribute = CompositeAttribute("name", stringValue) + val compositeValue = CompositeValue("id", arrayOf(compositeAttribute)) + + assertEquals(true, "name" in compositeValue) + assertEquals(false, "nonExistentField" in compositeValue) + } }