Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorPhil Nash2014-10-21 07:24:30 +0100
committerPhil Nash2014-10-21 07:24:30 +0100
commitbde3567f3ec079b29a0c2ed24c4e385008e3b36f (patch)
tree60f8cf50f7e38585f8bacf6246575de0b34486e1 /include
parenta5dca3d370c8ab25563e5c938d8666cb2882a689 (diff)
downloadcatch3-bde3567f3ec079b29a0c2ed24c4e385008e3b36f.tar.gz
Cleaned up terminal colouring impl and added more config options
Diffstat (limited to 'include')
-rw-r--r--include/internal/catch_console_colour.hpp5
-rw-r--r--include/internal/catch_console_colour_impl.hpp96
-rw-r--r--include/internal/catch_fatal_condition.hpp4
3 files changed, 57 insertions, 48 deletions
diff --git a/include/internal/catch_console_colour.hpp b/include/internal/catch_console_colour.hpp
index 4caed07c..f0a8a697 100644
--- a/include/internal/catch_console_colour.hpp
+++ b/include/internal/catch_console_colour.hpp
@@ -12,10 +12,6 @@
namespace Catch {
- namespace Detail {
- struct IColourImpl;
- }
-
struct Colour {
enum Code {
None = 0,
@@ -61,7 +57,6 @@ namespace Catch {
static void use( Code _colourCode );
private:
- static Detail::IColourImpl* impl();
bool m_moved;
};
diff --git a/include/internal/catch_console_colour_impl.hpp b/include/internal/catch_console_colour_impl.hpp
index 3920a98a..a62550bd 100644
--- a/include/internal/catch_console_colour_impl.hpp
+++ b/include/internal/catch_console_colour_impl.hpp
@@ -10,14 +10,36 @@
#include "catch_console_colour.hpp"
-namespace Catch { namespace Detail {
- struct IColourImpl {
- virtual ~IColourImpl() {}
- virtual void use( Colour::Code _colourCode ) = 0;
- };
-}}
+namespace Catch {
+ namespace {
-#if defined ( CATCH_PLATFORM_WINDOWS ) /////////////////////////////////////////
+ struct IColourImpl {
+ virtual ~IColourImpl() {}
+ virtual void use( Colour::Code _colourCode ) = 0;
+ };
+
+ struct NoColourImpl : IColourImpl {
+ void use( Colour::Code ) {}
+
+ static IColourImpl* instance() {
+ static NoColourImpl s_instance;
+ return &s_instance;
+ }
+ };
+
+ } // anon namespace
+} // namespace Catch
+
+#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI )
+# ifdef CATCH_PLATFORM_WINDOWS
+# define CATCH_CONFIG_COLOUR_WINDOWS
+# else
+# define CATCH_CONFIG_COLOUR_ANSI
+# endif
+#endif
+
+
+#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) /////////////////////////////////////////
#ifndef NOMINMAX
#define NOMINMAX
@@ -32,7 +54,7 @@ namespace Catch { namespace Detail {
namespace Catch {
namespace {
- class Win32ColourImpl : public Detail::IColourImpl {
+ class Win32ColourImpl : public IColourImpl {
public:
Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) )
{
@@ -69,11 +91,7 @@ namespace {
WORD originalAttributes;
};
- inline bool shouldUseColourForPlatform() {
- return true;
- }
-
- static Detail::IColourImpl* platformColourInstance() {
+ IColourImpl* platformColourInstance() {
static Win32ColourImpl s_instance;
return &s_instance;
}
@@ -81,7 +99,7 @@ namespace {
} // end anon namespace
} // end namespace Catch
-#else // Not Windows - assumed to be POSIX compatible //////////////////////////
+#elif defined( CATCH_CONFIG_COLOUR_ANSI ) //////////////////////////////////////
#include <unistd.h>
@@ -92,7 +110,7 @@ namespace {
// Thanks to Adam Strzelecki for original contribution
// (http://github.com/nanoant)
// https://github.com/philsquared/Catch/pull/131
- class PosixColourImpl : public Detail::IColourImpl {
+ class PosixColourImpl : public IColourImpl {
public:
virtual void use( Colour::Code _colourCode ) {
switch( _colourCode ) {
@@ -113,53 +131,47 @@ namespace {
case Colour::Bright: throw std::logic_error( "not a colour" );
}
}
+ static IColourImpl* instance() {
+ static PosixColourImpl s_instance;
+ return &s_instance;
+ }
+
private:
void setColour( const char* _escapeCode ) {
Catch::cout() << '\033' << _escapeCode;
}
};
- inline bool shouldUseColourForPlatform() {
- return isatty(STDOUT_FILENO);
- }
-
- static Detail::IColourImpl* platformColourInstance() {
- static PosixColourImpl s_instance;
- return &s_instance;
+ IColourImpl* platformColourInstance() {
+ return isatty(STDOUT_FILENO)
+ ? PosixColourImpl::instance()
+ : NoColourImpl::instance();
}
} // end anon namespace
} // end namespace Catch
-#endif // not Windows
+#else // not Windows or ANSI ///////////////////////////////////////////////
namespace Catch {
- namespace {
- struct NoColourImpl : Detail::IColourImpl {
- void use( Colour::Code ) {}
+ static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); }
- static IColourImpl* instance() {
- static NoColourImpl s_instance;
- return &s_instance;
- }
- };
- static bool shouldUseColour() {
- return shouldUseColourForPlatform() && !isDebuggerActive();
- }
- }
+} // end namespace Catch
+
+#endif // Windows/ ANSI/ None
+
+namespace Catch {
Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); }
Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast<Colour&>( _other ).m_moved = true; }
Colour::~Colour(){ if( !m_moved ) use( None ); }
- void Colour::use( Code _colourCode ) {
- impl()->use( _colourCode );
- }
- Detail::IColourImpl* Colour::impl() {
- return shouldUseColour()
- ? platformColourInstance()
- : NoColourImpl::instance();
+ void Colour::use( Code _colourCode ) {
+ static IColourImpl* impl = isDebuggerActive()
+ ? NoColourImpl::instance()
+ : platformColourInstance();
+ impl->use( _colourCode );
}
} // end namespace Catch
diff --git a/include/internal/catch_fatal_condition.hpp b/include/internal/catch_fatal_condition.hpp
index 4433dfed..dd21d590 100644
--- a/include/internal/catch_fatal_condition.hpp
+++ b/include/internal/catch_fatal_condition.hpp
@@ -28,7 +28,9 @@ namespace Catch {
namespace Catch {
- struct FatalConditionHandler {};
+ struct FatalConditionHandler {
+ void reset() {}
+ };
} // namespace Catch