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