Skip to content

Commit c381bac

Browse files
authored
#341 added automatic string split to max 64 bytes and added test for string splitting (#362)
* #341 added automatic string split to max 64 bytes and added test for string splitting. * #362 hash changed in this test due to array splitting
1 parent 12d42ad commit c381bac

File tree

5 files changed

+35
-11
lines changed

5 files changed

+35
-11
lines changed

metadata/src/main/java/com/bloxbean/cardano/client/metadata/cbor/CBORMetadataList.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.bloxbean.cardano.client.metadata.MetadataList;
55
import com.bloxbean.cardano.client.metadata.MetadataMap;
66
import com.bloxbean.cardano.client.util.JsonUtil;
7+
import com.bloxbean.cardano.client.util.StringUtils;
78

89
import java.math.BigInteger;
910
import java.util.ArrayList;
@@ -36,16 +37,26 @@ public CBORMetadataList addNegative(BigInteger value) {
3637

3738
@Override
3839
public CBORMetadataList add(String value) {
39-
checkLength(value);
40-
array.add(new UnicodeString(value));
40+
if (checkLength(value) > 64) {
41+
CBORMetadataList cborMetadataList = new CBORMetadataList();
42+
cborMetadataList.addAll(StringUtils.splitStringEveryNCharacters(value, 64));
43+
array.add(cborMetadataList.getArray());
44+
} else {
45+
array.add(new UnicodeString(value));
46+
}
4147
return this;
4248
}
4349

4450
@Override
4551
public CBORMetadataList addAll(String[] value) {
4652
for (String str : value) {
47-
checkLength(str);
48-
array.add(new UnicodeString(str));
53+
if (checkLength(str) > 64) {
54+
CBORMetadataList cborMetadataList = new CBORMetadataList();
55+
cborMetadataList.addAll(StringUtils.splitStringEveryNCharacters(str, 64));
56+
array.add(cborMetadataList.getArray());
57+
} else {
58+
array.add(new UnicodeString(str));
59+
}
4960
}
5061
return this;
5162
}

metadata/src/main/java/com/bloxbean/cardano/client/metadata/cbor/CBORMetadataMap.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,13 @@ public CBORMetadataMap put(BigInteger key, byte[] value) {
4646

4747
@Override
4848
public CBORMetadataMap put(BigInteger key, String value) {
49-
checkLength(value);
50-
map.put(new UnsignedInteger(key), new UnicodeString(value));
49+
if (checkLength(value) > 64) {
50+
CBORMetadataList cborMetadataList = new CBORMetadataList();
51+
cborMetadataList.addAll(StringUtils.splitStringEveryNCharacters(value, 64));
52+
map.put(new UnsignedInteger(key), cborMetadataList.getArray());
53+
} else {
54+
map.put(new UnsignedInteger(key), new UnicodeString(value));
55+
}
5156
return this;
5257
}
5358

metadata/src/test/java/com/bloxbean/cardano/client/metadata/cbor/CBORMetadataListTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.math.BigInteger;
99

1010
import static org.assertj.core.api.Assertions.assertThat;
11+
import static org.junit.jupiter.api.Assertions.assertTrue;
1112

1213
class CBORMetadataListTest {
1314

@@ -21,13 +22,16 @@ void testRemove() {
2122
list.add("value5");
2223
list.add("value6");
2324
list.add("value7");
25+
list.add("Extra Long string of more than 64 Bytes................................");
2426
System.out.println(list.toJson());
25-
assertThat(list.size()).isEqualTo(7);
27+
assertThat(list.size()).isEqualTo(8);
28+
29+
assertTrue(list.getValueAt(7) instanceof CBORMetadataList);
2630

2731
list.removeItem("value5");
2832
list.removeItem(BigInteger.valueOf(4));
2933

30-
assertThat(list.size()).isEqualTo(5);
34+
assertThat(list.size()).isEqualTo(6);
3135
assertThat(list.getValueAt(4)).isNotEqualTo("value5");
3236
assertThat(list.getValueAt(4)).isEqualTo("value7");
3337
}

metadata/src/test/java/com/bloxbean/cardano/client/metadata/cbor/CBORMetadataMapTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.math.BigInteger;
99

1010
import static org.assertj.core.api.Assertions.assertThat;
11+
import static org.junit.jupiter.api.Assertions.assertTrue;
1112

1213
class CBORMetadataMapTest {
1314

@@ -17,13 +18,16 @@ void testRemove() throws CborException {
1718
metadataMap.put("key1", "value1");
1819
metadataMap.put("key2", BigInteger.valueOf(123));
1920
metadataMap.put("key3", "value3");
21+
metadataMap.put("key4", "Extra Long string of more than 64 Bytes................................");
2022
metadataMap.put(new BigInteger("123456"), "value4");
2123

22-
assertThat(metadataMap.keys()).hasSize(4);
24+
assertTrue(metadataMap.get("key4") instanceof CBORMetadataList);
25+
26+
assertThat(metadataMap.keys()).hasSize(5);
2327
metadataMap.remove("key1");
2428
metadataMap.remove(new BigInteger("123456"));
2529

26-
assertThat(metadataMap.keys()).hasSize(2);
30+
assertThat(metadataMap.keys()).hasSize(3);
2731
assertThat(metadataMap.get("key2")).isEqualTo(BigInteger.valueOf(123));
2832
assertThat(metadataMap.get("key3")).isEqualTo("value3");
2933

transaction-spec/src/test/java/com/bloxbean/cardano/client/transaction/spec/AuxiliaryDataTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public void getAuxiliaryDataHash_whenPlutusScriptAndMetadata() throws CborSerial
109109
byte[] auxHashBytes = auxiliaryData.getAuxiliaryDataHash();
110110
String auxHash = HexUtil.encodeHexString(auxHashBytes);
111111

112-
assertThat(auxHash).isEqualTo("591ad666282de3400e798f7a78957410624b0bb7bcbc004325eafc869818f142");
112+
assertThat(auxHash).isEqualTo("9754d68a3d8bdc75150c415eba8a0b0623e10db17ee4a7a33883efc05f9cdc0b");
113113
}
114114

115115
@Test

0 commit comments

Comments
 (0)