bool Nitf::RpcParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "1" // SUCCESS "0128.03" // ERR_BIAS "0000.50" // ERR_RAND "002556" // LINE_OFFSET "01827" // SAMP_OFFSET "+33.5812" // LAT_OFFSET "-112.0370" // LONG_OFFSET "+0477" // HEIGHT_OFFSET "003716" // LINE_SCALE "06841" // SAMP_SCALE "+00.0341" // LAT_SCALE "+000.0734" // LONG_SCALE "+0162" // HEIGHT_SCALE "+6.267838E-4" // LINE_NUMERATOR_COEF_PREFIX "+1.834668E-2" // LINE_NUMERATOR_COEF_PREFIX "-1.018332E+0" // LINE_NUMERATOR_COEF_PREFIX "+2.40411E-10" // LINE_NUMERATOR_COEF_PREFIX "-7.031540E-4" // LINE_NUMERATOR_COEF_PREFIX "+7.036708E-9" // LINE_NUMERATOR_COEF_PREFIX "-3.905794E-7" // LINE_NUMERATOR_COEF_PREFIX "-6.374024E-4" // LINE_NUMERATOR_COEF_PREFIX "+3.272871E-3" // LINE_NUMERATOR_COEF_PREFIX "-3.38456E-14" // LINE_NUMERATOR_COEF_PREFIX "-7.23340E-11" // LINE_NUMERATOR_COEF_PREFIX "-4.082647E-7" // LINE_NUMERATOR_COEF_PREFIX "+2.818481E-7" // LINE_NUMERATOR_COEF_PREFIX "-1.21567E-13" // LINE_NUMERATOR_COEF_PREFIX "+2.192819E-6" // LINE_NUMERATOR_COEF_PREFIX "-1.531184E-6" // LINE_NUMERATOR_COEF_PREFIX "+3.76793E-12" // LINE_NUMERATOR_COEF_PREFIX "-2.47717E-10" // LINE_NUMERATOR_COEF_PREFIX "+2.83224E-10" // LINE_NUMERATOR_COEF_PREFIX "+9.28724E-15" // LINE_NUMERATOR_COEF_PREFIX "+1.000000E+0" // LINE_DENOMINATOR_COEF_PREFIX "+6.416136E-4" // LINE_DENOMINATOR_COEF_PREFIX "-3.216630E-3" // LINE_DENOMINATOR_COEF_PREFIX "+3.835487E-7" // LINE_DENOMINATOR_COEF_PREFIX "-2.931790E-7" // LINE_DENOMINATOR_COEF_PREFIX "+6.94669E-11" // LINE_DENOMINATOR_COEF_PREFIX "-2.79189E-10" // LINE_DENOMINATOR_COEF_PREFIX "-4.228677E-7" // LINE_DENOMINATOR_COEF_PREFIX "+1.511759E-6" // LINE_DENOMINATOR_COEF_PREFIX "-3.68835E-12" // LINE_DENOMINATOR_COEF_PREFIX "+2.38470E-14" // LINE_DENOMINATOR_COEF_PREFIX "-7.25739E-11" // LINE_DENOMINATOR_COEF_PREFIX "+5.28938E-11" // LINE_DENOMINATOR_COEF_PREFIX "-4.96651E-15" // LINE_DENOMINATOR_COEF_PREFIX "+5.10645E-10" // LINE_DENOMINATOR_COEF_PREFIX "-2.11044E-12" // LINE_DENOMINATOR_COEF_PREFIX "+5.46322E-14" // LINE_DENOMINATOR_COEF_PREFIX "-4.30517E-14" // LINE_DENOMINATOR_COEF_PREFIX "-3.21303E-14" // LINE_DENOMINATOR_COEF_PREFIX "+3.33432E-14" // LINE_DENOMINATOR_COEF_PREFIX "-4.111796E-4" // SAMPLE_NUMERATOR_COEF_PREFIX "+9.952671E-1" // SAMPLE_NUMERATOR_COEF_PREFIX "+5.539122E-3" // SAMPLE_NUMERATOR_COEF_PREFIX "-1.57700E-10" // SAMPLE_NUMERATOR_COEF_PREFIX "-3.589757E-3" // SAMPLE_NUMERATOR_COEF_PREFIX "+3.817335E-7" // SAMPLE_NUMERATOR_COEF_PREFIX "+2.124194E-9" // SAMPLE_NUMERATOR_COEF_PREFIX "+6.340649E-4" // SAMPLE_NUMERATOR_COEF_PREFIX "-1.531497E-5" // SAMPLE_NUMERATOR_COEF_PREFIX "+1.35346E-14" // SAMPLE_NUMERATOR_COEF_PREFIX "-4.27781E-10" // SAMPLE_NUMERATOR_COEF_PREFIX "-3.173940E-7" // SAMPLE_NUMERATOR_COEF_PREFIX "+2.588437E-6" // SAMPLE_NUMERATOR_COEF_PREFIX "-3.67806E-12" // SAMPLE_NUMERATOR_COEF_PREFIX "-5.165706E-7" // SAMPLE_NUMERATOR_COEF_PREFIX "+1.80431E-11" // SAMPLE_NUMERATOR_COEF_PREFIX "-1.27129E-14" // SAMPLE_NUMERATOR_COEF_PREFIX "+6.73947E-11" // SAMPLE_NUMERATOR_COEF_PREFIX "-6.15359E-13" // SAMPLE_NUMERATOR_COEF_PREFIX "+4.17329E-15" // SAMPLE_NUMERATOR_COEF_PREFIX "+1.000000E+0" // SAMPLE_DENOMINATOR_COEF_PREFIX "+6.416136E-4" // SAMPLE_DENOMINATOR_COEF_PREFIX "-3.216630E-3" // SAMPLE_DENOMINATOR_COEF_PREFIX "+3.835487E-7" // SAMPLE_DENOMINATOR_COEF_PREFIX "-2.931790E-7" // SAMPLE_DENOMINATOR_COEF_PREFIX "+6.94669E-11" // SAMPLE_DENOMINATOR_COEF_PREFIX "-2.79189E-10" // SAMPLE_DENOMINATOR_COEF_PREFIX "-4.228677E-7" // SAMPLE_DENOMINATOR_COEF_PREFIX "+1.511759E-6" // SAMPLE_DENOMINATOR_COEF_PREFIX "-3.68835E-12" // SAMPLE_DENOMINATOR_COEF_PREFIX "+2.38470E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX "-7.25739E-11" // SAMPLE_DENOMINATOR_COEF_PREFIX "+5.28938E-11" // SAMPLE_DENOMINATOR_COEF_PREFIX "-4.96651E-15" // SAMPLE_DENOMINATOR_COEF_PREFIX "+5.10645E-10" // SAMPLE_DENOMINATOR_COEF_PREFIX "-2.11044E-12" // SAMPLE_DENOMINATOR_COEF_PREFIX "+5.46322E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX "-4.30517E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX "-3.21303E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX "+3.33432E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX ); static const string data_error4( "1" // SUCCESS "0128.03" // ERR_BIAS "0000.50" // ERR_RAND "0255.6" // LINE_OFFSET // ERROR floating point in int field "01827" // SAMP_OFFSET "+33.5812" // LAT_OFFSET "-112.0370" // LONG_OFFSET "+0477" // HEIGHT_OFFSET "003716" // LINE_SCALE "06841" // SAMP_SCALE "+00.0341" // LAT_SCALE "+000.0734" // LONG_SCALE "+0162" // HEIGHT_SCALE "+6.267838E-4" // LINE_NUMERATOR_COEF_PREFIX "+1.834668E-2" // LINE_NUMERATOR_COEF_PREFIX "-1.018332E+0" // LINE_NUMERATOR_COEF_PREFIX "+2.40411E-10" // LINE_NUMERATOR_COEF_PREFIX "-7.031540E-4" // LINE_NUMERATOR_COEF_PREFIX "+7.036708E-9" // LINE_NUMERATOR_COEF_PREFIX "-3.905794E-7" // LINE_NUMERATOR_COEF_PREFIX "-6.374024E-4" // LINE_NUMERATOR_COEF_PREFIX "+3.272871E-3" // LINE_NUMERATOR_COEF_PREFIX "-3.38456E-14" // LINE_NUMERATOR_COEF_PREFIX "-7.23340E-11" // LINE_NUMERATOR_COEF_PREFIX "-4.082647E-7" // LINE_NUMERATOR_COEF_PREFIX "+2.818481E-7" // LINE_NUMERATOR_COEF_PREFIX "-1.21567E-13" // LINE_NUMERATOR_COEF_PREFIX "+2.192819E-6" // LINE_NUMERATOR_COEF_PREFIX "-1.531184E-6" // LINE_NUMERATOR_COEF_PREFIX "+3.76793E-12" // LINE_NUMERATOR_COEF_PREFIX "-2.47717E-10" // LINE_NUMERATOR_COEF_PREFIX "+2.83224E-10" // LINE_NUMERATOR_COEF_PREFIX "+9.28724E-15" // LINE_NUMERATOR_COEF_PREFIX "+1.000000E+0" // LINE_DENOMINATOR_COEF_PREFIX "+6.416136E-4" // LINE_DENOMINATOR_COEF_PREFIX "-3.216630E-3" // LINE_DENOMINATOR_COEF_PREFIX "+3.835487E-7" // LINE_DENOMINATOR_COEF_PREFIX "-2.931790E-7" // LINE_DENOMINATOR_COEF_PREFIX "+6.94669E-11" // LINE_DENOMINATOR_COEF_PREFIX "-2.79189E-10" // LINE_DENOMINATOR_COEF_PREFIX "-4.228677E-7" // LINE_DENOMINATOR_COEF_PREFIX "+1.511759E-6" // LINE_DENOMINATOR_COEF_PREFIX "-3.68835E-12" // LINE_DENOMINATOR_COEF_PREFIX "+2.38470E-14" // LINE_DENOMINATOR_COEF_PREFIX "-7.25739E-11" // LINE_DENOMINATOR_COEF_PREFIX "+5.28938E-11" // LINE_DENOMINATOR_COEF_PREFIX "-4.96651E-15" // LINE_DENOMINATOR_COEF_PREFIX "+5.10645E-10" // LINE_DENOMINATOR_COEF_PREFIX "-2.11044E-12" // LINE_DENOMINATOR_COEF_PREFIX "+5.46322E-14" // LINE_DENOMINATOR_COEF_PREFIX "-4.30517E-14" // LINE_DENOMINATOR_COEF_PREFIX "-3.21303E-14" // LINE_DENOMINATOR_COEF_PREFIX "+3.33432E-14" // LINE_DENOMINATOR_COEF_PREFIX "-4.111796E-4" // SAMPLE_NUMERATOR_COEF_PREFIX "+9.952671E-1" // SAMPLE_NUMERATOR_COEF_PREFIX "+5.539122E-3" // SAMPLE_NUMERATOR_COEF_PREFIX "-1.57700E-10" // SAMPLE_NUMERATOR_COEF_PREFIX "-3.589757E-3" // SAMPLE_NUMERATOR_COEF_PREFIX "+3.817335E-7" // SAMPLE_NUMERATOR_COEF_PREFIX "+2.124194E-9" // SAMPLE_NUMERATOR_COEF_PREFIX "+6.340649E-4" // SAMPLE_NUMERATOR_COEF_PREFIX "-1.531497E-5" // SAMPLE_NUMERATOR_COEF_PREFIX "+1.35346E-14" // SAMPLE_NUMERATOR_COEF_PREFIX "-4.27781E-10" // SAMPLE_NUMERATOR_COEF_PREFIX "-3.173940E-7" // SAMPLE_NUMERATOR_COEF_PREFIX "+2.588437E-6" // SAMPLE_NUMERATOR_COEF_PREFIX "-3.67806E-12" // SAMPLE_NUMERATOR_COEF_PREFIX "-5.165706E-7" // SAMPLE_NUMERATOR_COEF_PREFIX "+1.80431E-11" // SAMPLE_NUMERATOR_COEF_PREFIX "-1.27129E-14" // SAMPLE_NUMERATOR_COEF_PREFIX "+6.73947E-11" // SAMPLE_NUMERATOR_COEF_PREFIX "-6.15359E-13" // SAMPLE_NUMERATOR_COEF_PREFIX "+4.17329E-15" // SAMPLE_NUMERATOR_COEF_PREFIX "+1.000000E+0" // SAMPLE_DENOMINATOR_COEF_PREFIX "+6.416136E-4" // SAMPLE_DENOMINATOR_COEF_PREFIX "-3.216630E-3" // SAMPLE_DENOMINATOR_COEF_PREFIX "+3.835487E-7" // SAMPLE_DENOMINATOR_COEF_PREFIX "-2.931790E-7" // SAMPLE_DENOMINATOR_COEF_PREFIX "+6.94669E-11" // SAMPLE_DENOMINATOR_COEF_PREFIX "-2.79189E-10" // SAMPLE_DENOMINATOR_COEF_PREFIX "-4.228677E-7" // SAMPLE_DENOMINATOR_COEF_PREFIX "+1.511759E-6" // SAMPLE_DENOMINATOR_COEF_PREFIX "-3.68835E-12" // SAMPLE_DENOMINATOR_COEF_PREFIX "+2.38470E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX "-7.25739E-11" // SAMPLE_DENOMINATOR_COEF_PREFIX "+5.28938E-11" // SAMPLE_DENOMINATOR_COEF_PREFIX "-4.96651E-15" // SAMPLE_DENOMINATOR_COEF_PREFIX "+5.10645E-10" // SAMPLE_DENOMINATOR_COEF_PREFIX "-2.11044E-12" // SAMPLE_DENOMINATOR_COEF_PREFIX "+5.46322E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX "-4.30517E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX "-3.21303E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX "+3.33432E-14" // SAMPLE_DENOMINATOR_COEF_PREFIX ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } // Start of test 4 - false parser test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); if (success) { failure << "Error: Negative test: LINE_OFFSET floating point in int field failed: did not return false\n"; return false; } treDO->clear(); return (status != INVALID); }
bool Nitf::SectgaParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "123456789012" // SEC_ID "123456789012345" // SEC_BE "0" // RESERVED001 ); static const string data_error4( "123456789012" // SEC_ID "123456789012345" // SEC_BE " " // RESERVED001 ERROR: must == "0" ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } treDO->clear(); // Start of test 4 - SUSPECT test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); status = INVALID; if (success) { failure << "Error: Negative test with data out of range failed: did not return false\n"; treDO->clear(); return false; } treDO->clear(); return true; }
bool Nitf::PatchbParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "0999" // PAT_NO "0" // LAST_PAT_FLAG "1234567" // LNSTRT "1234567" // LNSTOP "12345" // AZL "12345" // NVL "681" // FVL "43000" // NPIXEL "43000" // FVPIX "512" // FRAME "86399.99" // UTC "359.999" // SHEAD "31.0000" // GRAVITY "09999" // INS_V_NC "+9999" // INS_V_EC "-9999" // INS_V_DC "+80.0000" // OFFLAT "-80.0000" // OFFLONG "359" // TRACK "120.00" // GSWEEP "1.000000" // SHEAR "000001" // BATCH_NO ); static const string data_error4( "0999" // PAT_NO "0" // LAST_PAT_FLAG "0000000" // LNSTRT "1234567" // LNSTOP "12345" // AZL "12345" // NVL "681" // FVL "43000" // NPIXEL "43000" // FVPIX "512" // FRAME "86399.99" // UTC "359.999" // SHEAD "31.0000" // GRAVITY "09999" // INS_V_NC "+9999" // INS_V_EC "-9999" // INS_V_DC "+80.0000" // OFFLAT "-80.0000" // OFFLONG "359" // TRACK "120.00" // GSWEEP "1.000000" // SHEAR "000001" // BATCH_NO ); static const string data5( "0999" // PAT_NO "0" // LAST_PAT_FLAG - set to spaces "1234567" // LNSTRT "1234567" // LNSTOP "12345" // AZL " " // NVL - set to spaces " " // FVL - set to spaces "43000" // NPIXEL "43000" // FVPIX " " // FRAME - set to spaces "86399.99" // UTC "359.999" // SHEAD " " // GRAVITY - set to spaces "+9999" // INS_V_NC "+9999" // INS_V_EC "-9999" // INS_V_DC " " // OFFLAT - set to spaces " " // OFFLONG - set to spaces "359" // TRACK "120.00" // GSWEEP " " // SHEAR - set to spaces " " // BATCH_NO - set to spaces ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } treDO->clear(); // Start of test 4 - SUSPECT test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); status = INVALID; if (success) { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != SUSPECT) { failure << "Error: Negative test with LNSTRT = data out of range failed: did not return SUSPECT\n"; failure << tmpStream.str(); treDO->clear(); return false; } status = VALID; } treDO->clear(); // Start of test 5 - blanks in optional fields errorMessage.clear(); stringstream input5(data5); success = toDynamicObject(input5, input5.str().size(), *treDO.get(), errorMessage); if (success == false) { failure << errorMessage; return false; } else { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != VALID) { failure << "Error: Test with blank data failed: did not return VALID\n"; failure << tmpStream.str(); return false; } tmpStream.str(string()); success = fromDynamicObject(*treDO.get(), tmpStream, numBytes, errorMessage); if (success == false) { failure << errorMessage; return false; } if (input5.str() != tmpStream.str()) { failure << "Error: Test with blank data failed: fromDynamicObject returned an unexpected value\n"; return false; } } treDO->clear(); return true; }
bool Nitf::StdidcParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "20000108180902" // ACQUISITION_DATE "ABCXYZ_0123456" // MISSION "01" // PASS "528" // OP_NUM "AA" // START_SEGMENT "00" // REPRO_NUM "000" // REPLAY_REGEN " " // BLANK_FILL "001" // START_COLUMN "00001" // START_ROW "AA" // END_SEGMENT "012" // END_COLUMN "00027" // END_ROW "US" // COUNTRY "0404" // WAC "3251N11715W" // LOCATION " " // RESERVED2 " " // RESERVED3 ); static const string data_error4( "20000108180902" // ACQUISITION_DATE "ABCXYZ_0123456" // MISSION "01" // PASS "528" // OP_NUM "AA" // START_SEGMENT "00" // REPRO_NUM "000" // REPLAY_REGEN " " // BLANK_FILL "001" // START_COLUMN "00001" // START_ROW "AA" // END_SEGMENT "012" // END_COLUMN "00027" // END_ROW "US" // COUNTRY "1867" // WAC - max == 1866 "3251N11715W" // LOCATION " " // RESERVED2 " " // RESERVED3 ); static const string data5( "20000108180902" // ACQUISITION_DATE "ABCXYZ_0123456" // MISSION "01" // PASS "528" // OP_NUM "AA" // START_SEGMENT "00" // REPRO_NUM "000" // REPLAY_REGEN " " // BLANK_FILL "001" // START_COLUMN "00001" // START_ROW "AA" // END_SEGMENT "012" // END_COLUMN "00027" // END_ROW "US" // COUNTRY " " // WAC - set to spaces "3251N11715W" // LOCATION " " // RESERVED2 " " // RESERVED3 ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } treDO->clear(); // Start of test 4 - SUSPECT test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); status = INVALID; if (success) { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != SUSPECT) { failure << "Error: Negative test with data out of range failed: did not return SUSPECT\n"; failure << tmpStream.str(); treDO->clear(); return false; } status = VALID; } treDO->clear(); // Start of test 5 - blanks in optional fields errorMessage.clear(); stringstream input5(data5); success = toDynamicObject(input5, input5.str().size(), *treDO.get(), errorMessage); if (success == false) { failure << errorMessage; return false; } else { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != VALID) { failure << "Error: Test with blank data failed: did not return VALID\n"; failure << tmpStream.str(); return false; } tmpStream.str(string()); success = fromDynamicObject(*treDO.get(), tmpStream, numBytes, errorMessage); if (success == false) { failure << errorMessage; return false; } if (input5.str() != tmpStream.str()) { failure << "Error: Test with blank data failed: fromDynamicObject returned an unexpected value\n"; return false; } } treDO->clear(); return true; }
bool Nitf::AimidbParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "20010911081530" // ACQUISITION_DATE "AA01" // MISSION_NO "Mission-ID" // MISSION_IDENTIFICATION "A1" // FLIGHT_NO "123" // OP_NUM "AZ" // START_SEGMENT "01" // REPRO_NUM "G01" // REPLAY " " // RESERVED1 "099" // START_TILE_COLUMN "12345" // START_TILE_ROW "AZ" // END_SEGMENT "099" // END_TILE_COLUMN "12345" // END_TILE_ROW "US" // COUNTRY " " // RESERVED2 "8800X10000Y" // LOCATION " " // RESERVED3 ); static const string data_error4( "20010911081530" // ACQUISITION_DATE "AA01" // MISSION_NO "Mission-ID" // MISSION_IDENTIFICATION "A1" // FLIGHT_NO "123" // OP_NUM "AZ" // START_SEGMENT "01" // REPRO_NUM "G01" // REPLAY " " // RESERVED1 "000" // START_TILE_COLUMN // ERROR: Data out of range "12345" // START_TILE_ROW "AZ" // END_SEGMENT "099" // END_TILE_COLUMN "12345" // END_TILE_ROW "US" // COUNTRY " " // RESERVED2 "8800X10000Y" // LOCATION " " // RESERVED3 ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } treDO->clear(); // Start of test 4 - SUSPECT test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); if (success) { std::stringstream tmpStream; status = this->isTreValid(*treDO.get(), tmpStream); // This test should return SUSPECT if (status != SUSPECT) { failure << "---Negative test failed: START_TILE_COLUMN should have returned SUSPECT\n"; failure << tmpStream.str(); treDO->clear(); return false; } } treDO->clear(); return (status != INVALID); }
bool Nitf::MensrbParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "333030.1234X1023030.1234Y" // ACFT_LOC "123.45" // ACFT_LOC_ACCY "123456" // ACFT_ALT "333030.1234X1023030.1234Y" // RP_LOC "999.99" // RP_LOC_ACCY "-01000" // RP_ELEV "-9999.9" // OF_PC_R "+9999.9" // OF_PC_A "1.00000" // COSGRZ "3000000" // RGCRP "L" // RLMAP "99999" // RP_ROW "00001" // RP_COL "0.50000000" // C_R_NC "-0.5000000" // C_R_EC "0.50000000" // C_R_DC "-0.500000" // C_AZ_NC "0.5000000" // C_AZ_EC "-0.500000" // C_AZ_DC "0.5000000" // C_AL_NC "-0.500000" // C_AL_EC "0.5000000" // C_AL_DC "001" // TOTAL_TILES_COLS "00001" // TOTAL_TILES_ROWS ); static const string data_error4( "333030.1234X1023030.1234Y" // ACFT_LOC "123.45" // ACFT_LOC_ACCY "123456" // ACFT_ALT "333030.1234X1023030.1234Y" // RP_LOC "999.99" // RP_LOC_ACCY "-02000" // RP_ELEV // ERROR: data out of range "-9999.9" // OF_PC_R "+9999.9" // OF_PC_A "1.00000" // COSGRZ "3000000" // RGCRP "L" // RLMAP "99999" // RP_ROW "00001" // RP_COL "0.50000000" // C_R_NC "-0.5000000" // C_R_EC "0.50000000" // C_R_DC "-0.500000" // C_AZ_NC "0.5000000" // C_AZ_EC "-0.500000" // C_AZ_DC "0.5000000" // C_AL_NC "-0.500000" // C_AL_EC "0.5000000" // C_AL_DC "001" // TOTAL_TILES_COLS "00001" // TOTAL_TILES_ROWS ); static const string data5( "333030.1234X1023030.1234Y" // ACFT_LOC "123.45" // ACFT_LOC_ACCY "123456" // ACFT_ALT "333030.1234X1023030.1234Y" // RP_LOC "999.99" // RP_LOC_ACCY "-01000" // RP_ELEV " " // OF_PC_R - set to spaces " " // OF_PC_A - set to spaces "1.00000" // COSGRZ "3000000" // RGCRP "L" // RLMAP " " // RP_ROW - set to spaces " " // RP_COL - set to spaces "+0.5000000" // C_R_NC "-0.5000000" // C_R_EC "+0.5000000" // C_R_DC "-0.500000" // C_AZ_NC "+0.500000" // C_AZ_EC "-0.500000" // C_AZ_DC "+0.500000" // C_AL_NC "-0.500000" // C_AL_EC "+0.500000" // C_AL_DC " " // TOTAL_TILES_COLS - set to spaces " " // TOTAL_TILES_ROWS - set to spaces ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } treDO->clear(); // Start of test 4 - SUSPECT test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); status = INVALID; if (success) { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != SUSPECT) { failure << "Error: Negative test with RP_ELEV = data out of range failed: did not return SUSPECT\n"; failure << tmpStream.str(); treDO->clear(); return false; } status = VALID; } treDO->clear(); // Start of test 5 - blanks in optional fields errorMessage.clear(); stringstream input5(data5); success = toDynamicObject(input5, input5.str().size(), *treDO.get(), errorMessage); if (success == false) { failure << errorMessage; return false; } else { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != VALID) { failure << "Error: Test with blank data failed: did not return VALID\n"; failure << tmpStream.str(); return false; } tmpStream.str(string()); success = fromDynamicObject(*treDO.get(), tmpStream, numBytes, errorMessage); if (success == false) { failure << errorMessage; return false; } if (input5.str() != tmpStream.str()) { failure << "Error: Test with blank data failed: fromDynamicObject returned an unexpected value\n"; return false; } } treDO->clear(); return true; }
bool Nitf::BandsaParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "99.9999" // ROW_SPACING "m" // ROW_SPACING_UNITS "9999.99" // COL_SPACING "r" // COL_SPACING_UNITS "899.99" // FOCAL_LENGTH "0003" // BANDCOUNT "00.01" // BANDPEAK "19.99" // BANDLBOUND "00.01" // BANDUBOUND "19.99" // BANDWIDTH "0000.1" // BANDCALDRK "00.01" // BANDCALINC "000.1" // BANDRESP "999.9" // BANDASD "99.99" // BANDGSD "00.01" // BANDPEAK "19.99" // BANDLBOUND "00.01" // BANDUBOUND "19.99" // BANDWIDTH "0000.1" // BANDCALDRK "00.01" // BANDCALINC "000.1" // BANDRESP "999.9" // BANDASD "99.99" // BANDGSD "00.01" // BANDPEAK "19.99" // BANDLBOUND "00.01" // BANDUBOUND "19.99" // BANDWIDTH "0000.1" // BANDCALDRK "00.01" // BANDCALINC "000.1" // BANDRESP "999.9" // BANDASD "99.99" // BANDGSD ); static const string data_error4( "99.9999" // ROW_SPACING "m" // ROW_SPACING_UNITS "9999.99" // COL_SPACING "r" // COL_SPACING_UNITS "899.99" // FOCAL_LENGTH "0003" // BANDCOUNT "00.00" // BANDPEAK Error min value = 00.01 "20.00" // BANDLBOUND Error max value = 19.99 "00.01" // BANDUBOUND "19.99" // BANDWIDTH "0000.1" // BANDCALDRK "00.01" // BANDCALINC "000.1" // BANDRESP "999.9" // BANDASD "99.99" // BANDGSD "00.01" // BANDPEAK "19.99" // BANDLBOUND "00.01" // BANDUBOUND "19.99" // BANDWIDTH "0000.1" // BANDCALDRK "00.01" // BANDCALINC "000.1" // BANDRESP "999.9" // BANDASD "99.99" // BANDGSD "00.01" // BANDPEAK "19.99" // BANDLBOUND "00.01" // BANDUBOUND "19.99" // BANDWIDTH "0000.1" // BANDCALDRK "00.01" // BANDCALINC "000.1" // BANDRESP "999.9" // BANDASD "99.99" // BANDGSD ); static const string data5( "99.9999" // ROW_SPACING "m" // ROW_SPACING_UNITS "9999.99" // COL_SPACING "r" // COL_SPACING_UNITS "899.99" // FOCAL_LENGTH "0003" // BANDCOUNT " " // BANDPEAK - set to spaces " " // BANDLBOUND - set to spaces " " // BANDUBOUND - set to spaces " " // BANDWIDTH - set to spaces " " // BANDCALDRK - set to spaces " " // BANDCALINC - set to spaces " " // BANDRESP - set to spaces " " // BANDASD - set to spaces " " // BANDGSD - set to spaces "00.01" // BANDPEAK "19.99" // BANDLBOUND "00.01" // BANDUBOUND "19.99" // BANDWIDTH "0000.1" // BANDCALDRK "00.01" // BANDCALINC "000.1" // BANDRESP "999.9" // BANDASD "99.99" // BANDGSD "00.01" // BANDPEAK "19.99" // BANDLBOUND "00.01" // BANDUBOUND "19.99" // BANDWIDTH "0000.1" // BANDCALDRK "00.01" // BANDCALINC "000.1" // BANDRESP "999.9" // BANDASD "99.99" // BANDGSD ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } treDO->clear(); // Start of test 4 - SUSPECT test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); status = INVALID; if (success) { std::stringstream tmpStream; status = this->isTreValid(*treDO.get(), tmpStream); if (status != SUSPECT) { failure << "Error: Negative test with data out of range failed: did not return SUSPECT\n"; failure << tmpStream.str(); treDO->clear(); return false; } status = VALID; } treDO->clear(); // Start of test 5 - blanks in optional fields errorMessage.clear(); stringstream input5(data5); success = toDynamicObject(input5, input5.str().size(), *treDO.get(), errorMessage); if (success == false) { failure << errorMessage; return false; } else { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != VALID) { failure << "Error: Test with blank data failed: did not return VALID\n"; failure << tmpStream.str(); return false; } tmpStream.str(string()); success = fromDynamicObject(*treDO.get(), tmpStream, numBytes, errorMessage); if (success == false) { failure << errorMessage; return false; } if (input5.str() != tmpStream.str()) { failure << "Error: Test with blank data failed: fromDynamicObject returned an unexpected value\n"; return false; } } treDO->clear(); return true; }
bool Nitf::Use00aParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "270" //ANGLE_TO_NORTH "000.0" // MEAN_GSD " " // RESERVED1 "99999" // DYNAMIC_RANGE " " // RESERVED2 " " // RESERVED3 " " // RESERVED4 "17.04" // OBL_ANG "-90.00" // ROLL_ANG " " // RESERVED5 " " // RESERVED6 " " // RESERVED7 " " // RESERVED8 " " // RESERVED9 " " // RESERVED10 " " // RESERVED11 "00" // N_REF "00001" // REV_NUM "001" // N_SEG "999999" // MAX_LP_SEG " " // RESERVED12 " " // RESERVED13 "+29.5" // SUN_EL "151.5" // SUN_AZ ); static const string data_error4( "270" // ANGLE_TO_NORTH "000.0" // MEAN_GSD " " // RESERVED1 " " // DYNAMIC_RANGE " " // RESERVED2 " " // RESERVED3 " " // RESERVED4 "90.04" // OBL_ANG - error: needs to be a number from [0, 90] " " // ROLL_ANG " " // RESERVED5 " " // RESERVED6 " " // RESERVED7 " " // RESERVED8 " " // RESERVED9 " " // RESERVED10 " " // RESERVED11 "00" // N_REF "00001" // REV_NUM "001" // N_SEG " " // MAX_LP_SEG " " // RESERVED12 " " // RESERVED13 "+29.5" // SUN_EL "151.5" // SUN_AZ ); static const string data5( "270" // ANGLE_TO_NORTH "000.0" // MEAN_GSD " " // RESERVED1 " " // DYNAMIC_RANGE - set to all spaces " " // RESERVED2 " " // RESERVED3 " " // RESERVED4 " " // OBL_ANG - set to all spaces " " // ROLL_ANG - set to all spaces " " // RESERVED5 " " // RESERVED6 " " // RESERVED7 " " // RESERVED8 " " // RESERVED9 " " // RESERVED10 " " // RESERVED11 "00" // N_REF "00001" // REV_NUM "001" // N_SEG " " // MAX_LP_SEG - set to all spaces " " // RESERVED12 " " // RESERVED13 "+29.5" // SUN_EL "151.5" // SUN_AZ ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } treDO->clear(); // Start of test 4 - SUSPECT test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); status = INVALID; if (success == true) { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != SUSPECT) { failure << "Error: Negative test with data out of range failed: did not return SUSPECT\n"; failure << tmpStream.str(); treDO->clear(); return false; } status = VALID; } treDO->clear(); // Start of test 5 - blanks in optional fields errorMessage.clear(); stringstream input5(data5); success = toDynamicObject(input5, input5.str().size(), *treDO.get(), errorMessage); if (success == false) { failure << errorMessage; return false; } else { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != VALID) { failure << "Error: Test with blank data failed: did not return VALID\n"; failure << tmpStream.str(); return false; } tmpStream.str(string()); success = fromDynamicObject(*treDO.get(), tmpStream, numBytes, errorMessage); if (success == false) { failure << errorMessage; return false; } if (input5.str() != tmpStream.str()) { failure << "Error: Test with blank data failed: fromDynamicObject returned an unexpected value\n"; return false; } } treDO->clear(); return true; }
bool Nitf::SensraParser::runAllTests(Progress* pProgress, ostream& failure) { static const string data( "99999999" // REF_ROW "99999999" // REF_COL "abcdef" // SENSOR_MODEL "-45" // SENSOR_MOUNT "+33.653456-084.423456" // SENSOR_LOC "M" // SENSOR_ALT_SOURCE "-01000" // SENSOR_ALT "m" // SENSOR_ALT_UNIT "99000" // SENSOR_AGL "-90.000" // SENSOR_PITCH "-180.000" // SENSOR_ROLL "-180.000" // SENSOR_YAW "-90.000" // PLATFORM_PITCH "-180.000" // PLATFORM_ROLL "359.9" // PLATFORM_HDG "N" // GROUND_SPD_SOURCE "9999.9" // GROUND_SPD "k" // GRND_SPD_UNIT "359.9" // GROUND_TRACK "-9999" // VERT_VEL "m" // VERT_VEL_UNIT "9999" // SWATH_FRAMES "9999" // NUM_SWATHS "999" // SPOT_NUM ); static const string data_error4( "99999999" // REF_ROW "99999999" // REF_COL "abcdef" // SENSOR_MODEL "-45" // SENSOR_MOUNT "+33.653456-084.423456" // SENSOR_LOC "M" // SENSOR_ALT_SOURCE "-01000" // SENSOR_ALT "m" // SENSOR_ALT_UNIT "99000" // SENSOR_AGL "-90.000" // SENSOR_PITCH "-180.111" // SENSOR_ROLL min == -180.000 "-180.000" // SENSOR_YAW "-90.000" // PLATFORM_PITCH "-180.000" // PLATFORM_ROLL "359.9" // PLATFORM_HDG "N" // GROUND_SPD_SOURCE "9999.9" // GROUND_SPD "k" // GRND_SPD_UNIT "359.9" // GROUND_TRACK "-9999" // VERT_VEL "m" // VERT_VEL_UNIT "9999" // SWATH_FRAMES "9999" // NUM_SWATHS "999" // SPOT_NUM ); FactoryResource<DynamicObject> treDO; size_t numBytes(0); istringstream input(data); numBytes = data.size(); string errorMessage; bool success = toDynamicObject(input, numBytes, *treDO.get(), errorMessage); if (!errorMessage.empty()) { failure << errorMessage << endl; errorMessage.clear(); } TreState status(INVALID); if (success) { status = isTreValid(*treDO.get(), failure); } treDO->clear(); if (status == INVALID) { return false; } // Start of test 2 - Negative test: 1 extra byte in input stream stringstream input2(data); input2 << "1"; // Add one more byte; valid as alphanumberic or numeric numBytes = data.size() + 1; success = toDynamicObject(input2, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 extra byte failed\n"; treDO->clear(); return false; } // start of test 3 - Negative test: 1 byte short in input stream string negdata3(data); // data for test 3 not the 3rd data set negdata3.resize(data.size()-1); stringstream input3(negdata3); numBytes = negdata3.size(); success = toDynamicObject(input3, numBytes, *treDO.get(), errorMessage); if (success == true) // negative test so success must == false. { failure << "Error: Negative test of 1 byte short failed\n"; treDO->clear(); return false; } treDO->clear(); // Start of test 4 - SUSPECT test stringstream input4(data_error4); numBytes = input4.str().size(); success = toDynamicObject(input4, numBytes, *treDO.get(), errorMessage); status = INVALID; if (success) { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != SUSPECT) { failure << "Error: Negative test with data out of range failed: did not return SUSPECT\n"; failure << tmpStream.str(); treDO->clear(); return false; } status = VALID; } treDO->clear(); // Start of test 5 - blanks in all fields (this is permitted by STDI-0002) errorMessage.clear(); string data5(data.length(), ' '); stringstream input5(data5); success = toDynamicObject(input5, input5.str().size(), *treDO.get(), errorMessage); if (success == false) { failure << errorMessage; return false; } else { stringstream tmpStream; status = isTreValid(*treDO.get(), tmpStream); if (status != VALID) { failure << "Error: Test with blank data failed: did not return VALID\n"; failure << tmpStream.str(); return false; } tmpStream.str(string()); success = fromDynamicObject(*treDO.get(), tmpStream, numBytes, errorMessage); if (success == false) { failure << errorMessage; return false; } if (input5.str() != tmpStream.str()) { failure << "Error: Test with blank data failed: fromDynamicObject returned an unexpected value\n"; return false; } } treDO->clear(); return true; }