1// Copyright (C) 2001, 2002, 2003 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 2, 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 COPYING. If not, write to the Free 16// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 17// USA. 18 19// 27.8.1.3 filebuf member functions 20// @require@ %-*.tst %-*.txt 21// @diff@ %-*.tst %-*.txt 22 23// various tests for filebuf::open() and filebuf::close() including 24// the non-portable functionality in the libstdc++-v3 IO library 25 26#include <fstream> 27#include <testsuite_hooks.h> 28 29const char name_01[] = "filebuf_members-1.tst"; 30const char name_02[] = "filebuf_members-1.txt"; 31 32// Test member functions. 33void test_01() 34{ 35 bool test __attribute__((unused)) = true; 36 const char* name_03 = "filebuf_members-3"; // empty file, need to create 37 38 std::filebuf fb_01; // in 39 std::filebuf fb_02; // out 40 std::filebuf fb_03; // in | out 41 42 // bool is_open() 43 VERIFY( !fb_01.is_open() ); 44 VERIFY( !fb_02.is_open() ); 45 VERIFY( !fb_03.is_open() ); 46 47 // filebuf_type* open(const char* __s, ios_base::openmode __mode) 48 fb_01.open(name_01, std::ios_base::in | std::ios_base::ate); 49 VERIFY( fb_01.is_open() ); 50 51 // Try to open two different files without closing the first: 52 // Should keep the old file attached, and disregard attempt to overthrow. 53 std::filebuf* f = fb_02.open(name_02, std::ios_base::in | std::ios_base::out 54 | std::ios_base::trunc); 55 VERIFY( f != NULL ); 56 VERIFY( fb_02.is_open() ); 57 58 f = fb_02.open(name_03, std::ios_base::in | std::ios_base::out); 59 VERIFY( f == NULL ); 60 VERIFY( fb_02.is_open() ); 61 62 fb_03.open(name_03, std::ios_base::out | std::ios_base::trunc); 63 VERIFY( fb_03.is_open() ); 64} 65 66int 67main() 68{ 69 test_01(); 70 return 0; 71} 72 73 74