From cb873b2c6ec180a09e18df60b77a56d7583a9062 Mon Sep 17 00:00:00 2001
From: sbund <sbund@wiback.org>
Date: Thu, 31 Aug 2006 15:39:18 +0000
Subject: [PATCH] static cast unit testing

---
 Socket/ClientSocketHandle.test.cc         |  7 +++++--
 Socket/ProtocolClientSocketHandle.test.cc | 10 ++++++++++
 Socket/ProtocolServerSocketHandle.test.cc | 11 +++++++++++
 Socket/ServerSocketHandle.test.cc         |  7 +++++--
 Socket/SocketPolicy.hh                    | 16 ++++++++++++++++
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/Socket/ClientSocketHandle.test.cc b/Socket/ClientSocketHandle.test.cc
index 389f30ec8..69505645e 100644
--- a/Socket/ClientSocketHandle.test.cc
+++ b/Socket/ClientSocketHandle.test.cc
@@ -64,8 +64,11 @@ BOOST_AUTO_UNIT_TEST(clientSocketHandle)
             >::policy OtherSocketPolicy;
         typedef sl::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
     
-        OtherSocketHandle ssh (myh);
-        ssh = myh;
+        OtherSocketHandle osh (myh);
+        osh = myh;
+        typedef sl::ClientSocketHandle<sl::test::SomeProtocol::Policy> SomeSocketHandle;
+        SomeSocketHandle ssh = 
+            sl::static_socket_cast<SomeSocketHandle>(osh);
     }
 
     // reading and writing
diff --git a/Socket/ProtocolClientSocketHandle.test.cc b/Socket/ProtocolClientSocketHandle.test.cc
index 7c73b9046..be924cec3 100644
--- a/Socket/ProtocolClientSocketHandle.test.cc
+++ b/Socket/ProtocolClientSocketHandle.test.cc
@@ -48,8 +48,18 @@ BOOST_AUTO_UNIT_TEST(protocolClientSocketHandle)
     typedef satcom::lib::ProtocolClientSocketHandle<MyProtocol> MySocketHandle;
 
     {
+        typedef satcom::lib::MakeSocketPolicy<
+            satcom::lib::test::SomeFramingPolicy,
+            satcom::lib::test::SomeReadPolicy,
+            satcom::lib::test::SomeWritePolicy
+            >::policy OtherSocketPolicy;
+        typedef satcom::lib::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
+
         MySocketHandle h;
         h.protocol();
+        
+        OtherSocketHandle osh (h);
+        h = satcom::lib::static_socket_cast<MySocketHandle>(osh);
     }
 
     {
diff --git a/Socket/ProtocolServerSocketHandle.test.cc b/Socket/ProtocolServerSocketHandle.test.cc
index 98408955b..eb56abc11 100644
--- a/Socket/ProtocolServerSocketHandle.test.cc
+++ b/Socket/ProtocolServerSocketHandle.test.cc
@@ -49,7 +49,18 @@ BOOST_AUTO_UNIT_TEST(protocolServerSocketHandle)
     typedef satcom::lib::ProtocolServerSocketHandle<MyProtocol> MySocketHandle;
 
     {
+        typedef satcom::lib::MakeSocketPolicy<
+            satcom::lib::test::SomeFramingPolicy,
+            satcom::lib::test::SomeReadPolicy,
+            satcom::lib::test::SomeWritePolicy
+            >::policy OtherSocketPolicy;
+        typedef satcom::lib::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
+
         MySocketHandle h;
+        h.protocol();
+
+        OtherSocketHandle osh (h);
+        h = satcom::lib::static_socket_cast<MySocketHandle>(osh);
    
         MySocketHandle::ClientSocketHandle client = h.accept();
         BOOST_CHECK_EQUAL( client.fd(), -1 );
diff --git a/Socket/ServerSocketHandle.test.cc b/Socket/ServerSocketHandle.test.cc
index 73909ac9c..579f35c78 100644
--- a/Socket/ServerSocketHandle.test.cc
+++ b/Socket/ServerSocketHandle.test.cc
@@ -61,8 +61,11 @@ BOOST_AUTO_UNIT_TEST(serverSocketHandle)
     typedef sl::SocketHandle<OtherSocketPolicy> OtherSocketHandle;
     
     MySocketHandle myh;
-    OtherSocketHandle ssh (myh);
-    ssh = myh;
+    OtherSocketHandle osh (myh);
+    osh = myh;
+
+    typedef sl::ServerSocketHandle<sl::test::SomeProtocol::Policy> SomeSocketHandle;
+    SomeSocketHandle ssh = sl::static_socket_cast<SomeSocketHandle>(osh);
 
     BOOST_CHECK_NO_THROW( myh.bind(0) );
     BOOST_CHECK_EQUAL( myh.local(), 2u );
diff --git a/Socket/SocketPolicy.hh b/Socket/SocketPolicy.hh
index 74de6f3c0..07c2739fb 100644
--- a/Socket/SocketPolicy.hh
+++ b/Socket/SocketPolicy.hh
@@ -38,6 +38,22 @@ namespace lib {
 	(ReadPolicy)                            \
 	(WritePolicy)                           \
 	(BufferingPolicy)
+    
+    // The implementation file will for each Policy declared above
+    // define the following (SomePolicy is one of the above):
+    //
+    // struct SomePolicyBase;
+    // typedef UndefinedSomePolicy;
+    // template SomePolicyIs< SocketPolicy, Axis >
+    // template IfSomePolicyIs< SocketPolicy, Axis >
+    // template IfSomePolicyIsNot< SocketPolicy, Axis >
+    //
+    // Additionally the following are defined:
+    //
+    // class SocketPolicyBase
+    // template SocketPolicy< ..policies.. >
+    // template MakeSocketPolicy< ..args.. >
+    // template SocketPolicyIsBaseOf< Base, Derived >
 
 }}
 
-- 
GitLab