Imported Upstream version 1.57.0
[platform/upstream/boost.git] / libs / asio / test / is_read_buffered.cpp
1 //
2 // is_read_buffered.cpp
3 // ~~~~~~~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6 //
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 //
10
11 // Disable autolinking for unit tests.
12 #if !defined(BOOST_ALL_NO_LIB)
13 #define BOOST_ALL_NO_LIB 1
14 #endif // !defined(BOOST_ALL_NO_LIB)
15
16 // Test that header file is self-contained.
17 #include <boost/asio/is_read_buffered.hpp>
18
19 #include <boost/asio/buffered_read_stream.hpp>
20 #include <boost/asio/buffered_write_stream.hpp>
21 #include <boost/asio/io_service.hpp>
22 #include <boost/asio/ip/tcp.hpp>
23 #include "unit_test.hpp"
24
25 using namespace std; // For memcmp, memcpy and memset.
26
27 class test_stream
28 {
29 public:
30   typedef boost::asio::io_service io_service_type;
31
32   typedef test_stream lowest_layer_type;
33
34   test_stream(boost::asio::io_service& io_service)
35     : io_service_(io_service)
36   {
37   }
38
39   io_service_type& io_service()
40   {
41     return io_service_;
42   }
43
44   lowest_layer_type& lowest_layer()
45   {
46     return *this;
47   }
48
49   template <typename Const_Buffers>
50   size_t write(const Const_Buffers&)
51   {
52     return 0;
53   }
54
55   template <typename Const_Buffers>
56   size_t write(const Const_Buffers&, boost::system::error_code& ec)
57   {
58     ec = boost::system::error_code();
59     return 0;
60   }
61
62   template <typename Const_Buffers, typename Handler>
63   void async_write(const Const_Buffers&, Handler handler)
64   {
65     boost::system::error_code error;
66     io_service_.post(boost::asio::detail::bind_handler(handler, error, 0));
67   }
68
69   template <typename Mutable_Buffers>
70   size_t read(const Mutable_Buffers&)
71   {
72     return 0;
73   }
74
75   template <typename Mutable_Buffers>
76   size_t read(const Mutable_Buffers&, boost::system::error_code& ec)
77   {
78     ec = boost::system::error_code();
79     return 0;
80   }
81
82   template <typename Mutable_Buffers, typename Handler>
83   void async_read(const Mutable_Buffers&, Handler handler)
84   {
85     boost::system::error_code error;
86     io_service_.post(boost::asio::detail::bind_handler(handler, error, 0));
87   }
88
89 private:
90   io_service_type& io_service_;
91 };
92
93 void is_read_buffered_test()
94 {
95   BOOST_ASIO_CHECK(!boost::asio::is_read_buffered<
96       boost::asio::ip::tcp::socket>::value);
97
98   BOOST_ASIO_CHECK(!!boost::asio::is_read_buffered<
99       boost::asio::buffered_read_stream<
100         boost::asio::ip::tcp::socket> >::value);
101
102   BOOST_ASIO_CHECK(!boost::asio::is_read_buffered<
103       boost::asio::buffered_write_stream<
104         boost::asio::ip::tcp::socket> >::value);
105
106   BOOST_ASIO_CHECK(!!boost::asio::is_read_buffered<
107       boost::asio::buffered_stream<boost::asio::ip::tcp::socket> >::value);
108
109   BOOST_ASIO_CHECK(!boost::asio::is_read_buffered<test_stream>::value);
110
111   BOOST_ASIO_CHECK(!!boost::asio::is_read_buffered<
112       boost::asio::buffered_read_stream<test_stream> >::value);
113
114   BOOST_ASIO_CHECK(!boost::asio::is_read_buffered<
115       boost::asio::buffered_write_stream<test_stream> >::value);
116
117   BOOST_ASIO_CHECK(!!boost::asio::is_read_buffered<
118       boost::asio::buffered_stream<test_stream> >::value);
119 }
120
121 BOOST_ASIO_TEST_SUITE
122 (
123   "is_read_buffered",
124   BOOST_ASIO_TEST_CASE(is_read_buffered_test)
125 )