X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FParseArray.test.cc;h=44b406d6bf25468ad1b3f1a0a6a1159434f7214c;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=b2afcdbdcf9ded9568b7de686d730df4378392ab;hpb=145f6a7d0f3a6aaa77b3625351c952d24cb0b8a1;p=senf.git diff --git a/Packets/ParseArray.test.cc b/Packets/ParseArray.test.cc index b2afcdb..44b406d 100644 --- a/Packets/ParseArray.test.cc +++ b/Packets/ParseArray.test.cc @@ -26,8 +26,7 @@ //#include "ParseArray.test.ih" // Custom includes -#include "ParseArray.hh" -#include "ParseInt.hh" +#include "Packets.hh" #include #include @@ -35,26 +34,63 @@ #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -using namespace senf; +namespace { + struct VoidPacket : public senf::PacketTypeBase + {}; + + struct SomePacketParser : public senf::PacketParserBase + { + SENF_PACKET_PARSER_INIT(SomePacketParser); + + typedef senf::Parse_Array<2,senf::Parse_UInt24> Parse_Array2; + + SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS( + ((Field)( array, Parse_Array2 )) + ((Field)( index, senf::Parse_UInt16 )) ); + }; + + struct SomeOtherParser : public senf::PacketParserBase + { + SENF_PACKET_PARSER_INIT(SomeOtherParser); + + typedef senf::Parse_Array<1,SomePacketParser> Parse_Array1; + + SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS( + ((Field)( fields, Parse_Array1 )) ); + }; +} BOOST_AUTO_UNIT_TEST(parseArray_test) { - unsigned char data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 }; - typedef unsigned char * iterator; - typedef Parse_Array<6,Parse_UInt8<>,iterator> Parse_UInt8Array6; - Parse_UInt8Array6 v (data); - BOOST_CHECK_EQUAL( v[0], 0x00 ); - BOOST_CHECK_EQUAL( v[5], 0x05 ); - BOOST_CHECK_EQUAL( *v.begin(), 0x00 ); - Parse_UInt8Array6::iterator i1 (v.begin()); - Parse_UInt8Array6::iterator i2 (v.begin()); - ++i1; - BOOST_CHECK_EQUAL( *i1, 0x01 ); - BOOST_CHECK_EQUAL( i1[-1], 0x00 ); - BOOST_CHECK_EQUAL( i1-i2, 1 ); - BOOST_CHECK_EQUAL( i2-i1, -1 ); - --i1; - BOOST_CHECK( i1==i2 ); + senf::PacketParserBase::byte data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 }; + senf::PacketInterpreterBase::ptr p (senf::PacketInterpreter::create(data)); + + { + typedef senf::Parse_Array<6,senf::Parse_UInt8> Parse_UInt8Array6; + Parse_UInt8Array6 v (p->data().begin(),&p->data()); + + BOOST_CHECK_EQUAL( v[0], 0x00 ); + BOOST_CHECK_EQUAL( v[5], 0x05 ); + BOOST_CHECK_EQUAL( *v.begin(), 0x00 ); + BOOST_CHECK_EQUAL( std::distance(v.begin(),v.end()), + Parse_UInt8Array6::difference_type(v.size()) ); + BOOST_CHECK_EQUAL( v.size(), 6u ); + Parse_UInt8Array6::iterator i1 (v.begin()); + Parse_UInt8Array6::iterator i2 (v.begin()); + ++i1; + BOOST_CHECK_EQUAL( *i1, 0x01 ); + BOOST_CHECK_EQUAL( i1[-1], 0x00 ); + BOOST_CHECK_EQUAL( i1-i2, 1 ); + BOOST_CHECK_EQUAL( i2-i1, -1 ); + --i1; + BOOST_CHECK( i1==i2 ); + } + + { + SomeOtherParser v (p->data().begin(),&p->data()); + + BOOST_CHECK_THROW( v.fields(), senf::TruncatedPacketException ); + } } ///////////////////////////////cc.e////////////////////////////////////////