1// Copyright (C) 2005-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
19#include <ostream>
20#include <streambuf>
21#include <sstream>
22#include <testsuite_hooks.h>
23#include <testsuite_io.h>
24
25using namespace std;
26
27void test9()
28{
29  bool test __attribute__((unused)) = true;
30  __gnu_test::fail_wstreambuf bob;
31  wostream stream(&bob);
32  stream.exceptions(ios_base::failbit);
33  wstringbuf sbuf(L"Foo, bar, qux", ios_base::in);
34
35  try
36    {
37      stream << &sbuf;
38      VERIFY( false );
39    }
40  catch (ios_base::failure&)
41    { VERIFY( false ); }
42  catch (__gnu_test::overflow_error&)
43    { }
44  catch (...)
45    { VERIFY( false ); }
46
47  VERIFY( stream.rdstate() & ios_base::failbit );
48  VERIFY( (stream.rdstate() & ios_base::badbit) == 0 );
49}
50
51void test11()
52{
53  bool test __attribute__((unused)) = true;
54  wostringstream stream;
55  stream.exceptions(ios_base::failbit);
56  __gnu_test::fail_wstreambuf bib;
57
58  try
59    {
60      stream << &bib;
61      VERIFY( false );
62    }
63  catch (ios_base::failure&)
64    { VERIFY( false ); }
65  catch (__gnu_test::underflow_error&)
66    { }
67  catch (...)
68    { VERIFY( false ); }
69
70  VERIFY( stream.rdstate() & ios_base::failbit );
71  VERIFY( (stream.rdstate() & ios_base::badbit) == 0 );
72}
73
74// libstdc++/9371
75int main()
76{
77  test9();
78  test11();
79  return 0;
80}
81