X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FVariantParser.test.cc;h=24c92ec4edbbc8dff0b44552614986e5c1fe993f;hb=6d96e131a920c32fe244f31b6621339a663414c2;hp=9b807e6647520d20b2ae311155e7ce7d0c5c22c3;hpb=f73fa16ed5abdce272ac77f8b8b9ef2b9922c266;p=senf.git diff --git a/Packets/VariantParser.test.cc b/Packets/VariantParser.test.cc index 9b807e6..24c92ec 100644 --- a/Packets/VariantParser.test.cc +++ b/Packets/VariantParser.test.cc @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// 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 @@ -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 }; @@ -96,10 +93,17 @@ namespace { struct TestParser : public senf::PacketParserBase { # include SENF_PARSER() + + struct TestTransform { + typedef unsigned value_type; + static unsigned get(unsigned v) { return v/2; } + static unsigned set(unsigned v) { return 2*v; } + }; SENF_PARSER_SKIP_BITS( 4 ); - SENF_PARSER_PRIVATE_BITFIELD( type_, 4, unsigned ); - SENF_PARSER_PRIVATE_VARIANT( content_, type_, (senf::VoidPacketParser)(SubParser) ); + SENF_PARSER_BITFIELD_RO( type, 4, unsigned ); + SENF_PARSER_PRIVATE_VARIANT( content_, transform(TestTransform, 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>(); } @@ -116,9 +120,9 @@ BOOST_AUTO_UNIT_TEST(VariantParserMacro) { TestParser v (p.data().begin(), & p.data()); - BOOST_CHECK( ! v.hasContent() ); BOOST_CHECK_EQUAL( senf::bytes(v), 1u ); + BOOST_CHECK_EQUAL( v.type(), 0u ); v.hasContent(true); // Parser invalidated } @@ -127,6 +131,7 @@ BOOST_AUTO_UNIT_TEST(VariantParserMacro) BOOST_CHECK( v.hasContent() ); BOOST_CHECK_EQUAL( senf::bytes(v), 7u ); BOOST_CHECK_EQUAL( v.content().foo(), 0u ); + BOOST_CHECK_EQUAL( v.type(), 2u ); } }