46 j[sfCloseResolution] = 255;
48 BEAST_EXPECT(obj.
object.has_value());
49 BEAST_EXPECT(obj.
object->isFieldPresent(sfCloseResolution));
50 BEAST_EXPECT(obj.
object->getFieldU8(sfCloseResolution) == 255);
56 j[sfCloseResolution] = 255u;
58 BEAST_EXPECT(obj.
object.has_value());
59 BEAST_EXPECT(obj.
object->isFieldPresent(sfCloseResolution));
60 BEAST_EXPECT(obj.
object->getFieldU8(sfCloseResolution) == 255);
66 j[sfCloseResolution] =
"255";
68 BEAST_EXPECT(obj.
object.has_value());
69 BEAST_EXPECT(obj.
object->isFieldPresent(sfCloseResolution));
70 BEAST_EXPECT(obj.
object->getFieldU8(sfCloseResolution) == 255);
76 j[sfCloseResolution] = 0;
78 BEAST_EXPECT(obj.
object.has_value());
79 BEAST_EXPECT(obj.
object->getFieldU8(sfCloseResolution) == 0);
85 j[sfCloseResolution] = -1;
87 BEAST_EXPECT(!obj.
object.has_value());
93 j[sfCloseResolution] = 256;
95 BEAST_EXPECT(!obj.
object.has_value());
103 BEAST_EXPECT(!obj.
object.has_value());
111 BEAST_EXPECT(!obj.
object.has_value());
122 j[sfLedgerEntryType] = 65535;
124 BEAST_EXPECT(obj.
object.has_value());
125 BEAST_EXPECT(obj.
object->isFieldPresent(sfLedgerEntryType));
126 BEAST_EXPECT(obj.
object->getFieldU16(sfLedgerEntryType) == 65535);
132 j[sfLedgerEntryType] = 65535u;
134 BEAST_EXPECT(obj.
object.has_value());
135 BEAST_EXPECT(obj.
object->isFieldPresent(sfLedgerEntryType));
136 BEAST_EXPECT(obj.
object->getFieldU16(sfLedgerEntryType) == 65535);
142 j[sfLedgerEntryType] =
"65535";
144 BEAST_EXPECT(obj.
object.has_value());
145 BEAST_EXPECT(obj.
object->isFieldPresent(sfLedgerEntryType));
146 BEAST_EXPECT(obj.
object->getFieldU16(sfLedgerEntryType) == 65535);
152 j[sfLedgerEntryType] = 0;
154 BEAST_EXPECT(obj.
object.has_value());
155 BEAST_EXPECT(obj.
object->getFieldU16(sfLedgerEntryType) == 0);
161 j[sfLedgerEntryType] = -1;
163 BEAST_EXPECT(!obj.
object.has_value());
169 j[sfLedgerEntryType] = 65536;
171 BEAST_EXPECT(!obj.
object.has_value());
177 j[sfLedgerEntryType] =
"65536";
179 BEAST_EXPECT(!obj.
object.has_value());
187 BEAST_EXPECT(!obj.
object.has_value());
195 BEAST_EXPECT(!obj.
object.has_value());
201 j[sfTransferFee] =
"Payment";
203 BEAST_EXPECT(!obj.
object.has_value());
354 j[sfEmailHash] =
"0123456789ABCDEF0123456789ABCDEF";
356 BEAST_EXPECT(obj.
object.has_value());
357 BEAST_EXPECT(obj.
object->isFieldPresent(sfEmailHash));
358 BEAST_EXPECT(obj.
object->getFieldH128(sfEmailHash).size() == 16);
383 j[sfEmailHash] =
"0123456789abcdef0123456789abcdef";
385 BEAST_EXPECT(obj.
object.has_value());
386 BEAST_EXPECT(obj.
object->isFieldPresent(sfEmailHash));
387 BEAST_EXPECT(obj.
object->getFieldH128(sfEmailHash).size() == 16);
395 BEAST_EXPECT(obj.
object.has_value());
396 BEAST_EXPECT(obj.
object->isFieldPresent(sfEmailHash));
397 auto const& h128 = obj.
object->getFieldH128(sfEmailHash);
398 BEAST_EXPECT(h128.size() == 16);
400 h128.begin(), h128.end(), [](
auto b) { return b == 0; });
401 BEAST_EXPECT(allZero);
407 j[sfEmailHash] =
"0123456789ABCDEF0123456789ABCDE";
409 BEAST_EXPECT(!obj.
object.has_value());
415 j[sfEmailHash] =
"nothexstring";
417 BEAST_EXPECT(!obj.
object.has_value());
423 j[sfEmailHash] =
"01234567";
425 BEAST_EXPECT(!obj.
object.has_value());
431 j[sfEmailHash] =
"0123456789ABCDEF0123456789ABCDEF00";
433 BEAST_EXPECT(!obj.
object.has_value());
441 BEAST_EXPECT(!obj.
object.has_value());
449 BEAST_EXPECT(!obj.
object.has_value());
459 j[sfTakerPaysCurrency] =
"0123456789ABCDEF0123456789ABCDEF01234567";
461 BEAST_EXPECT(obj.
object.has_value());
462 BEAST_EXPECT(obj.
object->isFieldPresent(sfTakerPaysCurrency));
464 obj.
object->getFieldH160(sfTakerPaysCurrency).size() == 20);
466 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23,
467 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67};
469 obj.
object->getFieldH160(sfTakerPaysCurrency) ==
475 j[sfTakerPaysCurrency] =
"0123456789abcdef0123456789abcdef01234567";
477 BEAST_EXPECT(obj.
object.has_value());
478 BEAST_EXPECT(obj.
object->isFieldPresent(sfTakerPaysCurrency));
480 obj.
object->getFieldH160(sfTakerPaysCurrency).size() == 20);
486 j[sfTakerPaysCurrency] =
"";
488 BEAST_EXPECT(obj.
object.has_value());
489 BEAST_EXPECT(obj.
object->isFieldPresent(sfTakerPaysCurrency));
490 auto const& h160 = obj.
object->getFieldH160(sfTakerPaysCurrency);
491 BEAST_EXPECT(h160.size() == 20);
493 h160.begin(), h160.end(), [](
auto b) { return b == 0; });
494 BEAST_EXPECT(allZero);
500 j[sfTakerPaysCurrency] =
"nothexstring";
502 BEAST_EXPECT(!obj.
object.has_value());
508 j[sfTakerPaysCurrency] =
"01234567";
510 BEAST_EXPECT(!obj.
object.has_value());
516 j[sfTakerPaysCurrency] =
517 "0123456789ABCDEF0123456789ABCDEF0123456789";
519 BEAST_EXPECT(!obj.
object.has_value());
527 BEAST_EXPECT(!obj.
object.has_value());
535 BEAST_EXPECT(!obj.
object.has_value());
545 j[sfMPTokenIssuanceID] =
546 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
548 BEAST_EXPECT(obj.
object.has_value());
549 BEAST_EXPECT(obj.
object->isFieldPresent(sfMPTokenIssuanceID));
551 obj.
object->getFieldH192(sfMPTokenIssuanceID).size() == 24);
553 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
554 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
555 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
557 obj.
object->getFieldH192(sfMPTokenIssuanceID) ==
564 j[sfMPTokenIssuanceID] =
565 "ffffffffffffffffffffffffffffffffffffffffffffffff";
567 BEAST_EXPECT(obj.
object.has_value());
568 BEAST_EXPECT(obj.
object->isFieldPresent(sfMPTokenIssuanceID));
570 obj.
object->getFieldH192(sfMPTokenIssuanceID).size() == 24);
576 j[sfMPTokenIssuanceID] =
"";
578 BEAST_EXPECT(obj.
object.has_value());
579 BEAST_EXPECT(obj.
object->isFieldPresent(sfMPTokenIssuanceID));
580 auto const& h192 = obj.
object->getFieldH192(sfMPTokenIssuanceID);
581 BEAST_EXPECT(h192.size() == 24);
583 h192.begin(), h192.end(), [](
auto b) { return b == 0; });
584 BEAST_EXPECT(allZero);
590 j[sfMPTokenIssuanceID] =
591 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDE";
593 BEAST_EXPECT(!obj.
object.has_value());
599 j[sfMPTokenIssuanceID] =
"nothexstring";
601 BEAST_EXPECT(!obj.
object.has_value());
607 j[sfMPTokenIssuanceID] =
"01234567";
609 BEAST_EXPECT(!obj.
object.has_value());
615 j[sfMPTokenIssuanceID] =
616 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF00";
618 BEAST_EXPECT(!obj.
object.has_value());
626 BEAST_EXPECT(!obj.
object.has_value());
634 BEAST_EXPECT(!obj.
object.has_value());
646 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD"
649 BEAST_EXPECT(obj.
object.has_value());
650 BEAST_EXPECT(obj.
object->isFieldPresent(sfLedgerHash));
651 BEAST_EXPECT(obj.
object->getFieldH256(sfLedgerHash).size() == 32);
653 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
654 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
655 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
656 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};
658 obj.
object->getFieldH256(sfLedgerHash) ==
uint256{expected});
664 "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd"
667 BEAST_EXPECT(obj.
object.has_value());
668 BEAST_EXPECT(obj.
object->isFieldPresent(sfLedgerHash));
669 BEAST_EXPECT(obj.
object->getFieldH256(sfLedgerHash).size() == 32);
675 j[sfLedgerHash] =
"";
677 BEAST_EXPECT(obj.
object.has_value());
678 BEAST_EXPECT(obj.
object->isFieldPresent(sfLedgerHash));
679 auto const& h256 = obj.
object->getFieldH256(sfLedgerHash);
680 BEAST_EXPECT(h256.size() == 32);
682 h256.begin(), h256.end(), [](
auto b) { return b == 0; });
683 BEAST_EXPECT(allZero);
690 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD"
693 BEAST_EXPECT(!obj.
object.has_value());
699 j[sfLedgerHash] =
"nothexstring";
701 BEAST_EXPECT(!obj.
object.has_value());
707 j[sfLedgerHash] =
"01234567";
709 BEAST_EXPECT(!obj.
object.has_value());
716 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD"
719 BEAST_EXPECT(!obj.
object.has_value());
727 BEAST_EXPECT(!obj.
object.has_value());
735 BEAST_EXPECT(!obj.
object.has_value());
745 int const minInt32 = -2147483648;
746 j[sfDummyInt32] = minInt32;
748 BEAST_EXPECT(obj.
object.has_value());
749 if (BEAST_EXPECT(obj.
object->isFieldPresent(sfDummyInt32)))
750 BEAST_EXPECT(obj.
object->getFieldI32(sfDummyInt32) == minInt32);
756 int const maxInt32 = 2147483647;
757 j[sfDummyInt32] = maxInt32;
759 BEAST_EXPECT(obj.
object.has_value());
760 if (BEAST_EXPECT(obj.
object->isFieldPresent(sfDummyInt32)))
761 BEAST_EXPECT(obj.
object->getFieldI32(sfDummyInt32) == maxInt32);
767 unsigned int const maxUInt32 = 2147483647u;
768 j[sfDummyInt32] = maxUInt32;
770 BEAST_EXPECT(obj.
object.has_value());
771 if (BEAST_EXPECT(obj.
object->isFieldPresent(sfDummyInt32)))
773 obj.
object->getFieldI32(sfDummyInt32) ==
774 static_cast<int32_t
>(maxUInt32));
780 j[sfDummyInt32] =
"2147483647";
782 BEAST_EXPECT(obj.
object.has_value());
783 if (BEAST_EXPECT(obj.
object->isFieldPresent(sfDummyInt32)))
785 obj.
object->getFieldI32(sfDummyInt32) == 2147483647u);
791 int value = -2147483648;
794 BEAST_EXPECT(obj.
object.has_value());
795 if (BEAST_EXPECT(obj.
object->isFieldPresent(sfDummyInt32)))
796 BEAST_EXPECT(obj.
object->getFieldI32(sfDummyInt32) == value);
802 j[sfDummyInt32] =
"-2147483649";
804 BEAST_EXPECT(!obj.
object.has_value());
810 j[sfDummyInt32] = 2147483648u;
812 BEAST_EXPECT(!obj.
object.has_value());
818 j[sfDummyInt32] =
"2147483648";
820 BEAST_EXPECT(!obj.
object.has_value());
828 BEAST_EXPECT(!obj.
object.has_value());
836 BEAST_EXPECT(!obj.
object.has_value());
847 j[sfPublicKey] =
"DEADBEEF";
849 BEAST_EXPECT(obj.
object.has_value());
850 BEAST_EXPECT(obj.
object->isFieldPresent(sfPublicKey));
851 auto const& blob = obj.
object->getFieldVL(sfPublicKey);
852 BEAST_EXPECT(blob.size() == 4);
853 BEAST_EXPECT(blob[0] == 0xDE);
854 BEAST_EXPECT(blob[1] == 0xAD);
855 BEAST_EXPECT(blob[2] == 0xBE);
856 BEAST_EXPECT(blob[3] == 0xEF);
864 BEAST_EXPECT(obj.
object.has_value());
865 BEAST_EXPECT(obj.
object->isFieldPresent(sfPublicKey));
866 auto const& blob = obj.
object->getFieldVL(sfPublicKey);
867 BEAST_EXPECT(blob.size() == 0);
873 j[sfPublicKey] =
"deadbeef";
875 BEAST_EXPECT(obj.
object.has_value());
876 BEAST_EXPECT(obj.
object->isFieldPresent(sfPublicKey));
877 auto const& blob = obj.
object->getFieldVL(sfPublicKey);
878 BEAST_EXPECT(blob.size() == 4);
879 BEAST_EXPECT(blob[0] == 0xDE);
880 BEAST_EXPECT(blob[1] == 0xAD);
881 BEAST_EXPECT(blob[2] == 0xBE);
882 BEAST_EXPECT(blob[3] == 0xEF);
888 j[sfPublicKey] =
"XYZ123";
890 BEAST_EXPECT(!obj.
object.has_value());
898 BEAST_EXPECT(!obj.
object.has_value());
906 BEAST_EXPECT(!obj.
object.has_value());
919 "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD"
922 "FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210FEDCBA98765432"
926 BEAST_EXPECT(obj.
object.has_value());
927 BEAST_EXPECT(obj.
object->isFieldPresent(sfHashes));
928 auto const& vec = obj.
object->getFieldV256(sfHashes);
929 BEAST_EXPECT(vec.size() == 2);
930 BEAST_EXPECT(
to_string(vec[0]) == arr[0u].asString());
931 BEAST_EXPECT(
to_string(vec[1]) == arr[1u].asString());
939 BEAST_EXPECT(obj.
object.has_value());
940 BEAST_EXPECT(obj.
object->isFieldPresent(sfHashes));
941 auto const& vec = obj.
object->getFieldV256(sfHashes);
942 BEAST_EXPECT(vec.size() == 0);
949 arr.
append(
"nothexstring");
952 BEAST_EXPECT(!obj.
object.has_value());
959 arr.
append(
"0123456789ABCDEF");
962 BEAST_EXPECT(!obj.
object.has_value());
972 BEAST_EXPECT(!obj.
object.has_value());
978 j[sfHashes] =
"notanarray";
980 BEAST_EXPECT(!obj.
object.has_value());
988 objElem[
"foo"] =
"bar";
992 BEAST_EXPECT(!obj.
object.has_value());
1088 j[sfBaseAsset] =
"USD";
1090 BEAST_EXPECT(obj.
object.has_value());
1091 BEAST_EXPECT(obj.
object->isFieldPresent(sfBaseAsset));
1092 auto const& curr = obj.
object->getFieldCurrency(sfBaseAsset);
1093 BEAST_EXPECT(curr.currency().size() == 20);
1099 j[sfBaseAsset] =
"EUR";
1101 BEAST_EXPECT(obj.
object.has_value());
1102 BEAST_EXPECT(obj.
object->isFieldPresent(sfBaseAsset));
1103 auto const& curr = obj.
object->getFieldCurrency(sfBaseAsset);
1104 BEAST_EXPECT(curr.currency().size() == 20);
1110 j[sfBaseAsset] =
"0123456789ABCDEF01230123456789ABCDEF0123";
1112 if (BEAST_EXPECT(obj.
object.has_value()))
1114 BEAST_EXPECT(obj.
object->isFieldPresent(sfBaseAsset));
1115 auto const& curr = obj.
object->getFieldCurrency(sfBaseAsset);
1116 BEAST_EXPECT(curr.currency().size() == 20);
1123 j[sfBaseAsset] =
"USDD";
1125 BEAST_EXPECT(!obj.
object.has_value());
1131 j[sfBaseAsset] =
"usd";
1133 BEAST_EXPECT(obj.
object.has_value());
1134 BEAST_EXPECT(obj.
object->isFieldPresent(sfBaseAsset));
1135 auto const& curr = obj.
object->getFieldCurrency(sfBaseAsset);
1136 BEAST_EXPECT(curr.currency().size() == 20);
1142 j[sfBaseAsset] =
"0123456789AB";
1144 BEAST_EXPECT(!obj.
object.has_value());
1150 j[sfBaseAsset] =
"0123456789ABCDEF0123456789";
1152 BEAST_EXPECT(!obj.
object.has_value());
1158 j[sfBaseAsset] =
"";
1160 BEAST_EXPECT(obj.
object.has_value());
1161 BEAST_EXPECT(obj.
object->isFieldPresent(sfBaseAsset));
1162 auto const& curr = obj.
object->getFieldCurrency(sfBaseAsset);
1163 BEAST_EXPECT(curr.currency().size() == 20);
1171 BEAST_EXPECT(!obj.
object.has_value());
1179 BEAST_EXPECT(!obj.
object.has_value());
1252 elem[
"account"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1253 elem[
"currency"] =
"USD";
1254 elem[
"issuer"] =
"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe";
1258 j[sfPaths] = pathset;
1260 if (BEAST_EXPECT(obj.
object.has_value()))
1262 BEAST_EXPECT(obj.
object->isFieldPresent(sfPaths));
1263 auto const& ps = obj.
object->getFieldPathSet(sfPaths);
1264 BEAST_EXPECT(!ps.empty());
1265 BEAST_EXPECT(ps.size() == 1);
1266 BEAST_EXPECT(ps[0].size() == 1);
1268 ps[0][0].getAccountID() ==
1269 parseBase58<AccountID>(
1270 "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"));
1271 BEAST_EXPECT(
to_string(ps[0][0].getCurrency()) ==
"USD");
1273 ps[0][0].getIssuerID() ==
1274 parseBase58<AccountID>(
1275 "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe"));
1284 elem[
"account"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1285 elem[
"currency"] =
"0123456789ABCDEF01230123456789ABCDEF0123";
1286 elem[
"issuer"] =
"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe";
1290 j[sfPaths] = pathset;
1292 BEAST_EXPECT(obj.
object.has_value());
1293 BEAST_EXPECT(obj.
object->isFieldPresent(sfPaths));
1294 auto const& ps = obj.
object->getFieldPathSet(sfPaths);
1295 BEAST_EXPECT(!ps.empty());
1301 j[sfPaths] =
"notanarray";
1303 BEAST_EXPECT(!obj.
object.has_value());
1310 pathset.
append(
"notanarray");
1311 j[sfPaths] = pathset;
1313 BEAST_EXPECT(!obj.
object.has_value());
1321 path.append(
"notanobject");
1324 j[sfPaths] = pathset;
1326 BEAST_EXPECT(!obj.
object.has_value());
1335 elem[
"foo"] =
"bar";
1339 j[sfPaths] = pathset;
1341 BEAST_EXPECT(!obj.
object.has_value());
1350 elem[
"account"] =
"notAValidBase58Account";
1354 j[sfPaths] = pathset;
1356 BEAST_EXPECT(!obj.
object.has_value());
1364 elem[
"account"] = 12345;
1368 j[sfPaths] = pathset;
1370 BEAST_EXPECT(!obj.
object.has_value());
1378 elem[
"currency"] = 12345;
1382 j[sfPaths] = pathset;
1384 BEAST_EXPECT(!obj.
object.has_value());
1392 elem[
"currency"] =
"notAValidCurrency";
1396 j[sfPaths] = pathset;
1398 BEAST_EXPECT(!obj.
object.has_value());
1406 elem[
"issuer"] = 12345;
1410 j[sfPaths] = pathset;
1412 BEAST_EXPECT(!obj.
object.has_value());
1420 elem[
"issuer"] =
"notAValidBase58Account";
1424 j[sfPaths] = pathset;
1426 BEAST_EXPECT(!obj.
object.has_value());
1438 issueJson[
"currency"] =
"USD";
1439 issueJson[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1440 j[sfAsset] = issueJson;
1442 if (BEAST_EXPECT(obj.
object.has_value()))
1444 BEAST_EXPECT(obj.
object->isFieldPresent(sfAsset));
1445 auto const& issueField = (*obj.
object)[sfAsset];
1446 auto const issue = issueField.value().get<
Issue>();
1447 BEAST_EXPECT(issue.currency.size() == 20);
1448 BEAST_EXPECT(
to_string(issue.currency) ==
"USD");
1449 BEAST_EXPECT(issue.account.size() == 20);
1452 parseBase58<AccountID>(
1453 "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"));
1461 issueJson[
"currency"] =
"0123456789ABCDEF01230123456789ABCDEF0123";
1462 issueJson[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1463 j[sfAsset] = issueJson;
1465 if (BEAST_EXPECT(obj.
object.has_value()))
1467 BEAST_EXPECT(obj.
object->isFieldPresent(sfAsset));
1468 auto const& issueField = (*obj.
object)[sfAsset];
1469 auto const issue = issueField.value().get<
Issue>();
1470 BEAST_EXPECT(issue.currency.size() == 20);
1471 BEAST_EXPECT(issue.account.size() == 20);
1479 issueJson[
"mpt_issuance_id"] =
1480 "0000000000000000000000004D5054494431323334234234";
1481 j[sfAsset] = issueJson;
1483 if (BEAST_EXPECT(obj.
object.has_value()))
1485 BEAST_EXPECT(obj.
object->isFieldPresent(sfAsset));
1486 auto const& issueField = (*obj.
object)[sfAsset];
1487 auto const issue = issueField.value().get<
MPTIssue>();
1488 BEAST_EXPECT(issue.getMptID().size() == 24);
1496 issue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1499 BEAST_EXPECT(!obj.
object.has_value());
1506 issue[
"currency"] =
"USD";
1509 BEAST_EXPECT(!obj.
object.has_value());
1516 issue[
"currency"] =
"USDD";
1517 issue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1520 BEAST_EXPECT(!obj.
object.has_value());
1527 issue[
"currency"] =
"USD";
1528 issue[
"issuer"] =
"notAValidIssuer";
1531 BEAST_EXPECT(!obj.
object.has_value());
1539 issue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1542 BEAST_EXPECT(!obj.
object.has_value());
1549 issue[
"currency"] =
"USD";
1553 BEAST_EXPECT(!obj.
object.has_value());
1559 j[sfAsset] =
"notanobject";
1561 BEAST_EXPECT(!obj.
object.has_value());
1574 issuingChainIssue[
"currency"] =
"USD";
1575 issuingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1577 lockingChainIssue[
"currency"] =
"EUR";
1578 lockingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1579 bridge[
"LockingChainIssue"] = lockingChainIssue;
1580 bridge[
"IssuingChainIssue"] = issuingChainIssue;
1581 bridge[
"LockingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1582 bridge[
"IssuingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1583 j[sfXChainBridge] = bridge;
1585 if (BEAST_EXPECT(obj.
object.has_value()))
1587 BEAST_EXPECT(obj.
object->isFieldPresent(sfXChainBridge));
1588 auto const& bridgeField = (*obj.
object)[sfXChainBridge];
1590 bridgeField->lockingChainIssue().currency.size() == 20);
1592 bridgeField->issuingChainIssue().currency.size() == 20);
1601 issuingChainIssue[
"currency"] =
1602 "0123456789ABCDEF01230123456789ABCDEF0123";
1603 issuingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1605 lockingChainIssue[
"currency"] =
1606 "0123456789ABCDEF01230123456789ABCDEF0123";
1607 lockingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1608 bridge[
"LockingChainIssue"] = lockingChainIssue;
1609 bridge[
"IssuingChainIssue"] = issuingChainIssue;
1610 bridge[
"LockingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1611 bridge[
"IssuingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1612 j[sfXChainBridge] = bridge;
1614 if (BEAST_EXPECT(obj.
object.has_value()))
1616 BEAST_EXPECT(obj.
object->isFieldPresent(sfXChainBridge));
1617 auto const& bridgeField = (*obj.
object)[sfXChainBridge];
1619 bridgeField->lockingChainIssue().currency.size() == 20);
1621 bridgeField->issuingChainIssue().currency.size() == 20);
1630 issuingChainIssue[
"currency"] =
"USD";
1631 issuingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1632 bridge[
"IssuingChainIssue"] = issuingChainIssue;
1633 bridge[
"LockingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1634 bridge[
"IssuingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1635 j[sfXChainBridge] = bridge;
1637 BEAST_EXPECT(!obj.
object.has_value());
1645 lockingChainIssue[
"currency"] =
"EUR";
1646 lockingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1647 bridge[
"LockingChainIssue"] = lockingChainIssue;
1648 bridge[
"LockingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1649 bridge[
"IssuingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1650 j[sfXChainBridge] = bridge;
1652 BEAST_EXPECT(!obj.
object.has_value());
1660 issuingChainIssue[
"currency"] =
"USD";
1661 issuingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1662 bridge[
"IssuingChainIssue"] = issuingChainIssue;
1664 lockingChainIssue[
"currency"] =
"EUR";
1665 lockingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1666 bridge[
"LockingChainIssue"] = lockingChainIssue;
1667 bridge[
"IssuingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1668 j[sfXChainBridge] = bridge;
1670 BEAST_EXPECT(!obj.
object.has_value());
1678 issuingChainIssue[
"currency"] =
"USD";
1679 issuingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1680 bridge[
"IssuingChainIssue"] = issuingChainIssue;
1682 lockingChainIssue[
"currency"] =
"EUR";
1683 lockingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1684 bridge[
"LockingChainIssue"] = lockingChainIssue;
1685 bridge[
"LockingChainDoor"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1686 j[sfXChainBridge] = bridge;
1688 BEAST_EXPECT(!obj.
object.has_value());
1695 bridge[
"LockingChainIssue"] =
"notanobject";
1696 bridge[
"IssuingChainIssue"] =
"notanobject";
1697 j[sfXChainBridge] = bridge;
1699 BEAST_EXPECT(!obj.
object.has_value());
1707 asset[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1709 lockingChainIssue[
"currency"] =
"EUR";
1710 lockingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1711 bridge[
"LockingChainIssue"] = lockingChainIssue;
1712 bridge[
"IssuingChainIssue"] = asset;
1713 j[sfXChainBridge] = bridge;
1715 BEAST_EXPECT(!obj.
object.has_value());
1723 asset[
"currency"] =
"USD";
1725 lockingChainIssue[
"currency"] =
"EUR";
1726 lockingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1727 bridge[
"LockingChainIssue"] = lockingChainIssue;
1728 bridge[
"IssuingChainIssue"] = asset;
1729 j[sfXChainBridge] = bridge;
1731 BEAST_EXPECT(!obj.
object.has_value());
1739 asset[
"currency"] =
"USD";
1740 asset[
"issuer"] =
"notAValidBase58Account";
1742 lockingChainIssue[
"currency"] =
"EUR";
1743 lockingChainIssue[
"issuer"] =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
1744 bridge[
"LockingChainIssue"] = lockingChainIssue;
1745 bridge[
"IssuingChainIssue"] = asset;
1746 j[sfXChainBridge] = bridge;
1748 BEAST_EXPECT(!obj.
object.has_value());
1754 j[sfXChainBridge] =
"notanobject";
1756 BEAST_EXPECT(!obj.
object.has_value());
1767 j[sfNumber] = 12345;
1769 BEAST_EXPECT(obj.
object.has_value());
1770 BEAST_EXPECT(obj.
object->isFieldPresent(sfNumber));
1772 obj.
object->getFieldNumber(sfNumber).value() ==
1779 j[sfNumber] = 12345u;
1781 BEAST_EXPECT(obj.
object.has_value());
1782 BEAST_EXPECT(obj.
object->isFieldPresent(sfNumber));
1784 obj.
object->getFieldNumber(sfNumber).value() ==
1791 j[sfNumber] =
"67890";
1793 BEAST_EXPECT(obj.
object.has_value());
1794 BEAST_EXPECT(obj.
object->isFieldPresent(sfNumber));
1796 obj.
object->getFieldNumber(sfNumber).value() ==
1805 BEAST_EXPECT(obj.
object.has_value());
1806 BEAST_EXPECT(obj.
object->isFieldPresent(sfNumber));
1808 obj.
object->getFieldNumber(sfNumber).value() ==
Number(-42, 0));
1814 j[sfNumber] =
"-123";
1816 BEAST_EXPECT(obj.
object.has_value());
1817 BEAST_EXPECT(obj.
object->isFieldPresent(sfNumber));
1819 obj.
object->getFieldNumber(sfNumber).value() ==
1826 j[sfNumber] =
"3.14159";
1828 if (BEAST_EXPECT(obj.
object.has_value()))
1830 BEAST_EXPECT(obj.
object->isFieldPresent(sfNumber));
1832 obj.
object->getFieldNumber(sfNumber).value() ==
1840 j[sfNumber] =
"notanumber";
1842 BEAST_EXPECT(!obj.
object.has_value());
1850 BEAST_EXPECT(!obj.
object.has_value());
1858 BEAST_EXPECT(!obj.
object.has_value());
1866 BEAST_EXPECT(!obj.
object.has_value());
1878 objVal[sfTransactionResult] = 1;
1879 j[sfTransactionMetaData] = objVal;
1881 BEAST_EXPECT(obj.
object.has_value());
1882 BEAST_EXPECT(obj.
object->isFieldPresent(sfTransactionMetaData));
1883 auto const& result =
1884 obj.
object->peekFieldObject(sfTransactionMetaData);
1885 BEAST_EXPECT(result.getFieldU8(sfTransactionResult) == 1);
1891 j[sfTransactionMetaData] =
"notanobject";
1893 BEAST_EXPECT(!obj.
object.has_value());
1901 j[sfTransactionMetaData] = arr;
1903 BEAST_EXPECT(!obj.
object.has_value());
1911 BEAST_EXPECT(!obj.
object.has_value());
1920 for (
int i = 0; i < 63; ++i)
1923 (*current)[sfTransactionMetaData] = next;
1924 current = &((*current)[sfTransactionMetaData]);
1926 (*current)[sfTransactionResult.getJsonName()] = 1;
1927 j[sfTransactionMetaData] = obj;
1929 BEAST_EXPECT(parsed.
object.has_value());
1930 BEAST_EXPECT(parsed.
object->isFieldPresent(sfTransactionMetaData));
1938 for (
int i = 0; i < 64; ++i)
1941 (*current)[sfTransactionMetaData] = next;
1942 current = &((*current)[sfTransactionMetaData]);
1944 (*current)[sfTransactionResult.getJsonName()] = 1;
1945 j[sfTransactionMetaData] = obj;
1947 BEAST_EXPECT(!parsed.
object.has_value());
1960 elem[sfTransactionResult] = 2;
1962 elem2[sfTransactionMetaData] = elem;
1964 j[sfSignerEntries] = arr;
1966 BEAST_EXPECT(obj.
object.has_value());
1967 BEAST_EXPECT(obj.
object->isFieldPresent(sfSignerEntries));
1968 auto const& result = obj.
object->getFieldArray(sfSignerEntries);
1969 if (BEAST_EXPECT(result.size() == 1))
1971 BEAST_EXPECT(result[0].getFName() == sfTransactionMetaData);
1972 BEAST_EXPECT(result[0].
getJson(0) == elem);
1980 arr.
append(
"notanobject");
1981 j[sfSignerEntries] = arr;
1983 BEAST_EXPECT(!obj.
object.has_value());
1991 elem[
"invalidField"] = 1;
1993 j[sfSignerEntries] = arr;
1995 BEAST_EXPECT(!obj.
object.has_value());
2003 elem[sfTransactionResult] = 2;
2004 elem[sfNetworkID] = 3;
2006 j[sfSignerEntries] = arr;
2008 BEAST_EXPECT(!obj.
object.has_value());
2014 j[sfSignerEntries] =
"notanarray";
2016 BEAST_EXPECT(!obj.
object.has_value());
2025 elem[sfTransactionResult] =
"notanint";
2027 j[sfSignerEntries] = arr;
2029 BEAST_EXPECT(!obj.
object.has_value());
2036 j[sfSignerEntries] = arr;
2038 BEAST_EXPECT(obj.
object.has_value());
2039 BEAST_EXPECT(obj.
object->isFieldPresent(sfSignerEntries));
2047 obj[0u][sfTransactionResult] = 1;
2048 j[sfSignerEntries] = obj;
2050 BEAST_EXPECT(!parsed.
object.has_value());
2071 "\"ModifiedNode\":{\"Sequence\":1}, "
2072 "\"DeletedNode\":{\"Sequence\":1}"
2080 BEAST_EXPECT(!parsed.
object);
2086 what.
find(
"First level children of `Template`") != 0);