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 fb_02.open(name_02, std::ios_base::in | std::ios_base::out 55 | std::ios_base::trunc); 56 VERIFY( fb_02.is_open() ); 57 58 fb_03.open(name_03, std::ios_base::out | std::ios_base::trunc); 59 VERIFY( fb_03.is_open() ); 60 61 // filebuf_type* close() 62 std::filebuf* f; 63 f = fb_01.close(); 64 VERIFY( f ); 65 VERIFY( !fb_01.is_open() ); 66 67 f = fb_02.close(); 68 VERIFY( f ); 69 VERIFY( !fb_02.is_open() ); 70 71 f = fb_03.close(); 72 VERIFY( f ); 73 VERIFY( !fb_03.is_open() ); 74 75 f = fb_03.close(); 76 VERIFY( !f ); 77 VERIFY( !fb_03.is_open() ); 78} 79 80int 81main() 82{ 83 test_01(); 84 return 0; 85} 86 87 88