stdio_filter_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 145 行

CPP
145
字号
// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)// (C) Copyright 2004-2007 Jonathan Turkanis// 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.)// See http://www.boost.org/libs/iostreams for documentation.#include <cctype>#include <boost/iostreams/device/file.hpp>#include <boost/iostreams/filter/stdio.hpp>#include <boost/iostreams/filtering_stream.hpp>#include <boost/test/test_tools.hpp>#include <boost/test/unit_test.hpp>#include "detail/filters.hpp"#include "detail/temp_file.hpp"#include "detail/verification.hpp"// Must come last.#include <boost/iostreams/detail/config/disable_warnings.hpp> // BCC 5.x.using namespace boost::iostreams;using boost::unit_test::test_suite;struct toupper_stdio_filter : stdio_filter {    void do_filter()    {        int c;        while ((c = std::cin.get()) != EOF)            std::cout.put(std::toupper((unsigned char)c));    }};struct tolower_stdio_filter : stdio_filter {    void do_filter()    {        int c;        while ((c = std::cin.get()) != EOF)            std::cout.put(std::tolower((unsigned char)c));    }};struct padding_stdio_filter : stdio_filter {    padding_stdio_filter(char pad_char) : pad_char_(pad_char) { }    void do_filter()    {        int c;        while ((c = std::cin.get()) != EOF) {            std::cout.put(c);            std::cout.put(pad_char_);        }    }    char pad_char_;};void read_stdio_filter(){    using namespace boost::iostreams::test;    test_file          src1, src2;    filtering_istream  first, second;    first.push(toupper_filter());    first.push(padding_filter('a'));    first.push(file_source(src1.name(), in_mode));    second.push(toupper_stdio_filter());    second.push(padding_stdio_filter('a'));    second.push(file_source(src2.name(), in_mode));    BOOST_CHECK_MESSAGE(        compare_streams_in_chunks(first, second),        "failed reading from a stdio_filter"    );    first.reset();    first.push(padding_filter('a'));    first.push(toupper_filter());    first.push(file_source(src1.name(), in_mode));    second.reset();    second.push(padding_stdio_filter('a'));    second.push(toupper_stdio_filter());    second.push(file_source(src2.name(), in_mode));    BOOST_CHECK_MESSAGE(        compare_streams_in_chunks(first, second),        "failed reading from a stdio_filter"    );}void write_stdio_filter(){    using namespace std;    using namespace boost::iostreams::test;    temp_file          dest1, dest2;    filtering_ostream  out1, out2;    out1.push(tolower_filter());    out1.push(padding_filter('a'));    out1.push(file_sink(dest1.name(), in_mode));    out2.push(tolower_stdio_filter());    out2.push(padding_stdio_filter('a'));    out2.push(file_sink(dest2.name(), in_mode));    write_data_in_chunks(out1);    write_data_in_chunks(out2);    out1.reset();    out2.reset();    {        ifstream first(dest1.name().c_str());        ifstream second(dest2.name().c_str());        BOOST_CHECK_MESSAGE(            compare_streams_in_chunks(first, second),            "failed writing to a stdio_filter"        );    }    out1.push(padding_filter('a'));    out1.push(tolower_filter());    out1.push(file_sink(dest1.name(), in_mode));    out2.push(padding_stdio_filter('a'));    out2.push(tolower_stdio_filter());    out2.push(file_sink(dest2.name(), in_mode));    write_data_in_chunks(out1);    write_data_in_chunks(out2);    out1.reset();    out2.reset();    {        ifstream first(dest1.name().c_str());        ifstream second(dest2.name().c_str());        BOOST_CHECK_MESSAGE(            compare_streams_in_chunks(first, second),            "failed writing to a stdio_filter"        );    }}test_suite* init_unit_test_suite(int, char* []){    test_suite* test = BOOST_TEST_SUITE("line_filter test");    test->add(BOOST_TEST_CASE(&read_stdio_filter));    test->add(BOOST_TEST_CASE(&write_stdio_filter));    return test;}#include <boost/iostreams/detail/config/enable_warnings.hpp> // BCC 5.x.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?