X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FListBParser.test.cc;h=d1fc12507f5c57f6c54b1a35f64f4c9d06e91e5b;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=82b6dd353c855da60cd413c976b472c43f0a2acd;hpb=380525e28d9a2a2758dedcb4875b5c3755303344;p=senf.git diff --git a/Packets/ListBParser.test.cc b/Packets/ListBParser.test.cc index 82b6dd3..d1fc125 100644 --- a/Packets/ListBParser.test.cc +++ b/Packets/ListBParser.test.cc @@ -21,7 +21,7 @@ // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** \file - \brief ListBParser.test unit tests */ + \brief ListBParser unit tests */ //#include "ListBParser.test.hh" //#include "ListBParser.test.ih" @@ -239,6 +239,108 @@ BOOST_AUTO_UNIT_TEST(listBytesMacro) } +namespace { + + struct TestPacketSizeList + : public senf::PacketParserBase + { +# include SENF_PARSER() + + SENF_PARSER_LIST ( list, packetSize(), VectorParser ); + + SENF_PARSER_FINALIZE(TestPacketSizeList); + }; + + +} + +BOOST_AUTO_UNIT_TEST(listBytesParser_packetSize) +{ + unsigned char data[] = { 0x01, // list()[0].vec().size() + 0x05, 0x06, // list()[0].vec()[0] + 0x02, // list()[1].vec().size() + 0x07, 0x08, // list()[1].vec()[0] + 0x09, 0x0A, // list()[1].vec()[1] + 0x00, // list()[2].vec().size() + 0x02, // list()[3].vec().size() + 0x0B, 0x0C, // list()[3].vec()[0] + 0x0D, 0x0E, // list()[3].vec()[1] + 0x01, // list()[4].vec().size() + 0x0F, 0x10 }; // list()[4].vec()[0] + + senf::DataPacket p (senf::DataPacket::create(data)); + + { + TestPacketSizeList l (p.data().begin(), &p.data()); + BOOST_CHECK_EQUAL( l.list().size(), 5u ); + + TestPacketSizeList::list_t::container c (l.list()); + TestPacketSizeList::list_t::container::iterator i (c.begin()); + + senf::UInt16Parser::value_type vec0[] = { 0x0506 }; + senf::UInt16Parser::value_type vec1[] = { 0x0708, 0x090A }; + senf::UInt16Parser::value_type vec2[] = {}; + senf::UInt16Parser::value_type vec3[] = { 0x0B0C, 0x0D0E }; + senf::UInt16Parser::value_type vec4[] = { 0x0F10 }; + + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec0, vec0+sizeof(vec0)/sizeof(vec0[0]) ); + ++ i; + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec1, vec1+sizeof(vec1)/sizeof(vec1[0]) ); + ++ i; + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec2, vec2+sizeof(vec2)/sizeof(vec2[0]) ); + ++ i; + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec3, vec3+sizeof(vec3)/sizeof(vec3[0]) ); + + ++ i; + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec4, vec4+sizeof(vec4)/sizeof(vec4[0]) ); + + ++ i; + BOOST_CHECK( i == c.end() ); + + i = c.begin(); + ++i; + TestPacketSizeList::list_t::value_type::vec_t::container v (i->vec()); + v.push_back(0xFEFF); + } + + { + TestPacketSizeList l (p.data().begin(), &p.data()); + BOOST_CHECK_EQUAL( l.list().size(), 5u ); + BOOST_CHECK_EQUAL( l.list().bytes(), p.data().size() ); + + TestPacketSizeList::list_t::container c (l.list()); + TestPacketSizeList::list_t::container::iterator i (c.begin()); + + senf::UInt16Parser::value_type vec0[] = { 0x0506 }; + senf::UInt16Parser::value_type vec1[] = { 0x0708, 0x090A, 0xFEFF }; + senf::UInt16Parser::value_type vec2[] = {}; + senf::UInt16Parser::value_type vec3[] = { 0x0B0C, 0x0D0E }; + senf::UInt16Parser::value_type vec4[] = { 0x0F10 }; + + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec0, vec0+sizeof(vec0)/sizeof(vec0[0]) ); + ++ i; + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec1, vec1+sizeof(vec1)/sizeof(vec1[0]) ); + ++ i; + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec2, vec2+sizeof(vec2)/sizeof(vec2[0]) ); + ++ i; + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec3, vec3+sizeof(vec3)/sizeof(vec3[0]) ); + + ++ i; + BOOST_CHECK_EQUAL_COLLECTIONS( i->vec().begin(), i->vec().end(), + vec4, vec4+sizeof(vec4)/sizeof(vec4[0]) ); + ++ i; + BOOST_CHECK( i == c.end() ); + } +} ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_