1// Copyright (C) 2004, 2009 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 <istream>
20#include <streambuf>
21#include <sstream>
22#include <testsuite_hooks.h>
23#include <testsuite_io.h>
24
25using namespace std;
26
27void test10()
28{
29  bool test __attribute__((unused)) = true;
30  __gnu_test::fail_wstreambuf bib;
31  wistream stream(&bib);
32  stream.exceptions(ios_base::failbit);
33  wstringbuf sbuf(L"", ios_base::out);
34
35  try
36    {
37      stream >> &sbuf;
38      VERIFY( false );
39    }
40  catch (ios_base::failure&)
41    { VERIFY( false ); }
42  catch (__gnu_test::underflow_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 test12()
52{
53  bool test __attribute__((unused)) = true;
54  wistringstream stream(L"foo, bar, qux");
55  stream.exceptions(ios_base::failbit);
56  __gnu_test::fail_wstreambuf bob;
57
58  try
59    {
60      stream >> &bob;
61      VERIFY( false );
62    }
63  catch (ios_base::failure&)
64    { VERIFY( false ); }
65  catch (__gnu_test::overflow_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  test10();
78  test12();
79  return 0;
80}
81