X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FVectorParser.test.cc;h=aa554b2e5328627f0d9599deade08deefb705d80;hb=c45c112ae88196ea8da9c5a9efb0e167196744d2;hp=e1f9d2b747eb57ac9dc736205d6a27dc997f3036;hpb=8f1a688cea76f2e76bfa0193dff9c1538929147e;p=senf.git diff --git a/Packets/VectorParser.test.cc b/Packets/VectorParser.test.cc index e1f9d2b..aa554b2 100644 --- a/Packets/VectorParser.test.cc +++ b/Packets/VectorParser.test.cc @@ -20,7 +20,8 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// Unit tests +/** \file + \brief VectorParser unit tests */ //#include "VectorParser.test.hh" //#include "VectorParser.test.ih" @@ -220,10 +221,23 @@ namespace { SENF_PARSER_FINALIZE( TestVectorParser ); }; + + struct TestVectorPacketType + : public senf::PacketTypeBase, + public senf::PacketTypeMixin + { + typedef senf::PacketTypeMixin mixin; + typedef TestVectorParser parser; + + using mixin::nextPacketRange; + using mixin::init; + using mixin::initSize; + }; + typedef senf::ConcretePacket TestVectorPacket; } -BOOST_AUTO_UNIT_TEST(vectorMacro) +BOOST_AUTO_UNIT_TEST(vectorMacro_parse) { unsigned char data[] = { 0x05, // size1 0x04, // size2 @@ -247,6 +261,115 @@ BOOST_AUTO_UNIT_TEST(vectorMacro) BOOST_CHECK_EQUAL( parser.vec2()[1], 0x0D0Eu ); } +BOOST_AUTO_UNIT_TEST(vectorMacro_create) +{ + TestVectorPacket p (TestVectorPacket::create()); + p->dummy() = 0x01020304u; + p->vec1().push_back( 0x0506u); + p->vec1().push_back( 0x0708u); + p->vec1().push_back( 0x090Au); + p->vec2().push_back( 0x0B0Cu); + p->vec2().push_back( 0x0D0Eu); + p.finalizeAll(); + + unsigned char data[] = { + 0x05, // size1 + 0x04, // size2 + 0x01, 0x02, 0x03, 0x04, // dummy + 0x05, 0x06, // vec1[0] + 0x07, 0x08, // vec1[1] + 0x09, 0x0A, // vec1[2] + 0x0B, 0x0C, // vec2[0] + 0x0D, 0x0E }; // vec2[1] + + BOOST_CHECK( equal( p.data().begin(), p.data().end(), data )); +} + +namespace { + + struct TestVectorBaseParser + : public senf::PacketParserBase + { +# include SENF_PARSER() + + SENF_PARSER_PRIVATE_FIELD ( size1 , senf::UInt8Parser ); + SENF_PARSER_FIELD_RO ( size2 , senf::UInt8Parser ); + SENF_PARSER_FIELD ( dummy , senf::UInt32Parser );\ + + SENF_PARSER_FINALIZE( TestVectorBaseParser ); + }; + + struct TestVectorDerivedParser + : public TestVectorBaseParser + { +# include SENF_PARSER() + + SENF_PARSER_INHERIT(TestVectorBaseParser); + + SENF_PARSER_VECTOR ( vec1 , transform(TestTransform, size1) , senf::UInt16Parser ); + SENF_PARSER_VECTOR ( vec2 , bytes(size2) , senf::UInt16Parser ); + + SENF_PARSER_FINALIZE( TestVectorDerivedParser ); + }; + +} + +BOOST_AUTO_UNIT_TEST(vectorMacro_inherit) +{ + unsigned char data[] = { 0x05, // size1 + 0x04, // size2 + 0x01, 0x02, 0x03, 0x04, // dummy + 0x05, 0x06, // vec1[0] + 0x07, 0x08, // vec1[1] + 0x09, 0x0A, // vec1[2] + 0x0B, 0x0C, // vec2[0] + 0x0D, 0x0E }; // vec2[1] + + senf::DataPacket p (senf::DataPacket::create(data)); + TestVectorDerivedParser parser (p.data().begin(), &p.data()); + + BOOST_CHECK_EQUAL( parser.vec1().size(), 3u ); + BOOST_CHECK_EQUAL( parser.vec2().size(), 2u ); + BOOST_CHECK_EQUAL( parser.dummy(), 0x01020304u ); + BOOST_CHECK_EQUAL( parser.vec1()[0], 0x0506u ); + BOOST_CHECK_EQUAL( parser.vec1()[1], 0x0708u ); + BOOST_CHECK_EQUAL( parser.vec1()[2], 0x090Au ); + BOOST_CHECK_EQUAL( parser.vec2()[0], 0x0B0Cu ); + BOOST_CHECK_EQUAL( parser.vec2()[1], 0x0D0Eu ); +} + +namespace { + + struct TestPacketSizeVectorParser + : public senf::PacketParserBase + { +# include SENF_PARSER() + + SENF_PARSER_VECTOR ( vec , packetSize() , senf::UInt16Parser ); + + SENF_PARSER_FINALIZE( TestPacketSizeVectorParser ); + }; + +} + +BOOST_AUTO_UNIT_TEST(vectorMacro_packetSize) +{ + unsigned char data[] = { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26 }; + + senf::DataPacket p (senf::DataPacket::create(data)); + TestPacketSizeVectorParser parser (p.data().begin(), &p.data()); + + { + BOOST_CHECK_EQUAL( parser.vec().size(), 6u ); + BOOST_CHECK_EQUAL( parser.vec()[0], 0x1112u ); + BOOST_CHECK_EQUAL( parser.vec()[1], 0x1314u ); + BOOST_CHECK_EQUAL( parser.vec()[5], 0x2526u ); + } + + // The real functionality is already tested in AuxPolixy.test.cc ... +} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_