PPI: Missing commit
[senf.git] / Packets / Packet.test.cc
index e61d67a..18b8fe9 100644 (file)
@@ -21,7 +21,7 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Packet.test unit tests */
+    \brief Packet unit tests */
 
 //#include "Packet.test.hh"
 //#include "Packet.test.ih"
@@ -136,7 +136,7 @@ namespace {
 
 BOOST_AUTO_UNIT_TEST(packet)
 {
-    senf::Packet packet (FooPacket::create());
+    senf::Packet packet (FooPacket::create());    
     BarPacket::createAfter(packet);
 
     BOOST_REQUIRE( packet );
@@ -197,7 +197,7 @@ BOOST_AUTO_UNIT_TEST(packet)
     senf::PacketData::byte data[] = { 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                       0x81, 0x82, 0x83 };
 
-    BarPacket::createAfter(packet,data);
+    BarPacket::createAfter(packet, data);
     BOOST_REQUIRE( packet.next() );
     BOOST_REQUIRE( packet.next().is<BarPacket>() );
     BOOST_CHECK( packet.last().is<FooPacket>() );
@@ -214,6 +214,10 @@ BOOST_AUTO_UNIT_TEST(packet)
     BOOST_CHECK( packet.last().rfind<FooPacket>() == packet.last() );
     BOOST_CHECK( packet.next<BarPacket>() == packet.next() );
     BOOST_CHECK( packet.last().prev().prev<FooPacket>() == packet );
+    
+    senf::DataPacket::createAfter(packet);
+    BOOST_CHECK_THROW( packet.next().next().next().parseNextAs<BarPacket>(),
+            senf::InvalidPacketChainException );
 }
 
 BOOST_AUTO_UNIT_TEST(concretePacket)
@@ -257,6 +261,17 @@ BOOST_AUTO_UNIT_TEST(concretePacket)
     BOOST_CHECK_EQUAL( BarPacket::create()->reserved(), 0xA0A0u );
 }
 
+BOOST_AUTO_UNIT_TEST(packetAssign)
+{
+    BarPacket bar1 (BarPacket::create());
+    BarPacket bar2 (BarPacket::create());
+
+    bar2->type() << 0x2A2Bu;
+    bar1.parser() << bar2;
+    
+    BOOST_CHECK_EQUAL( bar1->type(), 0x2A2Bu );
+}
+
 BOOST_AUTO_UNIT_TEST(packetAnnotation)
 {
     senf::Packet packet (FooPacket::create());
@@ -283,16 +298,18 @@ BOOST_AUTO_UNIT_TEST(packetAnnotation)
 
 COMPILE_FAIL(invalidAnnotation)
 {
+#if 0 // The traits check fails for user defined but trivial constructors so ...
 #   ifdef BOOST_HAS_TYPE_TRAITS_INTRINSICS
 
     senf::Packet packet (FooPacket::create());
     (void) packet.annotation<InvalidAnnotation>();
 
 #   else
+#   endif
+#endif
 
     invalid_annotation_check_disabled();
 
-#   endif
 }
 
 #endif