X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FParseArray.test.cc;h=8dc19ae1d557c07a7279a9c07a30dc320b1669df;hb=ef0a3583fc76292d631de6a4a5cad4a432351ac8;hp=59a9898fc6113330c66a62e7bf08bc9991aa8a16;hpb=c52cd7d87dbb525c1267aad27391b8b7365dbb57;p=senf.git diff --git a/Packets/ParseArray.test.cc b/Packets/ParseArray.test.cc index 59a9898..8dc19ae 100644 --- a/Packets/ParseArray.test.cc +++ b/Packets/ParseArray.test.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2006 +// Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // Stefan Bund @@ -26,8 +26,10 @@ //#include "ParseArray.test.ih" // Custom includes +#include "PacketInterpreter.hh" #include "ParseArray.hh" #include "ParseInt.hh" +#include "PacketType.hh" #include #include @@ -35,26 +37,63 @@ #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -using namespace satcom::pkf; +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//////////////////////////////////////// @@ -63,5 +102,10 @@ BOOST_AUTO_UNIT_TEST(parseArray_test) // Local Variables: // mode: c++ -// c-file-style: "satcom" +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: