forked from boostorg/asio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
readable_pipe.cpp
139 lines (110 loc) · 3.74 KB
/
readable_pipe.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//
// readable_pipe.cpp
// ~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// Disable autolinking for unit tests.
#if !defined(BOOST_ALL_NO_LIB)
#define BOOST_ALL_NO_LIB 1
#endif // !defined(BOOST_ALL_NO_LIB)
// Test that header pipe is self-contained.
#include <boost/asio/readable_pipe.hpp>
#include "archetypes/async_result.hpp"
#include <boost/asio/io_context.hpp>
#include "unit_test.hpp"
// readable_pipe_compile test
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
// The following test checks that all public member functions on the class
// readable_pipe compile and link correctly. Runtime failures are ignored.
namespace readable_pipe_compile {
struct write_some_handler
{
write_some_handler() {}
void operator()(const boost::system::error_code&, std::size_t) {}
#if defined(BOOST_ASIO_HAS_MOVE)
write_some_handler(write_some_handler&&) {}
private:
write_some_handler(const write_some_handler&);
#endif // defined(BOOST_ASIO_HAS_MOVE)
};
struct read_some_handler
{
read_some_handler() {}
void operator()(const boost::system::error_code&, std::size_t) {}
#if defined(BOOST_ASIO_HAS_MOVE)
read_some_handler(read_some_handler&&) {}
private:
read_some_handler(const read_some_handler&);
#endif // defined(BOOST_ASIO_HAS_MOVE)
};
void test()
{
#if defined(BOOST_ASIO_HAS_PIPE)
using namespace boost::asio;
try
{
io_context ioc;
const io_context::executor_type ioc_ex = ioc.get_executor();
char mutable_char_buffer[128] = "";
archetypes::lazy_handler lazy;
boost::system::error_code ec;
const std::string path;
// basic_readable_pipe constructors.
readable_pipe pipe1(ioc);
readable_pipe::native_handle_type native_pipe1 = pipe1.native_handle();
readable_pipe pipe2(ioc, native_pipe1);
readable_pipe pipe3(ioc_ex);
readable_pipe::native_handle_type native_pipe2 = pipe1.native_handle();
readable_pipe pipe4(ioc_ex, native_pipe2);
#if defined(BOOST_ASIO_HAS_MOVE)
readable_pipe pipe5(std::move(pipe4));
basic_readable_pipe<io_context::executor_type> pipe6(ioc);
readable_pipe pipe7(std::move(pipe6));
#endif // defined(BOOST_ASIO_HAS_MOVE)
// basic_readable_pipe operators.
#if defined(BOOST_ASIO_HAS_MOVE)
pipe1 = readable_pipe(ioc);
pipe1 = std::move(pipe2);
pipe1 = std::move(pipe6);
#endif // defined(BOOST_ASIO_HAS_MOVE)
// basic_io_object functions.
readable_pipe::executor_type ex = pipe1.get_executor();
(void)ex;
// basic_readable_pipe functions.
readable_pipe::native_handle_type native_pipe3 = pipe1.native_handle();
pipe1.assign(native_pipe3);
readable_pipe::native_handle_type native_pipe4 = pipe1.native_handle();
pipe1.assign(native_pipe4, ec);
bool is_open = pipe1.is_open();
(void)is_open;
pipe1.close();
pipe1.close(ec);
readable_pipe::native_handle_type native_pipe5 = pipe1.release();
(void)native_pipe5;
readable_pipe::native_handle_type native_pipe6 = pipe1.release(ec);
(void)native_pipe6;
readable_pipe::native_handle_type native_pipe7 = pipe1.native_handle();
(void)native_pipe7;
pipe1.cancel();
pipe1.cancel(ec);
pipe1.read_some(buffer(mutable_char_buffer));
pipe1.read_some(buffer(mutable_char_buffer), ec);
pipe1.async_read_some(buffer(mutable_char_buffer), read_some_handler());
int i3 = pipe1.async_read_some(buffer(mutable_char_buffer), lazy);
(void)i3;
}
catch (std::exception&)
{
}
#endif // defined(BOOST_ASIO_HAS_PIPE)
}
} // namespace readable_pipe_compile
BOOST_ASIO_TEST_SUITE
(
"readable_pipe",
BOOST_ASIO_COMPILE_TEST_CASE(readable_pipe_compile::test)
)