• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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