Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
json
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
json
Commits
1f31a5b8
Unverified
Commit
1f31a5b8
authored
Aug 16, 2017
by
Niels Lohmann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
⬆
Catch v1.9.7
parent
f5a53de8
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
129 additions
and
56 deletions
+129
-56
catch.hpp
test/thirdparty/catch/catch.hpp
+129
-56
No files found.
test/thirdparty/catch/catch.hpp
View file @
1f31a5b8
/*
/*
* Catch v1.9.
6
* Catch v1.9.
7
* Generated: 2017-0
6-27 12:19:54.557875
* Generated: 2017-0
8-10 23:49:15.233907
* ----------------------------------------------------------
* ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly
* This file has been merged from multiple headers. Please don't edit it directly
* Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved.
* Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved.
...
@@ -145,6 +145,11 @@
...
@@ -145,6 +145,11 @@
#endif
#endif
#ifdef __OS400__
# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
# define CATCH_CONFIG_COLOUR_NONE
#endif
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Cygwin
// Cygwin
#ifdef __CYGWIN__
#ifdef __CYGWIN__
...
@@ -414,14 +419,14 @@ namespace Catch {
...
@@ -414,14 +419,14 @@ namespace Catch {
};
};
template
<
typename
ContainerT
>
template
<
typename
ContainerT
>
inline
void
deleteAll
(
ContainerT
&
container
)
{
void
deleteAll
(
ContainerT
&
container
)
{
typename
ContainerT
::
const_iterator
it
=
container
.
begin
();
typename
ContainerT
::
const_iterator
it
=
container
.
begin
();
typename
ContainerT
::
const_iterator
itEnd
=
container
.
end
();
typename
ContainerT
::
const_iterator
itEnd
=
container
.
end
();
for
(;
it
!=
itEnd
;
++
it
)
for
(;
it
!=
itEnd
;
++
it
)
delete
*
it
;
delete
*
it
;
}
}
template
<
typename
AssociativeContainerT
>
template
<
typename
AssociativeContainerT
>
inline
void
deleteAllValues
(
AssociativeContainerT
&
container
)
{
void
deleteAllValues
(
AssociativeContainerT
&
container
)
{
typename
AssociativeContainerT
::
const_iterator
it
=
container
.
begin
();
typename
AssociativeContainerT
::
const_iterator
it
=
container
.
begin
();
typename
AssociativeContainerT
::
const_iterator
itEnd
=
container
.
end
();
typename
AssociativeContainerT
::
const_iterator
itEnd
=
container
.
end
();
for
(;
it
!=
itEnd
;
++
it
)
for
(;
it
!=
itEnd
;
++
it
)
...
@@ -501,7 +506,6 @@ namespace Catch {
...
@@ -501,7 +506,6 @@ namespace Catch {
{
{
public
:
public
:
NotImplementedException
(
SourceLineInfo
const
&
lineInfo
);
NotImplementedException
(
SourceLineInfo
const
&
lineInfo
);
NotImplementedException
(
NotImplementedException
const
&
)
{}
virtual
~
NotImplementedException
()
CATCH_NOEXCEPT
{}
virtual
~
NotImplementedException
()
CATCH_NOEXCEPT
{}
...
@@ -771,7 +775,7 @@ void registerTestCaseFunction
...
@@ -771,7 +775,7 @@ void registerTestCaseFunction
#define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \
#define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \
static void TestName(); \
static void TestName(); \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); } \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); }
/* NOLINT */
\
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \
static void TestName()
static void TestName()
#define INTERNAL_CATCH_TESTCASE( ... ) \
#define INTERNAL_CATCH_TESTCASE( ... ) \
...
@@ -780,7 +784,7 @@ void registerTestCaseFunction
...
@@ -780,7 +784,7 @@ void registerTestCaseFunction
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
#define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); } \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); }
/* NOLINT */
\
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
...
@@ -790,7 +794,7 @@ void registerTestCaseFunction
...
@@ -790,7 +794,7 @@ void registerTestCaseFunction
struct TestName : ClassName{ \
struct TestName : ClassName{ \
void test(); \
void test(); \
}; \
}; \
Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestName::test, #ClassName, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); \
Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestName::test, #ClassName, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO );
/* NOLINT */
\
} \
} \
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \
void TestName::test()
void TestName::test()
...
@@ -800,7 +804,7 @@ void registerTestCaseFunction
...
@@ -800,7 +804,7 @@ void registerTestCaseFunction
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \
#define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); \
Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) );
/* NOLINT */
\
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS
#else
#else
...
@@ -808,7 +812,7 @@ void registerTestCaseFunction
...
@@ -808,7 +812,7 @@ void registerTestCaseFunction
#define INTERNAL_CATCH_TESTCASE2( TestName, Name, Desc ) \
#define INTERNAL_CATCH_TESTCASE2( TestName, Name, Desc ) \
static void TestName(); \
static void TestName(); \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); }\
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); }
/* NOLINT */
\
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \
static void TestName()
static void TestName()
#define INTERNAL_CATCH_TESTCASE( Name, Desc ) \
#define INTERNAL_CATCH_TESTCASE( Name, Desc ) \
...
@@ -817,7 +821,7 @@ void registerTestCaseFunction
...
@@ -817,7 +821,7 @@ void registerTestCaseFunction
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \
#define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( Name, Desc ), CATCH_INTERNAL_LINEINFO ); } \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( Name, Desc ), CATCH_INTERNAL_LINEINFO ); }
/* NOLINT */
\
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
...
@@ -827,7 +831,7 @@ void registerTestCaseFunction
...
@@ -827,7 +831,7 @@ void registerTestCaseFunction
struct TestCaseName : ClassName{ \
struct TestCaseName : ClassName{ \
void test(); \
void test(); \
}; \
}; \
Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestCaseName::test, #ClassName, Catch::NameAndDesc( TestName, Desc ), CATCH_INTERNAL_LINEINFO ); \
Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestCaseName::test, #ClassName, Catch::NameAndDesc( TestName, Desc ), CATCH_INTERNAL_LINEINFO );
/* NOLINT */
\
} \
} \
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \
void TestCaseName::test()
void TestCaseName::test()
...
@@ -837,7 +841,7 @@ void registerTestCaseFunction
...
@@ -837,7 +841,7 @@ void registerTestCaseFunction
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_REGISTER_TESTCASE( Function, Name, Desc ) \
#define INTERNAL_CATCH_REGISTER_TESTCASE( Function, Name, Desc ) \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \
Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); \
Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) );
/* NOLINT */
\
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS
CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS
#endif
#endif
...
@@ -933,7 +937,7 @@ namespace Catch {
...
@@ -933,7 +937,7 @@ namespace Catch {
struct
AssertionInfo
struct
AssertionInfo
{
{
AssertionInfo
()
{}
AssertionInfo
()
;
AssertionInfo
(
char
const
*
_macroName
,
AssertionInfo
(
char
const
*
_macroName
,
SourceLineInfo
const
&
_lineInfo
,
SourceLineInfo
const
&
_lineInfo
,
char
const
*
_capturedExpression
,
char
const
*
_capturedExpression
,
...
@@ -1158,23 +1162,23 @@ namespace Matchers {
...
@@ -1158,23 +1162,23 @@ namespace Matchers {
// This allows the types to be inferred
// This allows the types to be inferred
// - deprecated: prefer ||, && and !
// - deprecated: prefer ||, && and !
template
<
typename
T
>
template
<
typename
T
>
inline
Impl
::
MatchNotOf
<
T
>
Not
(
Impl
::
MatcherBase
<
T
>
const
&
underlyingMatcher
)
{
Impl
::
MatchNotOf
<
T
>
Not
(
Impl
::
MatcherBase
<
T
>
const
&
underlyingMatcher
)
{
return
Impl
::
MatchNotOf
<
T
>
(
underlyingMatcher
);
return
Impl
::
MatchNotOf
<
T
>
(
underlyingMatcher
);
}
}
template
<
typename
T
>
template
<
typename
T
>
inline
Impl
::
MatchAllOf
<
T
>
AllOf
(
Impl
::
MatcherBase
<
T
>
const
&
m1
,
Impl
::
MatcherBase
<
T
>
const
&
m2
)
{
Impl
::
MatchAllOf
<
T
>
AllOf
(
Impl
::
MatcherBase
<
T
>
const
&
m1
,
Impl
::
MatcherBase
<
T
>
const
&
m2
)
{
return
Impl
::
MatchAllOf
<
T
>
()
&&
m1
&&
m2
;
return
Impl
::
MatchAllOf
<
T
>
()
&&
m1
&&
m2
;
}
}
template
<
typename
T
>
template
<
typename
T
>
inline
Impl
::
MatchAllOf
<
T
>
AllOf
(
Impl
::
MatcherBase
<
T
>
const
&
m1
,
Impl
::
MatcherBase
<
T
>
const
&
m2
,
Impl
::
MatcherBase
<
T
>
const
&
m3
)
{
Impl
::
MatchAllOf
<
T
>
AllOf
(
Impl
::
MatcherBase
<
T
>
const
&
m1
,
Impl
::
MatcherBase
<
T
>
const
&
m2
,
Impl
::
MatcherBase
<
T
>
const
&
m3
)
{
return
Impl
::
MatchAllOf
<
T
>
()
&&
m1
&&
m2
&&
m3
;
return
Impl
::
MatchAllOf
<
T
>
()
&&
m1
&&
m2
&&
m3
;
}
}
template
<
typename
T
>
template
<
typename
T
>
inline
Impl
::
MatchAnyOf
<
T
>
AnyOf
(
Impl
::
MatcherBase
<
T
>
const
&
m1
,
Impl
::
MatcherBase
<
T
>
const
&
m2
)
{
Impl
::
MatchAnyOf
<
T
>
AnyOf
(
Impl
::
MatcherBase
<
T
>
const
&
m1
,
Impl
::
MatcherBase
<
T
>
const
&
m2
)
{
return
Impl
::
MatchAnyOf
<
T
>
()
||
m1
||
m2
;
return
Impl
::
MatchAnyOf
<
T
>
()
||
m1
||
m2
;
}
}
template
<
typename
T
>
template
<
typename
T
>
inline
Impl
::
MatchAnyOf
<
T
>
AnyOf
(
Impl
::
MatcherBase
<
T
>
const
&
m1
,
Impl
::
MatcherBase
<
T
>
const
&
m2
,
Impl
::
MatcherBase
<
T
>
const
&
m3
)
{
Impl
::
MatchAnyOf
<
T
>
AnyOf
(
Impl
::
MatcherBase
<
T
>
const
&
m1
,
Impl
::
MatcherBase
<
T
>
const
&
m2
,
Impl
::
MatcherBase
<
T
>
const
&
m3
)
{
return
Impl
::
MatchAnyOf
<
T
>
()
||
m1
||
m2
||
m3
;
return
Impl
::
MatchAnyOf
<
T
>
()
||
m1
||
m2
||
m3
;
}
}
...
@@ -1219,7 +1223,7 @@ namespace Catch {
...
@@ -1219,7 +1223,7 @@ namespace Catch {
template
<
typename
T
>
template
<
typename
T
>
ResultBuilder
&
operator
<<
(
T
const
&
value
)
{
ResultBuilder
&
operator
<<
(
T
const
&
value
)
{
m_
stream
().
oss
<<
value
;
stream
().
oss
<<
value
;
return
*
this
;
return
*
this
;
}
}
...
@@ -1253,6 +1257,16 @@ namespace Catch {
...
@@ -1253,6 +1257,16 @@ namespace Catch {
AssertionInfo
m_assertionInfo
;
AssertionInfo
m_assertionInfo
;
AssertionResultData
m_data
;
AssertionResultData
m_data
;
CopyableStream
&
stream
()
{
if
(
!
m_usedStream
)
{
m_usedStream
=
true
;
m_stream
().
oss
.
str
(
""
);
}
return
m_stream
();
}
static
CopyableStream
&
m_stream
()
static
CopyableStream
&
m_stream
()
{
{
static
CopyableStream
s
;
static
CopyableStream
s
;
...
@@ -1262,6 +1276,7 @@ namespace Catch {
...
@@ -1262,6 +1276,7 @@ namespace Catch {
bool
m_shouldDebugBreak
;
bool
m_shouldDebugBreak
;
bool
m_shouldThrow
;
bool
m_shouldThrow
;
bool
m_guardException
;
bool
m_guardException
;
bool
m_usedStream
;
};
};
}
// namespace Catch
}
// namespace Catch
...
@@ -1302,7 +1317,7 @@ namespace Internal {
...
@@ -1302,7 +1317,7 @@ namespace Internal {
template
<>
struct
OperatorTraits
<
IsGreaterThanOrEqualTo
>
{
static
const
char
*
getName
(){
return
">="
;
}
};
template
<>
struct
OperatorTraits
<
IsGreaterThanOrEqualTo
>
{
static
const
char
*
getName
(){
return
">="
;
}
};
template
<
typename
T
>
template
<
typename
T
>
inline
T
&
opCast
(
T
const
&
t
)
{
return
const_cast
<
T
&>
(
t
);
}
T
&
opCast
(
T
const
&
t
)
{
return
const_cast
<
T
&>
(
t
);
}
// nullptr_t support based on pull request #154 from Konstantin Baumann
// nullptr_t support based on pull request #154 from Konstantin Baumann
#ifdef CATCH_CONFIG_CPP11_NULLPTR
#ifdef CATCH_CONFIG_CPP11_NULLPTR
...
@@ -1312,7 +1327,7 @@ namespace Internal {
...
@@ -1312,7 +1327,7 @@ namespace Internal {
// So the compare overloads can be operator agnostic we convey the operator as a template
// So the compare overloads can be operator agnostic we convey the operator as a template
// enum, which is used to specialise an Evaluator for doing the comparison.
// enum, which is used to specialise an Evaluator for doing the comparison.
template
<
typename
T1
,
typename
T2
,
Operator
Op
>
template
<
typename
T1
,
typename
T2
,
Operator
Op
>
class
Evaluator
{};
struct
Evaluator
{};
template
<
typename
T1
,
typename
T2
>
template
<
typename
T1
,
typename
T2
>
struct
Evaluator
<
T1
,
T2
,
IsEqualTo
>
{
struct
Evaluator
<
T1
,
T2
,
IsEqualTo
>
{
...
@@ -1667,7 +1682,7 @@ namespace Detail {
...
@@ -1667,7 +1682,7 @@ namespace Detail {
std
::
string
rawMemoryToString
(
const
void
*
object
,
std
::
size_t
size
);
std
::
string
rawMemoryToString
(
const
void
*
object
,
std
::
size_t
size
);
template
<
typename
T
>
template
<
typename
T
>
inline
std
::
string
rawMemoryToString
(
const
T
&
object
)
{
std
::
string
rawMemoryToString
(
const
T
&
object
)
{
return
rawMemoryToString
(
&
object
,
sizeof
(
object
)
);
return
rawMemoryToString
(
&
object
,
sizeof
(
object
)
);
}
}
...
@@ -1956,7 +1971,7 @@ private:
...
@@ -1956,7 +1971,7 @@ private:
namespace
Catch
{
namespace
Catch
{
template
<
typename
T
>
template
<
typename
T
>
inline
ExpressionLhs
<
T
const
&>
ResultBuilder
::
operator
<=
(
T
const
&
operand
)
{
ExpressionLhs
<
T
const
&>
ResultBuilder
::
operator
<=
(
T
const
&
operand
)
{
return
ExpressionLhs
<
T
const
&>
(
*
this
,
operand
);
return
ExpressionLhs
<
T
const
&>
(
*
this
,
operand
);
}
}
...
@@ -1965,7 +1980,7 @@ namespace Catch {
...
@@ -1965,7 +1980,7 @@ namespace Catch {
}
}
template
<
typename
ArgT
,
typename
MatcherT
>
template
<
typename
ArgT
,
typename
MatcherT
>
inline
void
ResultBuilder
::
captureMatch
(
ArgT
const
&
arg
,
MatcherT
const
&
matcher
,
void
ResultBuilder
::
captureMatch
(
ArgT
const
&
arg
,
MatcherT
const
&
matcher
,
char
const
*
matcherString
)
{
char
const
*
matcherString
)
{
MatchExpression
<
ArgT
const
&
,
MatcherT
const
&>
expr
(
arg
,
matcher
,
matcherString
);
MatchExpression
<
ArgT
const
&
,
MatcherT
const
&>
expr
(
arg
,
matcher
,
matcherString
);
setResultType
(
matcher
.
match
(
arg
)
);
setResultType
(
matcher
.
match
(
arg
)
);
...
@@ -2064,6 +2079,10 @@ namespace Catch {
...
@@ -2064,6 +2079,10 @@ namespace Catch {
virtual
void
exceptionEarlyReported
()
=
0
;
virtual
void
exceptionEarlyReported
()
=
0
;
virtual
void
handleFatalErrorCondition
(
std
::
string
const
&
message
)
=
0
;
virtual
void
handleFatalErrorCondition
(
std
::
string
const
&
message
)
=
0
;
virtual
bool
lastAssertionPassed
()
=
0
;
virtual
void
assertionPassed
()
=
0
;
virtual
void
assertionRun
()
=
0
;
};
};
IResultCapture
&
getResultCapture
();
IResultCapture
&
getResultCapture
();
...
@@ -2106,9 +2125,9 @@ namespace Catch{
...
@@ -2106,9 +2125,9 @@ namespace Catch{
#if defined(__ppc64__) || defined(__ppc__)
#if defined(__ppc64__) || defined(__ppc__)
#define CATCH_TRAP() \
#define CATCH_TRAP() \
__asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \
__asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \
: : : "memory","r0","r3","r4" )
: : : "memory","r0","r3","r4" )
/* NOLINT */
#else
#else
#define CATCH_TRAP() __asm__("int $3\n" : : )
#define CATCH_TRAP() __asm__("int $3\n" : :
/* NOLINT */
)
#endif
#endif
#elif defined(CATCH_PLATFORM_LINUX)
#elif defined(CATCH_PLATFORM_LINUX)
...
@@ -2116,7 +2135,7 @@ namespace Catch{
...
@@ -2116,7 +2135,7 @@ namespace Catch{
// directly at the location of the failing check instead of breaking inside
// directly at the location of the failing check instead of breaking inside
// raise() called from it, i.e. one stack frame below.
// raise() called from it, i.e. one stack frame below.
#if defined(__GNUC__) && (defined(__i386) || defined(__x86_64))
#if defined(__GNUC__) && (defined(__i386) || defined(__x86_64))
#define CATCH_TRAP() asm volatile ("int $3")
#define CATCH_TRAP() asm volatile ("int $3")
/* NOLINT */
#else // Fall back to the generic way.
#else // Fall back to the generic way.
#include <signal.h>
#include <signal.h>
...
@@ -2211,12 +2230,12 @@ namespace Catch {
...
@@ -2211,12 +2230,12 @@ namespace Catch {
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_IF( macroName, resultDisposition, expr ) \
#define INTERNAL_CATCH_IF( macroName, resultDisposition, expr ) \
INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ); \
INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ); \
if( Catch::getResultCapture().
getLastResult()->succeed
ed() )
if( Catch::getResultCapture().
lastAssertionPass
ed() )
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, expr ) \
#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, expr ) \
INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ); \
INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ); \
if( !Catch::getResultCapture().
getLastResult()->succeed
ed() )
if( !Catch::getResultCapture().
lastAssertionPass
ed() )
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, expr ) \
#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, expr ) \
...
@@ -2776,13 +2795,6 @@ namespace Detail {
...
@@ -2776,13 +2795,6 @@ namespace Detail {
m_value
(
value
)
m_value
(
value
)
{}
{}
Approx
(
Approx
const
&
other
)
:
m_epsilon
(
other
.
m_epsilon
),
m_margin
(
other
.
m_margin
),
m_scale
(
other
.
m_scale
),
m_value
(
other
.
m_value
)
{}
static
Approx
custom
()
{
static
Approx
custom
()
{
return
Approx
(
0
);
return
Approx
(
0
);
}
}
...
@@ -3706,7 +3718,7 @@ namespace Catch {
...
@@ -3706,7 +3718,7 @@ namespace Catch {
ITagAliasRegistry
const
*
m_tagAliases
;
ITagAliasRegistry
const
*
m_tagAliases
;
public
:
public
:
TestSpecParser
(
ITagAliasRegistry
const
&
tagAliases
)
:
m_tagAliases
(
&
tagAliases
)
{}
TestSpecParser
(
ITagAliasRegistry
const
&
tagAliases
)
:
m_mode
(
None
),
m_exclusion
(
false
),
m_start
(
0
),
m_pos
(
0
),
m_tagAliases
(
&
tagAliases
)
{}
TestSpecParser
&
parse
(
std
::
string
const
&
arg
)
{
TestSpecParser
&
parse
(
std
::
string
const
&
arg
)
{
m_mode
=
None
;
m_mode
=
None
;
...
@@ -3890,6 +3902,7 @@ namespace Catch {
...
@@ -3890,6 +3902,7 @@ namespace Catch {
std
::
ostream
&
cout
();
std
::
ostream
&
cout
();
std
::
ostream
&
cerr
();
std
::
ostream
&
cerr
();
std
::
ostream
&
clog
();
struct
IStream
{
struct
IStream
{
virtual
~
IStream
()
CATCH_NOEXCEPT
;
virtual
~
IStream
()
CATCH_NOEXCEPT
;
...
@@ -4222,7 +4235,7 @@ namespace Tbc {
...
@@ -4222,7 +4235,7 @@ namespace Tbc {
return
oss
.
str
();
return
oss
.
str
();
}
}
inline
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
_stream
,
Text
const
&
_text
)
{
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
_stream
,
Text
const
&
_text
)
{
for
(
Text
::
const_iterator
it
=
_text
.
begin
(),
itEnd
=
_text
.
end
();
for
(
Text
::
const_iterator
it
=
_text
.
begin
(),
itEnd
=
_text
.
end
();
it
!=
itEnd
;
++
it
)
{
it
!=
itEnd
;
++
it
)
{
if
(
it
!=
_text
.
begin
()
)
if
(
it
!=
_text
.
begin
()
)
...
@@ -6574,6 +6587,29 @@ namespace Catch {
...
@@ -6574,6 +6587,29 @@ namespace Catch {
std
::
string
&
m_targetString
;
std
::
string
&
m_targetString
;
};
};
// StdErr has two constituent streams in C++, std::cerr and std::clog
// This means that we need to redirect 2 streams into 1 to keep proper
// order of writes and cannot use StreamRedirect on its own
class
StdErrRedirect
{
public
:
StdErrRedirect
(
std
::
string
&
targetString
)
:
m_cerrBuf
(
cerr
().
rdbuf
()
),
m_clogBuf
(
clog
().
rdbuf
()),
m_targetString
(
targetString
){
cerr
().
rdbuf
(
m_oss
.
rdbuf
());
clog
().
rdbuf
(
m_oss
.
rdbuf
());
}
~
StdErrRedirect
()
{
m_targetString
+=
m_oss
.
str
();
cerr
().
rdbuf
(
m_cerrBuf
);
clog
().
rdbuf
(
m_clogBuf
);
}
private
:
std
::
streambuf
*
m_cerrBuf
;
std
::
streambuf
*
m_clogBuf
;
std
::
ostringstream
m_oss
;
std
::
string
&
m_targetString
;
};
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
class
RunContext
:
public
IResultCapture
,
public
IRunner
{
class
RunContext
:
public
IResultCapture
,
public
IRunner
{
...
@@ -6676,6 +6712,23 @@ namespace Catch {
...
@@ -6676,6 +6712,23 @@ namespace Catch {
m_lastResult
=
result
;
m_lastResult
=
result
;
}
}
virtual
bool
lastAssertionPassed
()
{
return
m_totals
.
assertions
.
passed
==
(
m_prevPassed
+
1
);
}
virtual
void
assertionPassed
()
{
m_totals
.
assertions
.
passed
++
;
m_lastAssertionInfo
.
capturedExpression
=
"{Unknown expression after the reported line}"
;
m_lastAssertionInfo
.
macroName
=
""
;
}
virtual
void
assertionRun
()
{
m_prevPassed
=
m_totals
.
assertions
.
passed
;
}
virtual
bool
sectionStarted
(
virtual
bool
sectionStarted
(
SectionInfo
const
&
sectionInfo
,
SectionInfo
const
&
sectionInfo
,
Counts
&
assertions
Counts
&
assertions
...
@@ -6776,6 +6829,7 @@ namespace Catch {
...
@@ -6776,6 +6829,7 @@ namespace Catch {
Totals
deltaTotals
;
Totals
deltaTotals
;
deltaTotals
.
testCases
.
failed
=
1
;
deltaTotals
.
testCases
.
failed
=
1
;
deltaTotals
.
assertions
.
failed
=
1
;
m_reporter
->
testCaseEnded
(
TestCaseStats
(
testInfo
,
m_reporter
->
testCaseEnded
(
TestCaseStats
(
testInfo
,
deltaTotals
,
deltaTotals
,
std
::
string
(),
std
::
string
(),
...
@@ -6810,7 +6864,7 @@ namespace Catch {
...
@@ -6810,7 +6864,7 @@ namespace Catch {
timer
.
start
();
timer
.
start
();
if
(
m_reporter
->
getPreferences
().
shouldRedirectStdOut
)
{
if
(
m_reporter
->
getPreferences
().
shouldRedirectStdOut
)
{
StreamRedirect
coutRedir
(
Catch
::
cout
(),
redirectedCout
);
StreamRedirect
coutRedir
(
Catch
::
cout
(),
redirectedCout
);
St
reamRedirect
cerrRedir
(
Catch
::
cerr
(),
redirectedCerr
);
St
dErrRedirect
errRedir
(
redirectedCerr
);
invokeActiveTestCase
();
invokeActiveTestCase
();
}
}
else
{
else
{
...
@@ -6886,6 +6940,7 @@ namespace Catch {
...
@@ -6886,6 +6940,7 @@ namespace Catch {
std
::
vector
<
SectionEndInfo
>
m_unfinishedSections
;
std
::
vector
<
SectionEndInfo
>
m_unfinishedSections
;
std
::
vector
<
ITracker
*>
m_activeSections
;
std
::
vector
<
ITracker
*>
m_activeSections
;
TrackerContext
m_trackerContext
;
TrackerContext
m_trackerContext
;
size_t
m_prevPassed
;
bool
m_shouldReportUnexpected
;
bool
m_shouldReportUnexpected
;
};
};
...
@@ -6944,10 +6999,14 @@ namespace Catch {
...
@@ -6944,10 +6999,14 @@ namespace Catch {
return
reporter
;
return
reporter
;
}
}
#if !defined(CATCH_CONFIG_DEFAULT_REPORTER)
#define CATCH_CONFIG_DEFAULT_REPORTER "console"
#endif
Ptr
<
IStreamingReporter
>
makeReporter
(
Ptr
<
Config
>
const
&
config
)
{
Ptr
<
IStreamingReporter
>
makeReporter
(
Ptr
<
Config
>
const
&
config
)
{
std
::
vector
<
std
::
string
>
reporters
=
config
->
getReporterNames
();
std
::
vector
<
std
::
string
>
reporters
=
config
->
getReporterNames
();
if
(
reporters
.
empty
()
)
if
(
reporters
.
empty
()
)
reporters
.
push_back
(
"console"
);
reporters
.
push_back
(
CATCH_CONFIG_DEFAULT_REPORTER
);
Ptr
<
IStreamingReporter
>
reporter
;
Ptr
<
IStreamingReporter
>
reporter
;
for
(
std
::
vector
<
std
::
string
>::
const_iterator
it
=
reporters
.
begin
(),
itEnd
=
reporters
.
end
();
for
(
std
::
vector
<
std
::
string
>::
const_iterator
it
=
reporters
.
begin
(),
itEnd
=
reporters
.
end
();
...
@@ -7007,11 +7066,11 @@ namespace Catch {
...
@@ -7007,11 +7066,11 @@ namespace Catch {
if
(
lastSlash
!=
std
::
string
::
npos
)
if
(
lastSlash
!=
std
::
string
::
npos
)
filename
=
filename
.
substr
(
lastSlash
+
1
);
filename
=
filename
.
substr
(
lastSlash
+
1
);
std
::
string
::
size_type
lastDot
=
filename
.
find_last_of
(
"."
);
std
::
string
::
size_type
lastDot
=
filename
.
find_last_of
(
'.'
);
if
(
lastDot
!=
std
::
string
::
npos
)
if
(
lastDot
!=
std
::
string
::
npos
)
filename
=
filename
.
substr
(
0
,
lastDot
);
filename
=
filename
.
substr
(
0
,
lastDot
);
tags
.
insert
(
"#"
+
filename
);
tags
.
insert
(
'#'
+
filename
);
setTags
(
test
,
tags
);
setTags
(
test
,
tags
);
}
}
}
}
...
@@ -7663,6 +7722,9 @@ namespace Catch {
...
@@ -7663,6 +7722,9 @@ namespace Catch {
std
::
ostream
&
cerr
()
{
std
::
ostream
&
cerr
()
{
return
std
::
cerr
;
return
std
::
cerr
;
}
}
std
::
ostream
&
clog
()
{
return
std
::
clog
;
}
#endif
#endif
}
}
...
@@ -8033,6 +8095,8 @@ namespace Catch {
...
@@ -8033,6 +8095,8 @@ namespace Catch {
namespace
Catch
{
namespace
Catch
{
AssertionInfo
::
AssertionInfo
()
:
macroName
(
""
),
capturedExpression
(
""
),
resultDisposition
(
ResultDisposition
::
Normal
),
secondArg
(
""
){}
AssertionInfo
::
AssertionInfo
(
char
const
*
_macroName
,
AssertionInfo
::
AssertionInfo
(
char
const
*
_macroName
,
SourceLineInfo
const
&
_lineInfo
,
SourceLineInfo
const
&
_lineInfo
,
char
const
*
_capturedExpression
,
char
const
*
_capturedExpression
,
...
@@ -8342,7 +8406,7 @@ namespace Catch {
...
@@ -8342,7 +8406,7 @@ namespace Catch {
}
}
inline
Version
libraryVersion
()
{
inline
Version
libraryVersion
()
{
static
Version
version
(
1
,
9
,
6
,
""
,
0
);
static
Version
version
(
1
,
9
,
7
,
""
,
0
);
return
version
;
return
version
;
}
}
...
@@ -9050,15 +9114,14 @@ namespace Catch {
...
@@ -9050,15 +9114,14 @@ namespace Catch {
:
m_assertionInfo
(
macroName
,
lineInfo
,
capturedExpression
,
resultDisposition
,
secondArg
),
:
m_assertionInfo
(
macroName
,
lineInfo
,
capturedExpression
,
resultDisposition
,
secondArg
),
m_shouldDebugBreak
(
false
),
m_shouldDebugBreak
(
false
),
m_shouldThrow
(
false
),
m_shouldThrow
(
false
),
m_guardException
(
false
)
m_guardException
(
false
),
{
m_usedStream
(
false
)
m_stream
().
oss
.
str
(
""
);
{}
}
ResultBuilder
::~
ResultBuilder
()
{
ResultBuilder
::~
ResultBuilder
()
{
#if defined(CATCH_CONFIG_FAST_COMPILE)
#if defined(CATCH_CONFIG_FAST_COMPILE)
if
(
m_guardException
)
{
if
(
m_guardException
)
{
m_
stream
().
oss
<<
"Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE"
;
stream
().
oss
<<
"Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE"
;
captureResult
(
ResultWas
::
ThrewException
);
captureResult
(
ResultWas
::
ThrewException
);
getCurrentContext
().
getResultCapture
()
->
exceptionEarlyReported
();
getCurrentContext
().
getResultCapture
()
->
exceptionEarlyReported
();
}
}
...
@@ -9075,13 +9138,25 @@ namespace Catch {
...
@@ -9075,13 +9138,25 @@ namespace Catch {
}
}
void
ResultBuilder
::
endExpression
(
DecomposedExpression
const
&
expr
)
{
void
ResultBuilder
::
endExpression
(
DecomposedExpression
const
&
expr
)
{
// Flip bool results if FalseTest flag is set
if
(
isFalseTest
(
m_assertionInfo
.
resultDisposition
)
)
{
m_data
.
negate
(
expr
.
isBinaryExpression
()
);
}
getResultCapture
().
assertionRun
();
if
(
getCurrentContext
().
getConfig
()
->
includeSuccessfulResults
()
||
m_data
.
resultType
!=
ResultWas
::
Ok
)
{
AssertionResult
result
=
build
(
expr
);
AssertionResult
result
=
build
(
expr
);
handleResult
(
result
);
handleResult
(
result
);
}
}
else
getResultCapture
().
assertionPassed
();
}
void
ResultBuilder
::
useActiveException
(
ResultDisposition
::
Flags
resultDisposition
)
{
void
ResultBuilder
::
useActiveException
(
ResultDisposition
::
Flags
resultDisposition
)
{
m_assertionInfo
.
resultDisposition
=
resultDisposition
;
m_assertionInfo
.
resultDisposition
=
resultDisposition
;
m_
stream
().
oss
<<
Catch
::
translateActiveException
();
stream
().
oss
<<
Catch
::
translateActiveException
();
captureResult
(
ResultWas
::
ThrewException
);
captureResult
(
ResultWas
::
ThrewException
);
}
}
...
@@ -9163,11 +9238,7 @@ namespace Catch {
...
@@ -9163,11 +9238,7 @@ namespace Catch {
assert
(
m_data
.
resultType
!=
ResultWas
::
Unknown
);
assert
(
m_data
.
resultType
!=
ResultWas
::
Unknown
);
AssertionResultData
data
=
m_data
;
AssertionResultData
data
=
m_data
;
// Flip bool results if FalseTest flag is set
if
(
m_usedStream
)
if
(
isFalseTest
(
m_assertionInfo
.
resultDisposition
)
)
{
data
.
negate
(
expr
.
isBinaryExpression
()
);
}
data
.
message
=
m_stream
().
oss
.
str
();
data
.
message
=
m_stream
().
oss
.
str
();
data
.
decomposedExpression
=
&
expr
;
// for lazy reconstruction
data
.
decomposedExpression
=
&
expr
;
// for lazy reconstruction
return
AssertionResult
(
m_assertionInfo
,
data
);
return
AssertionResult
(
m_assertionInfo
,
data
);
...
@@ -9597,7 +9668,8 @@ namespace Catch {
...
@@ -9597,7 +9668,8 @@ namespace Catch {
BySectionInfo
(
SectionInfo
const
&
other
)
:
m_other
(
other
)
{}
BySectionInfo
(
SectionInfo
const
&
other
)
:
m_other
(
other
)
{}
BySectionInfo
(
BySectionInfo
const
&
other
)
:
m_other
(
other
.
m_other
)
{}
BySectionInfo
(
BySectionInfo
const
&
other
)
:
m_other
(
other
.
m_other
)
{}
bool
operator
()
(
Ptr
<
SectionNode
>
const
&
node
)
const
{
bool
operator
()
(
Ptr
<
SectionNode
>
const
&
node
)
const
{
return
node
->
stats
.
sectionInfo
.
lineInfo
==
m_other
.
lineInfo
;
return
((
node
->
stats
.
sectionInfo
.
name
==
m_other
.
name
)
&&
(
node
->
stats
.
sectionInfo
.
lineInfo
==
m_other
.
lineInfo
));
}
}
private
:
private
:
void
operator
=
(
BySectionInfo
const
&
);
void
operator
=
(
BySectionInfo
const
&
);
...
@@ -10319,6 +10391,7 @@ namespace Catch {
...
@@ -10319,6 +10391,7 @@ namespace Catch {
JunitReporter
(
ReporterConfig
const
&
_config
)
JunitReporter
(
ReporterConfig
const
&
_config
)
:
CumulativeReporterBase
(
_config
),
:
CumulativeReporterBase
(
_config
),
xml
(
_config
.
stream
()
),
xml
(
_config
.
stream
()
),
unexpectedExceptions
(
0
),
m_okToFail
(
false
)
m_okToFail
(
false
)
{
{
m_reporterPrefs
.
shouldRedirectStdOut
=
true
;
m_reporterPrefs
.
shouldRedirectStdOut
=
true
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment