mirror of https://github.com/catchorg/Catch2.git
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
![]() |
|
||
|
// Copyright Catch2 Authors
|
||
|
// Distributed under the Boost Software License, Version 1.0.
|
||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||
|
// https://www.boost.org/LICENSE_1_0.txt)
|
||
|
|
||
|
// SPDX-License-Identifier: BSL-1.0
|
||
|
|
||
|
#include <catch2/catch_test_macros.hpp>
|
||
|
#include <catch2/internal/catch_console_colour.hpp>
|
||
|
|
||
|
#include <sstream>
|
||
|
|
||
|
namespace {
|
||
|
class TestColourImpl : public Catch::ColourImpl {
|
||
|
using Catch::ColourImpl::ColourImpl;
|
||
|
// Inherited via ColourImpl
|
||
|
void use( Catch::Colour::Code colourCode ) const override {
|
||
|
m_stream->stream() << "Using code: " << colourCode << '\n';
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class TestStringStream : public Catch::IStream {
|
||
|
mutable std::stringstream m_stream;
|
||
|
public:
|
||
|
std::ostream& stream() const override {
|
||
|
return m_stream;
|
||
|
}
|
||
|
|
||
|
std::string str() const { return m_stream.str(); }
|
||
|
};
|
||
|
}
|
||
|
|
||
|
TEST_CASE("ColourGuard behaviour", "[console-colours]") {
|
||
|
TestStringStream streamWrapper;
|
||
|
TestColourImpl colourImpl( &streamWrapper );
|
||
|
auto& stream = streamWrapper.stream();
|
||
|
|
||
|
SECTION("ColourGuard is disengaged by default") {
|
||
|
{ auto guard = colourImpl.guardColour( Catch::Colour::Red ); }
|
||
|
|
||
|
REQUIRE( streamWrapper.str().empty() );
|
||
|
}
|
||
|
|
||
|
SECTION("ColourGuard is engaged by op<<") {
|
||
|
stream << "1\n" << colourImpl.guardColour( Catch::Colour::Red ) << "2\n";
|
||
|
stream << "3\n";
|
||
|
|
||
|
REQUIRE( streamWrapper.str() == "1\nUsing code: 2\n2\nUsing code: 0\n3\n" );
|
||
|
}
|
||
|
|
||
|
SECTION("ColourGuard can be engaged explicitly") {
|
||
|
{
|
||
|
auto guard =
|
||
|
colourImpl.guardColour( Catch::Colour::Red ).engage( stream );
|
||
|
stream << "A\n"
|
||
|
<< "B\n";
|
||
|
}
|
||
|
stream << "C\n";
|
||
|
REQUIRE( streamWrapper.str() ==
|
||
|
"Using code: 2\nA\nB\nUsing code: 0\nC\n" );
|
||
|
}
|
||
|
}
|