12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // 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 <catch2/internal/catch_istream.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 {
- std::stringstream m_stream;
- public:
- std::ostream& stream() 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" );
- }
- }
|