$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: technews_at_[hidden]
Date: 2008-02-23 01:06:58
Author: turkanis
Date: 2008-02-23 01:06:57 EST (Sat, 23 Feb 2008)
New Revision: 43394
URL: http://svn.boost.org/trac/boost/changeset/43394
Log:
updated to test close() on filtering streambufs
Text files modified: 
   branches/iostreams_dev/libs/iostreams/test/close_test.cpp |   222 ++++++++++++++++++++++++++++++++------- 
   1 files changed, 179 insertions(+), 43 deletions(-)
Modified: branches/iostreams_dev/libs/iostreams/test/close_test.cpp
==============================================================================
--- branches/iostreams_dev/libs/iostreams/test/close_test.cpp	(original)
+++ branches/iostreams_dev/libs/iostreams/test/close_test.cpp	2008-02-23 01:06:57 EST (Sat, 23 Feb 2008)
@@ -10,12 +10,12 @@
  *
  * File:        libs/iostreams/test/close_test.cpp
  * Date:        Sun Dec 09 16:12:23 MST 2007
- * Copyright:   2007-2008 CodeRage, LLC
+ * Copyright:   2007 CodeRage
  * Author:      Jonathan Turkanis
- * Contact:     turkanis at coderage dot com
  */
 
 #include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/filtering_streambuf.hpp>
 #include <boost/iostreams/stream.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test.hpp>  
@@ -33,8 +33,8 @@
 {
     // Test input filter and device
     {
-        operation_sequence  seq;
-        chain<input>        ch;
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<input>(seq.new_operation(2)));
@@ -42,6 +42,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<input>(seq.new_operation(1)));
@@ -51,10 +57,9 @@
 
     // Test bidirectional filter and device
     {
-        operation_sequence  seq;
-        chain<input>        ch;
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
 
-        
         // Test chain::pop()
         ch.push(
             closable_filter<bidirectional>(
@@ -71,6 +76,17 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(
@@ -85,8 +101,8 @@
 
     // Test seekable filter and device
     {
-        operation_sequence  seq;
-        chain<input>        ch;
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<seekable>(seq.new_operation(1)));
@@ -94,6 +110,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<seekable>(seq.new_operation(2)));
@@ -103,9 +125,9 @@
 
     // Test dual-user filter
     {
-        operation_sequence  seq;
-        chain<input>        ch;
-        operation           dummy;
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
+        operation                   dummy;
 
         // Test chain::pop()
         ch.push(
@@ -117,6 +139,12 @@
         ch.push(closable_device<input>(seq.new_operation(1)));
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
+        
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
         // Test filter reuse and chain::reset()
         seq.reset();
@@ -127,14 +155,20 @@
 
     // Test direct source
     {
-        operation_sequence  seq;
-        chain<input>        ch;
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<input>(seq.new_operation(2)));
         ch.push(closable_device<direct_input>(seq.new_operation(1)));
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
+        
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
         // Test filter reuse and chain::reset()
         seq.reset();
@@ -145,8 +179,8 @@
 
     // Test direct bidirectional device
     {
-        operation_sequence  seq;
-        chain<input>        ch;
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<input>(seq.new_operation(2)));
@@ -159,6 +193,17 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(3)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(
@@ -173,8 +218,8 @@
 
     // Test direct seekable device
     {
-        operation_sequence  seq;
-        chain<input>        ch;
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<input>(seq.new_operation(1)));
@@ -182,6 +227,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
@@ -194,8 +245,8 @@
 {
     // Test output filter and device
     {
-        operation_sequence  seq;
-        chain<output>       ch;
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<output>(seq.new_operation(1)));
@@ -203,6 +254,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<output>(seq.new_operation(2)));
@@ -212,9 +269,8 @@
 
     // Test bidirectional filter and device
     {
-        operation_sequence  seq;
-        chain<output>       ch;
-
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
         
         // Test chain::pop()
         ch.push(
@@ -232,6 +288,17 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(
@@ -246,8 +313,8 @@
 
     // Test seekable filter and device
     {
-        operation_sequence  seq;
-        chain<output>       ch;
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<seekable>(seq.new_operation(1)));
@@ -255,6 +322,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<seekable>(seq.new_operation(2)));
@@ -264,9 +337,9 @@
 
     // Test dual-user filter
     {
-        operation_sequence  seq;
-        chain<output>       ch;
-        operation           dummy;
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
+        operation                    dummy;
 
         // Test chain::pop()
         ch.push(
@@ -279,6 +352,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<output>(seq.new_operation(3)));
@@ -288,8 +367,8 @@
 
     // Test direct sink
     {
-        operation_sequence  seq;
-        chain<output>       ch;
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<output>(seq.new_operation(1)));
@@ -297,6 +376,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<direct_output>(seq.new_operation(2)));
@@ -306,8 +391,8 @@
 
     // Test direct bidirectional device
     {
-        operation_sequence  seq;
-        chain<output>       ch;
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<output>(seq.new_operation(2)));
@@ -320,6 +405,17 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(3)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(
@@ -334,8 +430,8 @@
 
     // Test direct seekable device
     {
-        operation_sequence  seq;
-        chain<output>       ch;
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<output>(seq.new_operation(1)));
@@ -343,6 +439,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
@@ -355,8 +457,8 @@
 {
     // Test bidirectional filter and device
     {
-        operation_sequence    seq;
-        chain<bidirectional>  ch;
+        operation_sequence                  seq;
+        filtering_streambuf<bidirectional>  ch;
         
         // Test chain::pop()
         ch.push(
@@ -374,6 +476,17 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(
@@ -388,8 +501,8 @@
 
     // Test direct bidirectional device
     {
-        operation_sequence    seq;
-        chain<bidirectional>  ch;
+        operation_sequence                  seq;
+        filtering_streambuf<bidirectional>  ch;
 
         // Test chain::pop()
         ch.push(
@@ -407,6 +520,17 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(
@@ -424,8 +548,8 @@
 {
     // Test seekable filter and device
     {
-        operation_sequence  seq;
-        chain<seekable>     ch;
+        operation_sequence             seq;
+        filtering_streambuf<seekable>  ch;
 
         // Test chain::pop()
         ch.push(closable_filter<seekable>(seq.new_operation(1)));
@@ -433,6 +557,12 @@
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<seekable>(seq.new_operation(2)));
@@ -442,15 +572,21 @@
 
     // Test direct seekable device
     {
-        operation_sequence  seq;
-        chain<output>       ch;
+        operation_sequence             seq;
+        filtering_streambuf<seekable>  ch;
 
         // Test chain::pop()
-        ch.push(closable_filter<output>(seq.new_operation(1)));
+        ch.push(closable_filter<seekable>(seq.new_operation(1)));
         ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
         BOOST_CHECK_NO_THROW(ch.pop());
         BOOST_CHECK_OPERATION_SEQUENCE(seq);
 
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
         // Test filter reuse and chain::reset()
         seq.reset();
         ch.push(closable_device<direct_seekable>(seq.new_operation(2)));