1// Copyright (C) 2001-2015 Free Software Foundation, Inc. 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// 27.8.1.3 filebuf member functions 19// @require@ %-*.tst %-*.txt 20// @diff@ %-*.tst %-*.txt 21 22// various tests for filebuf::open() and filebuf::close() including 23// the non-portable functionality in the libstdc++-v3 IO library 24 25// { dg-require-fileio "" } 26 27#include <fstream> 28#include <testsuite_hooks.h> 29 30const char name_01[] = "filebuf_members-1.tst"; 31const char name_02[] = "filebuf_members-1.txt"; 32 33// Test member functions. 34void test_01() 35{ 36 bool test __attribute__((unused)) = true; 37 const char* name_03 = "filebuf_members-3"; // empty file, need to create 38 39 std::filebuf fb_01; // in 40 std::filebuf fb_02; // out 41 std::filebuf fb_03; // in | out 42 43 // bool is_open() 44 VERIFY( !fb_01.is_open() ); 45 VERIFY( !fb_02.is_open() ); 46 VERIFY( !fb_03.is_open() ); 47 48 // filebuf_type* open(const char* __s, ios_base::openmode __mode) 49 fb_01.open(name_01, std::ios_base::in | std::ios_base::ate); 50 VERIFY( fb_01.is_open() ); 51 52 // Try to open two different files without closing the first: 53 // Should keep the old file attached, and disregard attempt to overthrow. 54 std::filebuf* f = fb_02.open(name_02, std::ios_base::in | std::ios_base::out 55 | std::ios_base::trunc); 56 VERIFY( f ); 57 VERIFY( fb_02.is_open() ); 58 59 f = fb_02.open(name_03, std::ios_base::in | std::ios_base::out); 60 VERIFY( !f ); 61 VERIFY( fb_02.is_open() ); 62 63 fb_03.open(name_03, std::ios_base::out | std::ios_base::trunc); 64 VERIFY( fb_03.is_open() ); 65} 66 67int 68main() 69{ 70 test_01(); 71 return 0; 72} 73 74 75