file_descriptor_test.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 207 行
CPP
207 行
// (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 <fstream>#include <boost/iostreams/device/file_descriptor.hpp>#include <boost/iostreams/stream.hpp>#include <boost/test/test_tools.hpp>#include <boost/test/unit_test.hpp>#include "detail/temp_file.hpp"#include "detail/verification.hpp"using namespace boost;using namespace boost::iostreams;using namespace boost::iostreams::test;using std::ifstream;using boost::unit_test::test_suite; void file_descriptor_test(){ typedef stream<file_descriptor_source> fdistream; typedef stream<file_descriptor_sink> fdostream; typedef stream<file_descriptor> fdstream; test_file test1; test_file test2; //--------------Test file_descriptor_source-------------------------------// { fdistream first(file_descriptor_source(test1.name()), 0); ifstream second(test2.name().c_str()); BOOST_CHECK(first->is_open()); BOOST_CHECK_MESSAGE( compare_streams_in_chars(first, second), "failed reading from file_descriptor_source in chars with no buffer" ); first->close(); BOOST_CHECK(!first->is_open()); } { fdistream first(file_descriptor_source(test1.name()), 0); ifstream second(test2.name().c_str()); BOOST_CHECK(first->is_open()); BOOST_CHECK_MESSAGE( compare_streams_in_chunks(first, second), "failed reading from file_descriptor_source in chunks with no buffer" ); first->close(); BOOST_CHECK(!first->is_open()); } { file_descriptor_source file(test1.name()); fdistream first(file); ifstream second(test2.name().c_str()); BOOST_CHECK(first->is_open()); BOOST_CHECK_MESSAGE( compare_streams_in_chars(first, second), "failed reading from file_descriptor_source in chars with buffer" ); first->close(); BOOST_CHECK(!first->is_open()); } { file_descriptor_source file(test1.name()); fdistream first(file); ifstream second(test2.name().c_str()); BOOST_CHECK(first->is_open()); BOOST_CHECK_MESSAGE( compare_streams_in_chunks(first, second), "failed reading from file_descriptor_source in chunks with buffer" ); first->close(); BOOST_CHECK(!first->is_open()); } //--------------Test file_descriptor_sink---------------------------------// { temp_file temp; file_descriptor_sink file(temp.name(), BOOST_IOS::trunc); fdostream out(file, 0); BOOST_CHECK(out->is_open()); write_data_in_chars(out); out.close(); BOOST_CHECK_MESSAGE( compare_files(test1.name(), temp.name()), "failed writing to file_descriptor_sink in chars with no buffer" ); file.close(); BOOST_CHECK(!file.is_open()); } { temp_file temp; file_descriptor_sink file(temp.name(), BOOST_IOS::trunc); fdostream out(file, 0); BOOST_CHECK(out->is_open()); write_data_in_chunks(out); out.close(); BOOST_CHECK_MESSAGE( compare_files(test1.name(), temp.name()), "failed writing to file_descriptor_sink in chunks with no buffer" ); file.close(); BOOST_CHECK(!file.is_open()); } { temp_file temp; file_descriptor_sink file(temp.name(), BOOST_IOS::trunc); fdostream out(file); BOOST_CHECK(out->is_open()); write_data_in_chars(out); out.close(); BOOST_CHECK_MESSAGE( compare_files(test1.name(), temp.name()), "failed writing to file_descriptor_sink in chars with buffer" ); file.close(); BOOST_CHECK(!file.is_open()); } { temp_file temp; file_descriptor_sink file(temp.name(), BOOST_IOS::trunc); fdostream out(file); BOOST_CHECK(out->is_open()); write_data_in_chunks(out); out.close(); BOOST_CHECK_MESSAGE( compare_files(test1.name(), temp.name()), "failed writing to file_descriptor_sink in chunks with buffer" ); file.close(); BOOST_CHECK(!file.is_open()); } //--Test seeking with file_descriptor_source and file_descriptor_sink-----// { file_descriptor_sink sink(test1.name()); fdostream out(sink); BOOST_CHECK(out->is_open()); BOOST_CHECK_MESSAGE( test_output_seekable(out), "failed seeking within a file_descriptor_sink" ); out->close(); BOOST_CHECK(!out->is_open()); file_descriptor_source source(test1.name()); fdistream in(source); BOOST_CHECK(in->is_open()); BOOST_CHECK_MESSAGE( test_input_seekable(in), "failed seeking within a file_descriptor_source" ); in->close(); BOOST_CHECK(!in->is_open()); } //--------------Test file_descriptor--------------------------------------// { temp_file temp; file_descriptor file( temp.name(), BOOST_IOS::in | BOOST_IOS::out | BOOST_IOS::trunc | BOOST_IOS::binary ); fdstream io(file, BUFSIZ); BOOST_CHECK_MESSAGE( test_seekable_in_chars(io), "failed seeking within a file_descriptor, in chars" ); } { temp_file temp; file_descriptor file( temp.name(), BOOST_IOS::in | BOOST_IOS::out | BOOST_IOS::trunc | BOOST_IOS::binary ); fdstream io(file, BUFSIZ); BOOST_CHECK_MESSAGE( test_seekable_in_chunks(io), "failed seeking within a file_descriptor, in chunks" ); }}test_suite* init_unit_test_suite(int, char* []) { test_suite* test = BOOST_TEST_SUITE("file_descriptor test"); test->add(BOOST_TEST_CASE(&file_descriptor_test)); return test;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?