libstdc++: Test error handling in std::print
The standard requires an exception if std::print fails to write to a FILE*. When writing to a std::ostream, failure to format the arguments doesn't affect the stream state, but failure to write to the streadm sets badbit. libstdc++-v3/ChangeLog: * testsuite/27_io/basic_ostream/print/1.cc: Check error handling. * testsuite/27_io/print/1.cc: Likewise.
This commit is contained in:
parent
4da67f63b9
commit
5c22de3fec
2 changed files with 51 additions and 0 deletions
|
@ -103,6 +103,40 @@ test_locale()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
test_errors()
|
||||
{
|
||||
// Failure to generate output is reported by setting badbit.
|
||||
std::stringstream in(std::ios::in);
|
||||
std::print(in, "{}", "nope"); // No exception here.
|
||||
VERIFY(in.bad());
|
||||
#ifdef __cpp_exceptions
|
||||
in.clear();
|
||||
in.exceptions(std::ios::badbit);
|
||||
try
|
||||
{
|
||||
std::print(in, "{}", "nope"); // Should throw now.
|
||||
VERIFY(false);
|
||||
}
|
||||
catch (const std::ios::failure&)
|
||||
{
|
||||
}
|
||||
|
||||
// An exception thrown when formatting the string is propagated
|
||||
// without setting badbit.
|
||||
std::ostringstream out;
|
||||
try
|
||||
{
|
||||
std::vprint_nonunicode(out, "{}", std::make_format_args());
|
||||
VERIFY(false);
|
||||
}
|
||||
catch (const std::format_error&)
|
||||
{
|
||||
}
|
||||
VERIFY(out.good());
|
||||
#endif
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test_print_ostream();
|
||||
|
@ -111,4 +145,5 @@ int main()
|
|||
test_print_no_padding();
|
||||
test_vprint_nonunicode();
|
||||
test_locale();
|
||||
test_errors();
|
||||
}
|
||||
|
|
|
@ -74,6 +74,21 @@ test_vprint_nonunicode()
|
|||
// { dg-output "garbage in . garbage out" }
|
||||
}
|
||||
|
||||
void
|
||||
test_errors()
|
||||
{
|
||||
#ifdef __cpp_exceptions
|
||||
try
|
||||
{
|
||||
std::print(stdin, "{}", "nope");
|
||||
VERIFY(false);
|
||||
}
|
||||
catch (const std::system_error&)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test_print_default();
|
||||
|
@ -82,4 +97,5 @@ int main()
|
|||
test_println_file();
|
||||
test_print_raw();
|
||||
test_vprint_nonunicode();
|
||||
test_errors();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue