component_access_test.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 174 行
CPP
174 行
// (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 <stdexcept> // out_of_range.#include <typeinfo>#include <utility> // pair.#include <boost/config.hpp> // BOOST_MSVC.#include <boost/detail/workaround.hpp>#include <boost/iostreams/device/file.hpp>#include <boost/iostreams/filtering_stream.hpp>#include <boost/iostreams/stream.hpp>#include <boost/iostreams/stream_buffer.hpp>#include <boost/test/test_tools.hpp>#include <boost/test/unit_test.hpp>#include "detail/constants.hpp"#include "detail/filters.hpp"#include "detail/temp_file.hpp"#include "detail/verification.hpp"namespace io = boost::iostreams;using boost::unit_test::test_suite;#define COMPARE_TYPE_ID(x, y) BOOST_IOSTREAMS_COMPARE_TYPE_ID(x, y)struct indirect_source : io::source { void foo() { } std::streamsize read(char*, std::streamsize) { return 0; }};struct direct_source { typedef char char_type; struct category : io::input, io::device_tag, io::direct_tag { }; void foo() { } std::pair<char*, char*> input_sequence() { return std::pair<char*, char*>(0, 0); }};void compile_time_test(){ using namespace io; stream_buffer<indirect_source> indirect_buf; indirect_buf.open(indirect_source()); indirect_buf->foo(); stream_buffer<direct_source> direct_buf; direct_buf.open(direct_source()); direct_buf->foo(); stream<indirect_source> indirect_stream; indirect_stream.open(indirect_source()); indirect_stream->foo(); stream<direct_source> direct_stream; direct_stream.open(direct_source()); direct_stream->foo();}void component_type_test(){ using namespace std; using namespace io; using namespace boost::iostreams::test; temp_file dest; lowercase_file lower; filtering_ostream out; out.push(tolower_filter()); out.push(tolower_multichar_filter()); out.push(file_sink(dest.name(), out_mode)); // Check index 0. BOOST_CHECK(COMPARE_TYPE_ID( out.component_type(0), typeid(tolower_filter) )); BOOST_CHECK(COMPARE_TYPE_ID( BOOST_IOSTREAMS_COMPONENT_TYPE(out, 0), typeid(tolower_filter) )); BOOST_CHECK_NO_THROW(( BOOST_IOSTREAMS_COMPONENT(out, 0, tolower_filter) ));#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) BOOST_CHECK_NO_THROW(( out.component<tolower_filter>(0) )); BOOST_CHECK_NO_THROW(( out.component<0, tolower_filter>() ));#endif // Check index 1. BOOST_CHECK(COMPARE_TYPE_ID( out.component_type(1), typeid(tolower_multichar_filter) )); BOOST_CHECK(COMPARE_TYPE_ID( BOOST_IOSTREAMS_COMPONENT_TYPE(out, 1), typeid(tolower_multichar_filter) )); BOOST_CHECK_NO_THROW(( BOOST_IOSTREAMS_COMPONENT(out, 1, tolower_multichar_filter) ));#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) BOOST_CHECK_NO_THROW(( out.component<tolower_multichar_filter>(1) )); BOOST_CHECK_NO_THROW(( out.component<1, tolower_multichar_filter>() ));#endif // Check index 2. BOOST_CHECK(COMPARE_TYPE_ID( out.component_type(2), typeid(file_sink) )); BOOST_CHECK(COMPARE_TYPE_ID( BOOST_IOSTREAMS_COMPONENT_TYPE(out, 2), typeid(file_sink) )); BOOST_CHECK_NO_THROW(( BOOST_IOSTREAMS_COMPONENT(out, 2, file_sink) ));#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) BOOST_CHECK_NO_THROW(( out.component<file_sink>(2) )); BOOST_CHECK_NO_THROW(( out.component<2, file_sink>() ));#endif // Check index 3. BOOST_CHECK_THROW( out.component_type(3), std::out_of_range ); BOOST_CHECK_THROW( BOOST_IOSTREAMS_COMPONENT_TYPE(out, 3), std::out_of_range ); // Check components. filtering_ostream out2; out2.push(*(BOOST_IOSTREAMS_COMPONENT(out, 0, tolower_filter))); out2.push(*(BOOST_IOSTREAMS_COMPONENT(out, 1, tolower_multichar_filter))); out2.push(*(BOOST_IOSTREAMS_COMPONENT(out, 2, file_sink))); write_data_in_chunks(out); out.reset(); BOOST_CHECK_MESSAGE( compare_files(dest.name(), lower.name()), "failed accessing components of chain" );}test_suite* init_unit_test_suite(int, char* []) { test_suite* test = BOOST_TEST_SUITE("component_type test"); test->add(BOOST_TEST_CASE(&component_type_test)); return test;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?