1 // (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
2 // (C) Copyright 2004-2007 Jonathan Turkanis
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
5
6 // See http://www.boost.org/libs/iostreams for documentation.
7
8 #include <boost/iostreams/detail/config/wide_streams.hpp>
9 #ifdef BOOST_IOSTREAMS_NO_WIDE_STREAMS
10 # error wide streams not supported on this platform
11 #endif
12
13 #include <sstream>
14 #include <vector>
15 #include <boost/iostreams/device/back_inserter.hpp>
16 #include <boost/iostreams/filtering_stream.hpp>
17 #include <boost/test/test_tools.hpp>
18 #include <boost/test/unit_test.hpp>
19 #include "../example/container_device.hpp" // We use container_device instead
20 #include "detail/filters.hpp" // of make_iterator_range to
21 #include "detail/sequence.hpp" // reduce dependence on Boost.Range
22 #include "detail/temp_file.hpp"
23 #include "detail/verification.hpp"
24
25 using boost::unit_test::test_suite;
26
read_wide_input_test()27 void read_wide_input_test()
28 {
29 using namespace std;
30 using namespace boost;
31 using namespace boost::iostreams;
32 using namespace boost::iostreams::example;
33 using namespace boost::iostreams::test;
34
35 test_sequence<wchar_t> seq;
36 container_device< test_sequence<wchar_t> > source(seq);
37
38 {
39 filtering_wistream first(source, 0);
40 basic_istringstream<wchar_t> second(
41 basic_string<wchar_t>(seq.begin(), seq.end())
42 );
43 BOOST_CHECK_MESSAGE(
44 compare_streams_in_chars(first, second),
45 "failed reading from a filter_wistream in chars with no buffer"
46 );
47 }
48
49 {
50 filtering_wistream first(source, 0);
51 basic_istringstream<wchar_t> second(
52 basic_string<wchar_t>(seq.begin(), seq.end())
53 );
54 BOOST_CHECK_MESSAGE(
55 compare_streams_in_chunks(first, second),
56 "failed reading from a filter_wistream in chunks with no buffer"
57 );
58 }
59
60 {
61 filtering_wistream first(source);
62 basic_istringstream<wchar_t> second(
63 basic_string<wchar_t>(seq.begin(), seq.end())
64 );
65 BOOST_CHECK_MESSAGE(
66 compare_streams_in_chars(first, second),
67 "failed reading from a filter_wistream in chars with large buffer"
68 );
69 }
70
71 {
72 filtering_wistream first(source);
73 basic_istringstream<wchar_t> second(
74 basic_string<wchar_t>(seq.begin(), seq.end())
75 );
76 BOOST_CHECK_MESSAGE(
77 compare_streams_in_chunks(first, second),
78 "failed reading from a filter_wistream in chunks with large buffer"
79 );
80 }
81 }
82
write_wide_output_test()83 void write_wide_output_test()
84 {
85 using namespace std;
86 using namespace boost;
87 using namespace boost::iostreams;
88 using namespace boost::iostreams::test;
89
90 {
91 vector<wchar_t> first;
92 test_sequence<wchar_t> second;
93 filtering_wostream out(iostreams::back_inserter(first), 0);
94 write_data_in_chars(out);
95 BOOST_CHECK_MESSAGE(
96 first.size() == second.size() &&
97 std::equal(first.begin(), first.end(), second.begin()),
98 "failed writing to filtering_wostream in chars with no buffer"
99 );
100 }
101
102 {
103 vector<wchar_t> first;
104 test_sequence<wchar_t> second;
105 filtering_wostream out(iostreams::back_inserter(first), 0);
106 write_data_in_chunks(out);
107 BOOST_CHECK_MESSAGE(
108 first.size() == second.size() &&
109 std::equal(first.begin(), first.end(), second.begin()),
110 "failed writing to filtering_wostream in chunks with no buffer"
111 );
112 }
113
114 {
115 vector<wchar_t> first;
116 test_sequence<wchar_t> second;
117 filtering_wostream out(iostreams::back_inserter(first), 0);
118 write_data_in_chars(out);
119 BOOST_CHECK_MESSAGE(
120 first.size() == second.size() &&
121 std::equal(first.begin(), first.end(), second.begin()),
122 "failed writing to filtering_wostream in chars with large buffer"
123 );
124 }
125
126 {
127 vector<wchar_t> first;
128 test_sequence<wchar_t> second;
129 filtering_wostream out(iostreams::back_inserter(first));
130 write_data_in_chunks(out);
131 BOOST_CHECK_MESSAGE(
132 first.size() == second.size() &&
133 std::equal(first.begin(), first.end(), second.begin()),
134 "failed writing to filtering_wostream in chunks with large buffer"
135 );
136 }
137 }
138
init_unit_test_suite(int,char * [])139 test_suite* init_unit_test_suite(int, char* [])
140 {
141 test_suite* test = BOOST_TEST_SUITE("wide stream test");
142 test->add(BOOST_TEST_CASE(&read_wide_input_test));
143 test->add(BOOST_TEST_CASE(&write_wide_output_test));
144 return test;
145 }
146