PPI: Checkin of first compiling (yet not working) version
[senf.git] / Packets / ParseArray.test.cc
index 8d1e903..44b406d 100644 (file)
@@ -26,8 +26,7 @@
 //#include "ParseArray.test.ih"
 
 // Custom includes
-#include "ParseArray.hh"
-#include "ParseInt.hh"
+#include "Packets.hh"
 
 #include <boost/test/auto_unit_test.hpp>
 #include <boost/test/test_tools.hpp>
 #define prefix_
 ///////////////////////////////cc.p////////////////////////////////////////
 
-using namespace senf;
+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<VoidPacket>::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////////////////////////////////////////
@@ -68,4 +104,5 @@ BOOST_AUTO_UNIT_TEST(parseArray_test)
 // indent-tabs-mode: nil
 // ispell-local-dictionary: "american"
 // compile-command: "scons -u test"
+// comment-column: 40
 // End: