X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FVariantParser.test.cc;h=364349e63aa199c7883debf0f6c34c19a98b4f3c;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=68fbcd779502ae07ced0c4a034e99831ddf48d74;hpb=a1001797645cc68c869ef296f5e9ba13aa8e80c4;p=senf.git diff --git a/Packets/VariantParser.test.cc b/Packets/VariantParser.test.cc index 68fbcd7..364349e 100644 --- a/Packets/VariantParser.test.cc +++ b/Packets/VariantParser.test.cc @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer NETwork research (NET) +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -21,7 +21,7 @@ // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** \file - \brief VariantParser.test unit tests */ + \brief VariantParser unit tests */ //#include "VariantParser.test.hh" //#include "VariantParser.test.ih" @@ -38,11 +38,8 @@ BOOST_AUTO_UNIT_TEST(VariantParser) { typedef senf::ArrayParser<10, senf::UInt8Parser> Array10; - typedef senf::DirectVariantParser< senf::UInt8Parser, 1, senf::detail::VariantParser_IdentityTranslator, - senf::VoidPacketParser, - Array10, - senf:: UInt32Parser - >::parser Variant; + typedef senf::VariantParser< senf::detail::FixedAuxParserPolicy, + boost::mpl::vector > Variant; unsigned char data[] = { 0x01, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B }; @@ -81,7 +78,10 @@ BOOST_AUTO_UNIT_TEST(VariantParser) }; } -namespace { +// We can't use the unnamed namespace here since there's a bug in gcc-4.2.3 which is +// the default version of gcc on ubuntu hardy :-( +// See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34213 +namespace VariantParser_test_cc_anon_namespace { struct SubParser : public senf::PacketParserBase { @@ -96,19 +96,26 @@ namespace { struct TestParser : public senf::PacketParserBase { # include SENF_PARSER() - - SENF_PARSER_SKIP_BITS( 4 ); - SENF_PARSER_PRIVATE_BITFIELD( type_, 4, unsigned ); - SENF_PARSER_PRIVATE_VARIANT( content_, type_, (senf::VoidPacketParser)(SubParser) ); - bool hasContent() const { return content_().variant() == 1; } - void hasContent(bool v) const { if (v) content_().init<1>(); else content_().init<0>(); } - SubParser content() const { return content_().get<1>(); } + SENF_PARSER_BITFIELD_RO( len, 4, unsigned ); + SENF_PARSER_BITFIELD_RO( type, 4, unsigned ); + // just here so the second variant is 'var' + SENF_PARSER_VARIANT( value, len, + (senf::VoidPacketParser) + (senf::UInt8Parser) + (senf::UInt16Parser) + (senf::UInt32Parser) + ); + SENF_PARSER_VARIANT( content_, type, + ( novalue( nocontent, key(10, senf::VoidPacketParser) ) ) + ( id( content, SubParser ) ) + ); SENF_PARSER_FINALIZE(TestParser); }; } +using namespace VariantParser_test_cc_anon_namespace; BOOST_AUTO_UNIT_TEST(VariantParserMacro) { @@ -116,17 +123,21 @@ BOOST_AUTO_UNIT_TEST(VariantParserMacro) { TestParser v (p.data().begin(), & p.data()); - - BOOST_CHECK( ! v.hasContent() ); + v.init(); + BOOST_CHECK( ! v.has_content() ); BOOST_CHECK_EQUAL( senf::bytes(v), 1u ); - v.hasContent(true); + BOOST_CHECK_EQUAL( v.type(), 10u ); + v.init_content(); // Parser invalidated } { TestParser v (p.data().begin(), & p.data()); - BOOST_CHECK( v.hasContent() ); + BOOST_CHECK( v.has_content() ); BOOST_CHECK_EQUAL( senf::bytes(v), 7u ); BOOST_CHECK_EQUAL( v.content().foo(), 0u ); + BOOST_CHECK_EQUAL( v.type(), 1u ); + v.nocontent(); + // Parser invalidated } }