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