FormatHolder () { format.push_back (SOElement (sfFlags, SOE_REQUIRED)); format.push_back (SOElement (sfLedgerHash, SOE_REQUIRED)); format.push_back (SOElement (sfLedgerSequence, SOE_OPTIONAL)); format.push_back (SOElement (sfCloseTime, SOE_OPTIONAL)); format.push_back (SOElement (sfLoadFee, SOE_OPTIONAL)); format.push_back (SOElement (sfAmendments, SOE_OPTIONAL)); format.push_back (SOElement (sfBaseFee, SOE_OPTIONAL)); format.push_back (SOElement (sfReserveBase, SOE_OPTIONAL)); format.push_back (SOElement (sfReserveIncrement, SOE_OPTIONAL)); format.push_back (SOElement (sfSigningTime, SOE_REQUIRED)); format.push_back (SOElement (sfSigningPubKey, SOE_REQUIRED)); format.push_back (SOElement (sfSignature, SOE_OPTIONAL)); format.push_back (SOElement (sfConsensusHash, SOE_OPTIONAL)); format.push_back (SOElement (sfCookie, SOE_OPTIONAL)); }
void testSerialization () { testcase ("serialization"); unexpected (sfGeneric.isUseful (), "sfGeneric must not be useful"); SField const& sfTestVL = SField::getField (STI_VL, 255); SField const& sfTestH256 = SField::getField (STI_HASH256, 255); SField const& sfTestU32 = SField::getField (STI_UINT32, 255); SField const& sfTestObject = SField::getField (STI_OBJECT, 255); SOTemplate elements; elements.push_back (SOElement (sfFlags, SOE_REQUIRED)); elements.push_back (SOElement (sfTestVL, SOE_REQUIRED)); elements.push_back (SOElement (sfTestH256, SOE_OPTIONAL)); elements.push_back (SOElement (sfTestU32, SOE_REQUIRED)); STObject object1 (elements, sfTestObject); STObject object2 (object1); unexpected (object1.getSerializer () != object2.getSerializer (), "STObject error 1"); unexpected (object1.isFieldPresent (sfTestH256) || !object1.isFieldPresent (sfTestVL), "STObject error"); object1.makeFieldPresent (sfTestH256); unexpected (!object1.isFieldPresent (sfTestH256), "STObject Error 2"); unexpected (object1.getFieldH256 (sfTestH256) != uint256 (), "STObject error 3"); if (object1.getSerializer () == object2.getSerializer ()) { WriteLog (lsINFO, STObject) << "O1: " << object1.getJson (0); WriteLog (lsINFO, STObject) << "O2: " << object2.getJson (0); fail ("STObject error 4"); } else { pass (); } object1.makeFieldAbsent (sfTestH256); unexpected (object1.isFieldPresent (sfTestH256), "STObject error 5"); unexpected (object1.getFlags () != 0, "STObject error 6"); unexpected (object1.getSerializer () != object2.getSerializer (), "STObject error 7"); STObject copy (object1); unexpected (object1.isFieldPresent (sfTestH256), "STObject error 8"); unexpected (copy.isFieldPresent (sfTestH256), "STObject error 9"); unexpected (object1.getSerializer () != copy.getSerializer (), "STObject error 10"); copy.setFieldU32 (sfTestU32, 1); unexpected (object1.getSerializer () == copy.getSerializer (), "STObject error 11"); for (int i = 0; i < 1000; i++) { Blob j (i, 2); object1.setFieldVL (sfTestVL, j); Serializer s; object1.add (s); SerialIter it (s.slice()); STObject object3 (elements, it, sfTestObject); unexpected (object1.getFieldVL (sfTestVL) != j, "STObject error"); unexpected (object3.getFieldVL (sfTestVL) != j, "STObject error"); } }