SFML/test/System/Err.test.cpp

42 lines
1.6 KiB
C++
Raw Normal View History

2022-04-22 06:00:51 +08:00
#include <SFML/System/Err.hpp>
2022-07-18 06:18:40 +08:00
#include <doctest/doctest.h>
2022-04-22 06:00:51 +08:00
2022-07-05 00:20:58 +08:00
#include <sstream>
TEST_CASE("[System] sf::err")
2022-04-22 06:00:51 +08:00
{
SUBCASE("Overflow default buffer")
{
// No assertion macros in this subcase since nothing about this can be directly observed.
// Intention is to ensure DefaultErrStreamBuf::overflow gets called.
sf::err() << "SFML is a simple, fast, cross-platform and object-oriented multimedia API."
2022-07-05 00:20:58 +08:00
"It provides access to windowing, graphics, audio and network."
"It is written in C++, and has bindings for various languages such as C, .Net, Ruby, Python.";
2022-04-22 06:00:51 +08:00
}
SUBCASE("Redirect buffer to observe contents")
{
sf::err() << "We'll never be able to observe this" << std::endl; // Ensure buffer is flushed
auto* const defaultStreamBuffer = sf::err().rdbuf();
2022-04-22 06:00:51 +08:00
CHECK(defaultStreamBuffer != nullptr);
const std::stringstream stream;
2022-04-22 06:00:51 +08:00
sf::err().rdbuf(stream.rdbuf());
sf::err() << "Something went wrong!\n";
CHECK(stream.str() == "Something went wrong!\n");
sf::err().rdbuf(nullptr);
sf::err() << "Sent to the abyss";
CHECK(stream.str() == "Something went wrong!\n");
sf::err().rdbuf(stream.rdbuf());
sf::err() << "Back to the stringstream :)\n";
CHECK(stream.str() == "Something went wrong!\nBack to the stringstream :)\n");
// Restore sf::err to default stream defaultStreamBuffer
sf::err().rdbuf(defaultStreamBuffer);
CHECK(sf::err().rdbuf() == defaultStreamBuffer);
}
}