#include <boost/test/test_tools.hpp>
#define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
namespace {
senf::Packet packet (FooPacket::create());
BarPacket::createAfter(packet);
+ BOOST_CHECK_THROW( senf::Packet().as<BarPacket>(), senf::WrapException<std::bad_cast> );
+ BOOST_CHECK_THROW( packet.as<BarPacket>(), senf::WrapException<std::bad_cast> );
+
BOOST_REQUIRE( packet );
BOOST_CHECK( packet.next() );
BOOST_CHECK( ! packet.next().next(senf::nothrow) );
BOOST_CHECK( packet.first() == packet );
BOOST_CHECK( packet.last() == packet.next() );
+ BOOST_CHECK( ! packet.is_shared() );
+ {
+ senf::Packet p2 (packet);
+ BOOST_CHECK( packet.is_shared() );
+ BOOST_CHECK( p2.is_shared() );
+ }
+ BOOST_CHECK( ! packet.is_shared() );
+
senf::Packet p2 (packet.next());
BOOST_CHECK( p2 );
+ BOOST_CHECK( packet.is_shared() );
+ BOOST_CHECK( p2.is_shared() );
packet.parseNextAs<FooPacket>();
BOOST_CHECK_EQUAL( packet.size(), 12u );
BOOST_CHECK_EQUAL( packet.next().size(), 8u );
BOOST_CHECK( packet.next().as<FooPacket>() );
p2 = packet.next().clone();
+ BOOST_CHECK( ! packet.is_shared() );
BOOST_REQUIRE( p2 );
packet.next().append( p2 );
BOOST_REQUIRE( packet.next().next() );
BOOST_CHECK_EQUAL( p2.annotation<ComplexAnnotation>().s, "dead beef" );
BOOST_CHECK_EQUAL( p2.annotation<ComplexAnnotation>().i, 0x12345678 );
+ senf::Packet pClone (packet.clone());
+
+ p2.clearAnnotations();
+ BOOST_CHECK_EQUAL( p2.annotation<ComplexAnnotation>().s, "empty" );
+ BOOST_CHECK_EQUAL( p2.annotation<ComplexAnnotation>().i, -1 );
+ BOOST_CHECK_EQUAL( p2.annotation<IntAnnotation>().value, 0 );
+
+ BOOST_CHECK_EQUAL( pClone.annotation<IntAnnotation>().value, 0xDEADBEEFu );
+ BOOST_CHECK_EQUAL( pClone.annotation<ComplexAnnotation>().s, "dead beef" );
+ BOOST_CHECK_EQUAL( pClone.annotation<ComplexAnnotation>().i, 0x12345678 );
+
BOOST_CHECK( Reg::lookup<IntAnnotation>() >= 0 );
BOOST_CHECK( Reg::lookup<LargeAnnotation>() < 0 );
BOOST_CHECK( Reg::lookup<ComplexAnnotation>() < 0 );
BOOST_CHECK( Reg::lookup<ComplexEmptyAnnotation>() < 0 );
-#ifdef SENF_DEBUG
std::stringstream ss;
-
senf::dumpPacketAnnotationRegistry(ss);
BOOST_CHECK_EQUAL(
ss.str(),
"(anonymous namespace)::ComplexEmptyAnnotation no yes 1\n"
"(anonymous namespace)::IntAnnotation yes no 4\n"
"(anonymous namespace)::LargeAnnotation no no 32\n" );
-#endif
}
#ifdef COMPILE_CHECK
#endif
-///////////////////////////////cc.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#undef prefix_
\f