Beispiel #1
0
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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
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);
}
Beispiel #6
0
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;
}
Beispiel #8
0
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;
}
Beispiel #9
0
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;
}