pipeline_test.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. // See http://www.boost.org/libs/iostreams for documentation.
  6. #include <fstream>
  7. #include <boost/iostreams/device/file.hpp>
  8. #include <boost/iostreams/filtering_stream.hpp>
  9. #include <boost/test/test_tools.hpp>
  10. #include <boost/test/unit_test.hpp>
  11. #include "detail/filters.hpp"
  12. #include "detail/sequence.hpp"
  13. #include "detail/temp_file.hpp"
  14. #include "detail/verification.hpp"
  15. using boost::unit_test::test_suite;
  16. void pipeline_test()
  17. {
  18. using namespace std;
  19. using namespace boost;
  20. using namespace boost::iostreams;
  21. using namespace boost::iostreams::test;
  22. {
  23. test_file src;
  24. filtering_istream
  25. in1( toupper_filter() |
  26. file_source(src.name()) );
  27. filtering_istream
  28. in2( toupper_filter() |
  29. toupper_filter() |
  30. file_source(src.name()) );
  31. filtering_istream
  32. in3( toupper_filter() |
  33. toupper_filter() |
  34. toupper_filter() |
  35. file_source(src.name()) );
  36. filtering_istream
  37. in4( toupper_filter() |
  38. toupper_filter() |
  39. toupper_filter() |
  40. toupper_filter() |
  41. file_source(src.name()) );
  42. BOOST_CHECK(in1.size() == 2);
  43. BOOST_CHECK(in2.size() == 3);
  44. BOOST_CHECK(in3.size() == 4);
  45. BOOST_CHECK(in4.size() == 5);
  46. }
  47. {
  48. test_file src;
  49. uppercase_file upper;
  50. filtering_istream
  51. first( toupper_filter() |
  52. toupper_multichar_filter() |
  53. file_source(src.name(), in_mode) );
  54. ifstream second(upper.name().c_str(), in_mode);
  55. BOOST_CHECK_MESSAGE(
  56. compare_streams_in_chunks(first, second),
  57. "failed reading from a filtering_istream in chunks with a "
  58. "multichar input filter"
  59. );
  60. }
  61. {
  62. temp_file dest;
  63. lowercase_file lower;
  64. filtering_ostream
  65. out( tolower_filter() |
  66. tolower_multichar_filter() |
  67. file_sink(dest.name(), out_mode) );
  68. write_data_in_chunks(out);
  69. out.reset();
  70. BOOST_CHECK_MESSAGE(
  71. compare_files(dest.name(), lower.name()),
  72. "failed writing to a filtering_ostream in chunks with a "
  73. "multichar output filter with no buffer"
  74. );
  75. }
  76. }
  77. test_suite* init_unit_test_suite(int, char* [])
  78. {
  79. test_suite* test = BOOST_TEST_SUITE("pipeline test");
  80. test->add(BOOST_TEST_CASE(&pipeline_test));
  81. return test;
  82. }