auto_close_test.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 185 行
CPP
185 行
// (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 <cstdio> // EOF.#include <boost/iostreams/filtering_stream.hpp>#include <boost/iostreams/stream.hpp>#include <boost/shared_ptr.hpp>#include <boost/test/test_tools.hpp>#include <boost/test/unit_test.hpp> #include "detail/temp_file.hpp"#include "detail/verification.hpp"using namespace std;using namespace boost;using namespace boost::iostreams;using namespace boost::iostreams::test;using boost::unit_test::test_suite; class closable_source : public source {public: closable_source() : open_(new bool(true)) { } std::streamsize read(char*, std::streamsize) { return 0; } void open() { *open_ = true; } void close() { *open_ = false; } bool is_open() const { return *open_; }private: boost::shared_ptr<bool> open_;};class closable_input_filter : public input_filter {public: closable_input_filter() : open_(new bool(true)) { } template<typename Source> int get(Source&) { return EOF; } void open() { *open_ = true; } template<typename Source> void close(Source&) { *open_ = false; } bool is_open() const { return *open_; }private: boost::shared_ptr<bool> open_;};void auto_close_source(){ // Rely on auto_close to close source. closable_source src; { stream<closable_source> in(src); BOOST_CHECK(src.is_open()); BOOST_CHECK(in.auto_close()); } BOOST_CHECK(!src.is_open()); // Use close() to close components. src.open(); { stream<closable_source> in(src); BOOST_CHECK(src.is_open()); BOOST_CHECK(in.auto_close()); in.close(); BOOST_CHECK(!src.is_open()); } // Use close() to close components, with auto_close disabled. src.open(); { stream<closable_source> in(src); BOOST_CHECK(src.is_open()); in.set_auto_close(false); in.close(); BOOST_CHECK(!src.is_open()); } // Disable auto_close. src.open(); { stream<closable_source> in(src); BOOST_CHECK(src.is_open()); in.set_auto_close(false); BOOST_CHECK(!in.auto_close()); } BOOST_CHECK(src.is_open());}void auto_close_filter(){ closable_source src; closable_input_filter flt; // Rely on auto_close to close components. { filtering_istream in; in.push(flt); in.push(src); BOOST_CHECK(flt.is_open()); BOOST_CHECK(src.is_open()); BOOST_CHECK(in.auto_close()); } BOOST_CHECK(!flt.is_open()); BOOST_CHECK(!src.is_open()); // Use reset() to close components. flt.open(); src.open(); { filtering_istream in; in.push(flt); in.push(src); BOOST_CHECK(flt.is_open()); BOOST_CHECK(src.is_open()); BOOST_CHECK(in.auto_close()); in.reset(); BOOST_CHECK(!flt.is_open()); BOOST_CHECK(!src.is_open()); } // Use reset() to close components, with auto_close disabled. flt.open(); src.open(); { filtering_istream in; in.push(flt); in.push(src); BOOST_CHECK(flt.is_open()); BOOST_CHECK(src.is_open()); in.set_auto_close(false); in.reset(); BOOST_CHECK(!flt.is_open()); BOOST_CHECK(!src.is_open()); } // Disable auto_close. flt.open(); src.open(); { filtering_istream in; in.push(flt); in.push(src); BOOST_CHECK(flt.is_open()); BOOST_CHECK(src.is_open()); in.set_auto_close(false); BOOST_CHECK(!in.auto_close()); in.pop(); BOOST_CHECK(flt.is_open()); BOOST_CHECK(src.is_open()); } BOOST_CHECK(!flt.is_open()); BOOST_CHECK(src.is_open()); // Disable auto_close; disconnect and reconnect resource. flt.open(); src.open(); { filtering_istream in; in.push(flt); in.push(src); BOOST_CHECK(flt.is_open()); BOOST_CHECK(src.is_open()); in.set_auto_close(false); BOOST_CHECK(!in.auto_close()); in.pop(); BOOST_CHECK(flt.is_open()); BOOST_CHECK(src.is_open()); in.push(src); } BOOST_CHECK(!flt.is_open()); BOOST_CHECK(!src.is_open());}test_suite* init_unit_test_suite(int, char* []) { test_suite* test = BOOST_TEST_SUITE("auto_close test"); test->add(BOOST_TEST_CASE(&auto_close_source)); test->add(BOOST_TEST_CASE(&auto_close_filter)); return test;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?