Compare commits

...

14 Commits

Author SHA1 Message Date
Martin Hořeňovský
432695291a Flush AND sleep 2024-09-15 20:46:24 +02:00
Martin Hořeňovský
e63f3cc817 Refactor pipe-based redirect to not always create new thread and pipe 2024-09-15 20:22:40 +02:00
Martin Hořeňovský
986ee2c793 WIP: rebase pipe redirect onto current redirect interface 2024-09-13 19:17:39 +02:00
Martin Hořeňovský
18df97df00 Sprinkle some constexpr around to make Jason happy
Most of these will not matter in practice due to C++14 imposing
significant limitations on what else we can make constexpr, and we cannot
have references outliving the constexpr context either way.
2024-09-13 16:40:11 +02:00
Martin Hořeňovský
e97ebe62e7 Remove superfluous include 2024-09-13 16:39:55 +02:00
Martin Hořeňovský
b2b7cbdc31 Remove pointless internal macro 2024-09-13 16:39:53 +02:00
Martin Hořeňovský
412cad546a Avoid needless copy of string in runContext::handleMessage 2024-09-13 16:39:51 +02:00
Martin Hořeňovský
bd70515c08 Add the catch_config_prefix_messages.hpp to builds
Closes #2903
2024-09-13 16:39:49 +02:00
Martin Hořeňovský
7a89b75737 Use steady_clock in the timer 2024-09-13 16:39:47 +02:00
Mark Jansen
02d3304782 Fix bug in TokenStream parser
When presented with just '-' it would access the string at position [1]
2024-09-13 15:32:49 +02:00
Mark Jansen
77eca4e819 Simplify instructions by not changing directories for the ctest command 2024-09-13 14:45:04 +02:00
Kasper Laudrup
bc63412e2a Suppress GCC useless-cast warning from CHECK_THROWS_MATCHES
Suppress warning from GCC about useless cast in the
CHECK_THROWS_MATCHES macro the same way it is already being done for
the similar CHECK macros.
2024-09-06 16:04:35 +02:00
Martin Hořeňovský
fa306fc85e Improve performance of SonarQube reporter handling passing assertions
This mirrors the changes done to the JUnit reporter in commit
fe483c056d
2024-08-14 12:33:55 +02:00
Martin Hořeňovský
35c3403fbb Fix typo in release notes 2024-08-14 12:27:57 +02:00
58 changed files with 895 additions and 175 deletions

View File

@@ -107,8 +107,7 @@ cmake -B debug-build -S . -DCMAKE_BUILD_TYPE=Debug --preset all-tests
cmake --build debug-build
# 4. Run the tests using CTest
cd debug-build
ctest -j 4 --output-on-failure -C Debug
ctest -j 4 --output-on-failure -C Debug --test-dir debug-build
```
<sup><a href='/tools/scripts/buildAndTest.sh#L6-L19' title='File snippet `catch2-build-and-test` was extracted from'>snippet source</a> | <a href='#snippet-catch2-build-and-test' title='Navigate to start of snippet `catch2-build-and-test`'>anchor</a></sup>
<!-- endSnippet -->

View File

@@ -66,7 +66,7 @@
## 3.7.0
### improvements
### Improvements
* Slightly improved compile times of benchmarks
* Made the resolution estimation in benchmarks slightly more precise
* Added new test case macro, `TEST_CASE_PERSISTENT_FIXTURE` (#2885, #1602)

View File

@@ -74,6 +74,7 @@ set(IMPL_HEADERS
${SOURCES_DIR}/internal/catch_compiler_capabilities.hpp
${SOURCES_DIR}/internal/catch_config_android_logwrite.hpp
${SOURCES_DIR}/internal/catch_config_counter.hpp
${SOURCES_DIR}/internal/catch_config_prefix_messages.hpp
${SOURCES_DIR}/internal/catch_config_static_analysis_support.hpp
${SOURCES_DIR}/internal/catch_config_uncaught_exceptions.hpp
${SOURCES_DIR}/internal/catch_config_wchar.hpp
@@ -194,7 +195,6 @@ set(IMPL_SOURCES
${SOURCES_DIR}/internal/catch_random_seed_generation.cpp
${SOURCES_DIR}/internal/catch_reporter_registry.cpp
${SOURCES_DIR}/internal/catch_reporter_spec_parser.cpp
${SOURCES_DIR}/internal/catch_result_type.cpp
${SOURCES_DIR}/internal/catch_reusable_string_stream.cpp
${SOURCES_DIR}/internal/catch_run_context.cpp
${SOURCES_DIR}/internal/catch_section.cpp

View File

@@ -19,7 +19,7 @@ namespace Catch {
int high_mild = 0; // 1.5 to 3 times IQR above Q3
int high_severe = 0; // more than 3 times IQR above Q3
int total() const {
constexpr int total() const {
return low_severe + low_mild + high_mild + high_severe;
}
};

View File

@@ -11,7 +11,7 @@
namespace Catch {
AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const & _lazyExpression):
AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const& _lazyExpression):
lazyExpression(_lazyExpression),
resultType(_resultType) {}

View File

@@ -94,7 +94,7 @@ namespace Catch {
do { \
Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::StringRef(), resultDisposition ); \
catchAssertionHandler.handleMessage( messageType, ( Catch::MessageStream() << __VA_ARGS__ + ::Catch::StreamEndStop() ).m_stream.str() ); \
INTERNAL_CATCH_REACT( catchAssertionHandler ) \
catchAssertionHandler.complete(); \
} while( false )
///////////////////////////////////////////////////////////////////////////////

View File

@@ -22,26 +22,26 @@ namespace Catch {
static_assert(sizeof(TestCaseProperties) == sizeof(TCP_underlying_type),
"The size of the TestCaseProperties is different from the assumed size");
TestCaseProperties operator|(TestCaseProperties lhs, TestCaseProperties rhs) {
constexpr TestCaseProperties operator|(TestCaseProperties lhs, TestCaseProperties rhs) {
return static_cast<TestCaseProperties>(
static_cast<TCP_underlying_type>(lhs) | static_cast<TCP_underlying_type>(rhs)
);
}
TestCaseProperties& operator|=(TestCaseProperties& lhs, TestCaseProperties rhs) {
constexpr TestCaseProperties& operator|=(TestCaseProperties& lhs, TestCaseProperties rhs) {
lhs = static_cast<TestCaseProperties>(
static_cast<TCP_underlying_type>(lhs) | static_cast<TCP_underlying_type>(rhs)
);
return lhs;
}
TestCaseProperties operator&(TestCaseProperties lhs, TestCaseProperties rhs) {
constexpr TestCaseProperties operator&(TestCaseProperties lhs, TestCaseProperties rhs) {
return static_cast<TestCaseProperties>(
static_cast<TCP_underlying_type>(lhs) & static_cast<TCP_underlying_type>(rhs)
);
}
bool applies(TestCaseProperties tcp) {
constexpr bool applies(TestCaseProperties tcp) {
static_assert(static_cast<TCP_underlying_type>(TestCaseProperties::None) == 0,
"TestCaseProperties::None must be equal to 0");
return tcp != TestCaseProperties::None;
@@ -80,7 +80,7 @@ namespace Catch {
return "Anonymous test case " + std::to_string(++counter);
}
StringRef extractFilenamePart(StringRef filename) {
constexpr StringRef extractFilenamePart(StringRef filename) {
size_t lastDot = filename.size();
while (lastDot > 0 && filename[lastDot - 1] != '.') {
--lastDot;
@@ -98,7 +98,7 @@ namespace Catch {
}
// Returns the upper bound on size of extra tags ([#file]+[.])
size_t sizeOfExtraTags(StringRef filepath) {
constexpr size_t sizeOfExtraTags(StringRef filepath) {
// [.] is 3, [#] is another 3
const size_t extras = 3 + 3;
return extractFilenamePart(filepath).size() + extras;
@@ -259,8 +259,4 @@ namespace Catch {
return lhs.tags < rhs.tags;
}
TestCaseInfo const& TestCaseHandle::getTestCaseInfo() const {
return *m_info;
}
} // end namespace Catch

View File

@@ -109,7 +109,7 @@ namespace Catch {
TestCaseInfo* m_info;
ITestInvoker* m_invoker;
public:
TestCaseHandle(TestCaseInfo* info, ITestInvoker* invoker) :
constexpr TestCaseHandle(TestCaseInfo* info, ITestInvoker* invoker) :
m_info(info), m_invoker(invoker) {}
void prepareTestCase() const {
@@ -124,7 +124,9 @@ namespace Catch {
m_invoker->invoke();
}
TestCaseInfo const& getTestCaseInfo() const;
constexpr TestCaseInfo const& getTestCaseInfo() const {
return *m_info;
}
};
Detail::unique_ptr<TestCaseInfo>

View File

@@ -13,7 +13,7 @@ namespace Catch {
namespace {
static auto getCurrentNanosecondsSinceEpoch() -> uint64_t {
return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count();
return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now().time_since_epoch()).count();
}
} // end unnamed namespace

View File

@@ -25,7 +25,7 @@ namespace Catch {
class ExceptionTranslator : public IExceptionTranslator {
public:
ExceptionTranslator( std::string(*translateFunction)( T const& ) )
constexpr ExceptionTranslator( std::string(*translateFunction)( T const& ) )
: m_translateFunction( translateFunction )
{}

View File

@@ -9,7 +9,6 @@
#define CATCH_INTERFACES_CAPTURE_HPP_INCLUDED
#include <string>
#include <chrono>
#include <catch2/internal/catch_stringref.hpp>
#include <catch2/internal/catch_result_type.hpp>
@@ -77,7 +76,7 @@ namespace Catch {
virtual void handleMessage
( AssertionInfo const& info,
ResultWas::OfType resultType,
StringRef message,
std::string&& message,
AssertionReaction& reaction ) = 0;
virtual void handleUnexpectedExceptionNotThrown
( AssertionInfo const& info,

View File

@@ -28,8 +28,8 @@ namespace Catch {
void AssertionHandler::handleExpr( ITransientExpression const& expr ) {
m_resultCapture.handleExpr( m_assertionInfo, expr, m_reaction );
}
void AssertionHandler::handleMessage(ResultWas::OfType resultType, StringRef message) {
m_resultCapture.handleMessage( m_assertionInfo, resultType, message, m_reaction );
void AssertionHandler::handleMessage(ResultWas::OfType resultType, std::string&& message) {
m_resultCapture.handleMessage( m_assertionInfo, resultType, CATCH_MOVE(message), m_reaction );
}
auto AssertionHandler::allowThrows() const -> bool {

View File

@@ -42,12 +42,12 @@ namespace Catch {
template<typename T>
void handleExpr( ExprLhs<T> const& expr ) {
constexpr void handleExpr( ExprLhs<T> const& expr ) {
handleExpr( expr.makeUnaryExpr() );
}
void handleExpr( ITransientExpression const& expr );
void handleMessage(ResultWas::OfType resultType, StringRef message);
void handleMessage(ResultWas::OfType resultType, std::string&& message);
void handleExceptionThrownAsExpected();
void handleUnexpectedExceptionNotThrown();

View File

@@ -76,7 +76,7 @@ namespace Catch {
{ TokenType::Argument,
next.substr( delimiterPos + 1, next.size() ) } );
} else {
if ( next[1] != '-' && next.size() > 2 ) {
if ( next.size() > 1 && next[1] != '-' && next.size() > 2 ) {
// Combined short args, e.g. "-ab" for "-a -b"
for ( size_t i = 1; i < next.size(); ++i ) {
m_tokenBuffer.push_back(

View File

@@ -27,12 +27,6 @@ namespace Catch {
return *Context::currentContext;
}
void Context::setResultCapture( IResultCapture* resultCapture ) {
m_resultCapture = resultCapture;
}
void Context::setConfig( IConfig const* config ) { m_config = config; }
SimplePcg32& sharedRng() {
static SimplePcg32 s_rng;
return s_rng;

View File

@@ -26,10 +26,15 @@ namespace Catch {
friend void cleanUpContext();
public:
IResultCapture* getResultCapture() const { return m_resultCapture; }
IConfig const* getConfig() const { return m_config; }
void setResultCapture( IResultCapture* resultCapture );
void setConfig( IConfig const* config );
constexpr IResultCapture* getResultCapture() const {
return m_resultCapture;
}
constexpr IConfig const* getConfig() const { return m_config; }
constexpr void setResultCapture( IResultCapture* resultCapture ) {
m_resultCapture = resultCapture;
}
constexpr void setConfig( IConfig const* config ) { m_config = config; }
};
Context& getCurrentMutableContext();

View File

@@ -157,6 +157,9 @@ namespace Catch {
bool m_isBinaryExpression;
bool m_result;
protected:
~ITransientExpression() = default;
public:
constexpr auto isBinaryExpression() const -> bool { return m_isBinaryExpression; }
constexpr auto getResult() const -> bool { return m_result; }
@@ -168,17 +171,13 @@ namespace Catch {
m_result( result )
{}
ITransientExpression() = default;
ITransientExpression(ITransientExpression const&) = default;
ITransientExpression& operator=(ITransientExpression const&) = default;
constexpr ITransientExpression( ITransientExpression const& ) = default;
constexpr ITransientExpression& operator=( ITransientExpression const& ) = default;
friend std::ostream& operator<<(std::ostream& out, ITransientExpression const& expr) {
expr.streamReconstructedExpression(out);
return out;
}
protected:
~ITransientExpression() = default;
};
void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs );

View File

@@ -18,6 +18,7 @@ namespace Catch {
typename Sentinel,
typename T,
typename Comparator>
constexpr
ForwardIter find_sentinel( ForwardIter start,
Sentinel sentinel,
T const& value,
@@ -33,6 +34,7 @@ namespace Catch {
typename Sentinel,
typename T,
typename Comparator>
constexpr
std::ptrdiff_t count_sentinel( ForwardIter start,
Sentinel sentinel,
T const& value,
@@ -46,6 +48,7 @@ namespace Catch {
}
template <typename ForwardIter, typename Sentinel>
constexpr
std::enable_if_t<!std::is_same<ForwardIter, Sentinel>::value,
std::ptrdiff_t>
sentinel_distance( ForwardIter iter, const Sentinel sentinel ) {
@@ -58,8 +61,8 @@ namespace Catch {
}
template <typename ForwardIter>
std::ptrdiff_t sentinel_distance( ForwardIter first,
ForwardIter last ) {
constexpr std::ptrdiff_t sentinel_distance( ForwardIter first,
ForwardIter last ) {
return std::distance( first, last );
}
@@ -68,11 +71,11 @@ namespace Catch {
typename ForwardIter2,
typename Sentinel2,
typename Comparator>
bool check_element_counts( ForwardIter1 first_1,
const Sentinel1 end_1,
ForwardIter2 first_2,
const Sentinel2 end_2,
Comparator cmp ) {
constexpr bool check_element_counts( ForwardIter1 first_1,
const Sentinel1 end_1,
ForwardIter2 first_2,
const Sentinel2 end_2,
Comparator cmp ) {
auto cursor = first_1;
while ( cursor != end_1 ) {
if ( find_sentinel( first_1, cursor, *cursor, cmp ) ==
@@ -102,11 +105,11 @@ namespace Catch {
typename ForwardIter2,
typename Sentinel2,
typename Comparator>
bool is_permutation( ForwardIter1 first_1,
const Sentinel1 end_1,
ForwardIter2 first_2,
const Sentinel2 end_2,
Comparator cmp ) {
constexpr bool is_permutation( ForwardIter1 first_1,
const Sentinel1 end_1,
ForwardIter2 first_2,
const Sentinel2 end_2,
Comparator cmp ) {
// TODO: no optimization for stronger iterators, because we would also have to constrain on sentinel vs not sentinel types
// TODO: Comparator has to be "both sides", e.g. a == b => b == a
// This skips shared prefix of the two ranges

View File

@@ -22,13 +22,13 @@ namespace Catch {
ITransientExpression const* m_transientExpression = nullptr;
bool m_isNegated;
public:
LazyExpression( bool isNegated ):
constexpr LazyExpression( bool isNegated ):
m_isNegated(isNegated)
{}
LazyExpression(LazyExpression const& other) = default;
constexpr LazyExpression(LazyExpression const& other) = default;
LazyExpression& operator = ( LazyExpression const& ) = delete;
explicit operator bool() const {
constexpr explicit operator bool() const {
return m_transientExpression != nullptr;
}

View File

@@ -17,12 +17,19 @@
#include <iosfwd>
#include <sstream>
#if defined( CATCH_CONFIG_NEW_CAPTURE )
#if defined(CATCH_CONFIG_USE_ASYNC)
#include <thread>
#include <mutex>
#endif
#if defined( CATCH_CONFIG_NEW_CAPTURE ) || defined(CATCH_CONFIG_USE_ASYNC)
# if defined( _MSC_VER )
# include <io.h> //_dup and _dup2
# include <fcntl.h> // _O_BINARY
# define dup _dup
# define dup2 _dup2
# define fileno _fileno
# define close _close
# else
# include <unistd.h> // dup and dup2
# endif
@@ -48,13 +55,13 @@ namespace Catch {
* that the underlying stream's rdbuf aren't changed by other
* users.
*/
class RedirectedStreamNew {
class RedirectedStream {
std::ostream& m_originalStream;
std::ostream& m_redirectionStream;
std::streambuf* m_prevBuf;
public:
RedirectedStreamNew( std::ostream& originalStream,
RedirectedStream( std::ostream& originalStream,
std::ostream& redirectionStream ):
m_originalStream( originalStream ),
m_redirectionStream( redirectionStream ),
@@ -72,7 +79,7 @@ namespace Catch {
*/
class StreamRedirect : public OutputRedirect {
ReusableStringStream m_redirectedOut, m_redirectedErr;
RedirectedStreamNew m_cout, m_cerr, m_clog;
RedirectedStream m_cout, m_cerr, m_clog;
public:
StreamRedirect():
@@ -244,6 +251,182 @@ namespace Catch {
#endif // CATCH_CONFIG_NEW_CAPTURE
#if defined( CATCH_CONFIG_USE_ASYNC )
static inline void pipe_or_throw( int descriptors[2] ) {
# if defined( _MSC_VER )
constexpr int defaultPipeSize{ 0 };
int result{ _pipe( descriptors, defaultPipeSize, _O_BINARY ) };
# else
int result{ pipe( descriptors ) };
# endif
if ( result ) {
CATCH_INTERNAL_ERROR( "pipe-or-throw" );
// CATCH_SYSTEM_ERROR( errno, std::generic_category() );
}
}
static inline size_t
read_or_throw( int descriptor, void* buffer, size_t size ) {
# if defined( _MSC_VER )
int result{
_read( descriptor, buffer, static_cast<unsigned>( size ) ) };
# else
ssize_t result{ read( descriptor, buffer, size ) };
# endif
if ( result == -1 ) {
CATCH_INTERNAL_ERROR( "read-or-throw" );
// CATCH_SYSTEM_ERROR( errno, std::generic_category() );
}
return static_cast<size_t>( result );
}
static inline void close_or_throw( int descriptor ) {
if ( close( descriptor ) ) {
CATCH_INTERNAL_ERROR( "close-or-throw" );
// CATCH_SYSTEM_ERROR( errno, std::generic_category() );
}
}
static inline int dup_or_throw( int descriptor ) {
int result{ dup( descriptor ) };
if ( result == -1 ) {
CATCH_INTERNAL_ERROR( "dup-or-throw" );
// CATCH_SYSTEM_ERROR( errno, std::generic_category() );
}
return result;
}
static inline int dup2_or_throw( int sourceDescriptor,
int destinationDescriptor ) {
int result{ dup2( sourceDescriptor, destinationDescriptor ) };
if ( result == -1 ) {
CATCH_INTERNAL_ERROR( "dup2-or-throw" );
// CATCH_SYSTEM_ERROR( errno, std::generic_category() );
}
return result;
}
static inline int fileno_or_throw( std::FILE* file ) {
int result{ fileno( file ) };
if ( result == -1 ) {
CATCH_INTERNAL_ERROR( "fileno-or-throw" );
// CATCH_SYSTEM_ERROR( errno, std::generic_category() );
}
return result;
}
static inline void fflush_or_throw( std::FILE* file ) {
if ( std::fflush( file ) ) {
CATCH_INTERNAL_ERROR( "fflush-or-throw" );
// CATCH_SYSTEM_ERROR( errno, std::generic_category() );
}
}
class StreamPipeHandler {
int m_originalFd = -1;
int m_pipeReadEnd = -1;
int m_pipeWriteEnd = -1;
FILE* m_targetStream;
std::mutex m_mutex;
std::string m_captured;
std::thread m_readThread;
public:
StreamPipeHandler( FILE* original ):
m_originalFd( dup_or_throw( fileno( original ) ) ),
m_targetStream(original)
{
CATCH_ENFORCE( m_originalFd >= 0, "Could not dup stream" );
int pipe_fds[2];
pipe_or_throw( pipe_fds );
m_pipeReadEnd = pipe_fds[0];
m_pipeWriteEnd = pipe_fds[1];
m_readThread = std::thread([this]() {
constexpr size_t bufferSize = 4096;
char buffer[bufferSize];
size_t sizeRead;
while ( ( sizeRead = read_or_throw(
m_pipeReadEnd, buffer, bufferSize ) ) != 0 ) {
std::unique_lock<std::mutex> _( m_mutex );
m_captured.append( buffer, sizeRead );
}
});
}
~StreamPipeHandler() {
close_or_throw( m_pipeWriteEnd );
m_readThread.join();
}
std::string getCapturedOutput() {
std::unique_lock<std::mutex> _( m_mutex );
return m_captured;
}
void clearCapturedOutput() {
std::unique_lock<std::mutex> _( m_mutex );
m_captured.clear();
}
void startCapture() {
fflush_or_throw( m_targetStream );
int ret = dup2_or_throw( m_pipeWriteEnd, fileno( m_targetStream ) );
CATCH_ENFORCE( ret >= 0,
"dup2 pipe-write -> original stream failed " << errno );
}
void stopCapture() {
fflush_or_throw( m_targetStream );
int ret = dup2_or_throw( m_originalFd, fileno( m_targetStream ) );
CATCH_ENFORCE( ret >= 0,
"dup2 of original fd -> original stream failed " << errno );
}
};
class PipeRedirect : public OutputRedirect {
private:
StreamPipeHandler m_stdout;
StreamPipeHandler m_stderr;
public:
PipeRedirect():
m_stdout(stdout),
m_stderr(stderr){}
void activateImpl() override {
m_stdout.startCapture();
m_stderr.startCapture();
}
void deactivateImpl() override {
m_stdout.stopCapture();
m_stderr.stopCapture();
}
std::string getStdout() override {
return m_stdout.getCapturedOutput();
}
std::string getStderr() override {
return m_stderr.getCapturedOutput();
}
void clearBuffers() override {
m_stdout.clearCapturedOutput();
m_stderr.clearCapturedOutput();
}
};
#endif // CATCH_CONFIG_USE_ASYNC
} // end namespace
bool isRedirectAvailable( OutputRedirect::Kind kind ) {
@@ -255,6 +438,10 @@ namespace Catch {
#if defined( CATCH_CONFIG_NEW_CAPTURE )
case OutputRedirect::FileDescriptors:
return true;
#endif
#if defined(CATCH_CONFIG_USE_ASYNC)
case OutputRedirect::Pipes:
return true;
#endif
default:
return false;
@@ -267,7 +454,8 @@ namespace Catch {
#if defined( CATCH_CONFIG_NEW_CAPTURE )
return Detail::make_unique<FileRedirect>();
#else
return Detail::make_unique<StreamRedirect>();
//return Detail::make_unique<StreamRedirect>();
return Detail::make_unique<PipeRedirect>();
#endif
} else {
return Detail::make_unique<NoopRedirect>();

View File

@@ -25,8 +25,10 @@ namespace Catch {
None,
//! Redirect std::cout/std::cerr/std::clog streams internally
Streams,
//! Redirect the stdout/stderr file descriptors into files
//! Redirect the stdout/stderr file descriptors into temp files
FileDescriptors,
//! Redirect the stdout/stderr file descriptors into anonymous pipes
Pipes,
};
virtual ~OutputRedirect(); // = default;

View File

@@ -69,7 +69,7 @@ namespace Catch {
struct ExtendedMultResult {
T upper;
T lower;
bool operator==( ExtendedMultResult const& rhs ) const {
constexpr bool operator==( ExtendedMultResult const& rhs ) const {
return upper == rhs.upper && lower == rhs.lower;
}
};
@@ -187,6 +187,7 @@ namespace Catch {
* get by simple casting ([0, ..., INT_MAX, INT_MIN, ..., -1])
*/
template <typename OriginalType, typename UnsignedType>
constexpr
std::enable_if_t<std::is_signed<OriginalType>::value, UnsignedType>
transposeToNaturalOrder( UnsignedType in ) {
static_assert(
@@ -207,6 +208,7 @@ namespace Catch {
template <typename OriginalType,
typename UnsignedType>
constexpr
std::enable_if_t<std::is_unsigned<OriginalType>::value, UnsignedType>
transposeToNaturalOrder(UnsignedType in) {
static_assert(

View File

@@ -1,26 +0,0 @@
// Copyright Catch2 Authors
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.txt or copy at
// https://www.boost.org/LICENSE_1_0.txt)
// SPDX-License-Identifier: BSL-1.0
#include <catch2/internal/catch_result_type.hpp>
namespace Catch {
bool isOk( ResultWas::OfType resultType ) {
return ( resultType & ResultWas::FailureBit ) == 0;
}
bool isJustInfo( int flags ) {
return flags == ResultWas::Info;
}
ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) {
return static_cast<ResultDisposition::Flags>( static_cast<int>( lhs ) | static_cast<int>( rhs ) );
}
bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; }
bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; }
} // end namespace Catch

View File

@@ -33,8 +33,10 @@ namespace Catch {
}; };
bool isOk( ResultWas::OfType resultType );
bool isJustInfo( int flags );
constexpr bool isOk( ResultWas::OfType resultType ) {
return ( resultType & ResultWas::FailureBit ) == 0;
}
constexpr bool isJustInfo( int flags ) { return flags == ResultWas::Info; }
// ResultDisposition::Flags enum
@@ -46,11 +48,18 @@ namespace Catch {
SuppressFail = 0x08 // Failures are reported but do not fail the test
}; };
ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs );
constexpr ResultDisposition::Flags operator|( ResultDisposition::Flags lhs,
ResultDisposition::Flags rhs ) {
return static_cast<ResultDisposition::Flags>( static_cast<int>( lhs ) |
static_cast<int>( rhs ) );
}
bool shouldContinueOnFailure( int flags );
inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; }
bool shouldSuppressFailure( int flags );
constexpr bool isFalseTest( int flags ) {
return ( flags & ResultDisposition::FalseTest ) != 0;
}
constexpr bool shouldSuppressFailure( int flags ) {
return ( flags & ResultDisposition::SuppressFail ) != 0;
}
} // end namespace Catch

View File

@@ -632,13 +632,13 @@ namespace Catch {
void RunContext::handleMessage(
AssertionInfo const& info,
ResultWas::OfType resultType,
StringRef message,
std::string&& message,
AssertionReaction& reaction
) {
m_lastAssertionInfo = info;
AssertionResultData data( resultType, LazyExpression( false ) );
data.message = static_cast<std::string>(message);
data.message = CATCH_MOVE( message );
AssertionResult assertionResult{ m_lastAssertionInfo,
CATCH_MOVE( data ) };

View File

@@ -55,7 +55,7 @@ namespace Catch {
void handleMessage
( AssertionInfo const& info,
ResultWas::OfType resultType,
StringRef message,
std::string&& message,
AssertionReaction& reaction ) override;
void handleUnexpectedExceptionNotThrown
( AssertionInfo const& info,

View File

@@ -38,8 +38,6 @@
#endif
#define INTERNAL_CATCH_REACT( handler ) handler.complete();
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_TEST( macroName, resultDisposition, ... ) \
do { /* NOLINT(bugprone-infinite-loop) */ \
@@ -52,7 +50,7 @@
catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); /* NOLINT(bugprone-chained-comparison) */ \
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
} INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
INTERNAL_CATCH_REACT( catchAssertionHandler ) \
catchAssertionHandler.complete(); \
} while( (void)0, (false) && static_cast<const bool&>( !!(__VA_ARGS__) ) ) // the expression here is never evaluated at runtime but it forces the compiler to give it a look
// The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&.
@@ -80,7 +78,7 @@
catch( ... ) { \
catchAssertionHandler.handleUnexpectedInflightException(); \
} \
INTERNAL_CATCH_REACT( catchAssertionHandler ) \
catchAssertionHandler.complete(); \
} while( false )
///////////////////////////////////////////////////////////////////////////////
@@ -101,7 +99,7 @@
} \
else \
catchAssertionHandler.handleThrowingCallSkipped(); \
INTERNAL_CATCH_REACT( catchAssertionHandler ) \
catchAssertionHandler.complete(); \
} while( false )
///////////////////////////////////////////////////////////////////////////////
@@ -125,7 +123,7 @@
} \
else \
catchAssertionHandler.handleThrowingCallSkipped(); \
INTERNAL_CATCH_REACT( catchAssertionHandler ) \
catchAssertionHandler.complete(); \
} while( false )
@@ -149,7 +147,7 @@
} \
else \
catchAssertionHandler.handleThrowingCallSkipped(); \
INTERNAL_CATCH_REACT( catchAssertionHandler ) \
catchAssertionHandler.complete(); \
} while( false )
#endif // CATCH_CONFIG_DISABLE

View File

@@ -54,7 +54,7 @@ namespace Catch {
TestType m_testAsFunction;
public:
TestInvokerAsFunction( TestType testAsFunction ) noexcept:
constexpr TestInvokerAsFunction( TestType testAsFunction ) noexcept:
m_testAsFunction( testAsFunction ) {}
void invoke() const override { m_testAsFunction(); }

View File

@@ -32,7 +32,8 @@ template<typename C>
class TestInvokerAsMethod : public ITestInvoker {
void (C::*m_testAsMethod)();
public:
TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAsMethod( testAsMethod ) {}
constexpr TestInvokerAsMethod( void ( C::*testAsMethod )() ) noexcept:
m_testAsMethod( testAsMethod ) {}
void invoke() const override {
C obj;
@@ -53,7 +54,8 @@ class TestInvokerFixture : public ITestInvoker {
Detail::unique_ptr<C> m_fixture = nullptr;
public:
TestInvokerFixture( void ( C::*testAsMethod )() const) noexcept : m_testAsMethod( testAsMethod ) {}
constexpr TestInvokerFixture( void ( C::*testAsMethod )() const ) noexcept:
m_testAsMethod( testAsMethod ) {}
void prepareTestCase() override {
m_fixture = Detail::make_unique<C>();

View File

@@ -48,24 +48,24 @@ class uniform_integer_distribution {
// distribution will be reused many times and this is an optimization.
UnsignedIntegerType m_rejection_threshold = 0;
UnsignedIntegerType computeDistance(IntegerType a, IntegerType b) const {
static constexpr UnsignedIntegerType computeDistance(IntegerType a, IntegerType b) {
// This overflows and returns 0 if a == 0 and b == TYPE_MAX.
// We handle that later when generating the number.
return transposeTo(b) - transposeTo(a) + 1;
}
static UnsignedIntegerType computeRejectionThreshold(UnsignedIntegerType ab_distance) {
static constexpr UnsignedIntegerType computeRejectionThreshold(UnsignedIntegerType ab_distance) {
// distance == 0 means that we will return all possible values from
// the type's range, and that we shouldn't reject anything.
if ( ab_distance == 0 ) { return 0; }
return ( ~ab_distance + 1 ) % ab_distance;
}
static UnsignedIntegerType transposeTo(IntegerType in) {
static constexpr UnsignedIntegerType transposeTo(IntegerType in) {
return Detail::transposeToNaturalOrder<IntegerType>(
static_cast<UnsignedIntegerType>( in ) );
}
static IntegerType transposeBack(UnsignedIntegerType in) {
static constexpr IntegerType transposeBack(UnsignedIntegerType in) {
return static_cast<IntegerType>(
Detail::transposeToNaturalOrder<IntegerType>(in) );
}
@@ -73,7 +73,7 @@ class uniform_integer_distribution {
public:
using result_type = IntegerType;
uniform_integer_distribution( IntegerType a, IntegerType b ):
constexpr uniform_integer_distribution( IntegerType a, IntegerType b ):
m_a( transposeTo(a) ),
m_ab_distance( computeDistance(a, b) ),
m_rejection_threshold( computeRejectionThreshold(m_ab_distance) ) {
@@ -81,7 +81,7 @@ public:
}
template <typename Generator>
result_type operator()( Generator& g ) {
constexpr result_type operator()( Generator& g ) {
// All possible values of result_type are valid.
if ( m_ab_distance == 0 ) {
return transposeBack( Detail::fillBitsFrom<UnsignedIntegerType>( g ) );
@@ -99,8 +99,8 @@ public:
return transposeBack(m_a + emul.upper);
}
result_type a() const { return transposeBack(m_a); }
result_type b() const { return transposeBack(m_ab_distance + m_a - 1); }
constexpr result_type a() const { return transposeBack(m_a); }
constexpr result_type b() const { return transposeBack(m_ab_distance + m_a - 1); }
};
} // end namespace Catch

View File

@@ -53,36 +53,16 @@ namespace {
os.flags(f);
}
bool shouldNewline(XmlFormatting fmt) {
constexpr bool shouldNewline(XmlFormatting fmt) {
return !!(static_cast<std::underlying_type_t<XmlFormatting>>(fmt & XmlFormatting::Newline));
}
bool shouldIndent(XmlFormatting fmt) {
constexpr bool shouldIndent(XmlFormatting fmt) {
return !!(static_cast<std::underlying_type_t<XmlFormatting>>(fmt & XmlFormatting::Indent));
}
} // anonymous namespace
XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs) {
return static_cast<XmlFormatting>(
static_cast<std::underlying_type_t<XmlFormatting>>(lhs) |
static_cast<std::underlying_type_t<XmlFormatting>>(rhs)
);
}
XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs) {
return static_cast<XmlFormatting>(
static_cast<std::underlying_type_t<XmlFormatting>>(lhs) &
static_cast<std::underlying_type_t<XmlFormatting>>(rhs)
);
}
XmlEncode::XmlEncode( StringRef str, ForWhat forWhat )
: m_str( str ),
m_forWhat( forWhat )
{}
void XmlEncode::encodeTo( std::ostream& os ) const {
// Apostrophe escaping not necessary if we always use " to write attributes
// (see: http://www.w3.org/TR/xml/#syntax)

View File

@@ -15,14 +15,22 @@
#include <vector>
namespace Catch {
enum class XmlFormatting {
enum class XmlFormatting : uint8_t {
None = 0x00,
Indent = 0x01,
Newline = 0x02,
};
XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs);
XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs);
constexpr XmlFormatting operator|( XmlFormatting lhs, XmlFormatting rhs ) {
return static_cast<XmlFormatting>( static_cast<uint8_t>( lhs ) |
static_cast<uint8_t>( rhs ) );
}
constexpr XmlFormatting operator&( XmlFormatting lhs, XmlFormatting rhs ) {
return static_cast<XmlFormatting>( static_cast<uint8_t>( lhs ) &
static_cast<uint8_t>( rhs ) );
}
/**
* Helper for XML-encoding text (escaping angle brackets, quotes, etc)
@@ -34,7 +42,9 @@ namespace Catch {
public:
enum ForWhat { ForTextNodes, ForAttributes };
XmlEncode( StringRef str, ForWhat forWhat = ForTextNodes );
constexpr XmlEncode( StringRef str, ForWhat forWhat = ForTextNodes ):
m_str( str ), m_forWhat( forWhat ) {}
void encodeTo( std::ostream& os ) const;

View File

@@ -28,12 +28,14 @@ namespace Catch {
public:
template <typename TargetRangeLike2, typename Equality2>
constexpr
RangeEqualsMatcher( TargetRangeLike2&& range,
Equality2&& predicate ):
m_desired( CATCH_FORWARD( range ) ),
m_predicate( CATCH_FORWARD( predicate ) ) {}
template <typename RangeLike>
constexpr
bool match( RangeLike&& rng ) const {
auto rng_start = begin( rng );
const auto rng_end = end( rng );
@@ -66,12 +68,14 @@ namespace Catch {
public:
template <typename TargetRangeLike2, typename Equality2>
constexpr
UnorderedRangeEqualsMatcher( TargetRangeLike2&& range,
Equality2&& predicate ):
m_desired( CATCH_FORWARD( range ) ),
m_predicate( CATCH_FORWARD( predicate ) ) {}
template <typename RangeLike>
constexpr
bool match( RangeLike&& rng ) const {
using std::begin;
using std::end;
@@ -95,6 +99,7 @@ namespace Catch {
* Uses `std::equal_to` to do the comparison
*/
template <typename RangeLike>
constexpr
std::enable_if_t<!Detail::is_matcher<RangeLike>::value,
RangeEqualsMatcher<RangeLike, std::equal_to<>>>
RangeEquals( RangeLike&& range ) {
@@ -108,6 +113,7 @@ namespace Catch {
* Uses to provided predicate `predicate` to do the comparisons
*/
template <typename RangeLike, typename Equality>
constexpr
RangeEqualsMatcher<RangeLike, Equality>
RangeEquals( RangeLike&& range, Equality&& predicate ) {
return { CATCH_FORWARD( range ), CATCH_FORWARD( predicate ) };
@@ -120,6 +126,7 @@ namespace Catch {
* Uses `std::equal_to` to do the comparison
*/
template <typename RangeLike>
constexpr
std::enable_if_t<
!Detail::is_matcher<RangeLike>::value,
UnorderedRangeEqualsMatcher<RangeLike, std::equal_to<>>>
@@ -134,6 +141,7 @@ namespace Catch {
* Uses to provided predicate `predicate` to do the comparisons
*/
template <typename RangeLike, typename Equality>
constexpr
UnorderedRangeEqualsMatcher<RangeLike, Equality>
UnorderedRangeEquals( RangeLike&& range, Equality&& predicate ) {
return { CATCH_FORWARD( range ), CATCH_FORWARD( predicate ) };

View File

@@ -33,7 +33,7 @@ namespace Catch {
ArgT && m_arg;
MatcherT const& m_matcher;
public:
MatchExpr( ArgT && arg, MatcherT const& matcher )
constexpr MatchExpr( ArgT && arg, MatcherT const& matcher )
: ITransientExpression{ true, matcher.match( arg ) }, // not forwarding arg here on purpose
m_arg( CATCH_FORWARD(arg) ),
m_matcher( matcher )
@@ -63,7 +63,8 @@ namespace Catch {
void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher );
template<typename ArgT, typename MatcherT>
auto makeMatchExpr( ArgT && arg, MatcherT const& matcher ) -> MatchExpr<ArgT, MatcherT> {
constexpr MatchExpr<ArgT, MatcherT>
makeMatchExpr( ArgT&& arg, MatcherT const& matcher ) {
return MatchExpr<ArgT, MatcherT>( CATCH_FORWARD(arg), matcher );
}
@@ -77,7 +78,7 @@ namespace Catch {
INTERNAL_CATCH_TRY { \
catchAssertionHandler.handleExpr( Catch::makeMatchExpr( arg, matcher ) ); \
} INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
INTERNAL_CATCH_REACT( catchAssertionHandler ) \
catchAssertionHandler.complete(); \
} while( false )
@@ -87,7 +88,10 @@ namespace Catch {
Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(exceptionType) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \
if( catchAssertionHandler.allowThrows() ) \
try { \
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
CATCH_INTERNAL_SUPPRESS_USELESS_CAST_WARNINGS \
static_cast<void>(__VA_ARGS__ ); \
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \
} \
catch( exceptionType const& ex ) { \
@@ -98,7 +102,7 @@ namespace Catch {
} \
else \
catchAssertionHandler.handleThrowingCallSkipped(); \
INTERNAL_CATCH_REACT( catchAssertionHandler ) \
catchAssertionHandler.complete(); \
} while( false )

View File

@@ -80,6 +80,7 @@ internal_headers = [
'internal/catch_compiler_capabilities.hpp',
'internal/catch_config_android_logwrite.hpp',
'internal/catch_config_counter.hpp',
'internal/catch_config_prefix_messages.hpp',
'internal/catch_config_static_analysis_support.hpp',
'internal/catch_config_uncaught_exceptions.hpp',
'internal/catch_config_wchar.hpp',
@@ -233,7 +234,6 @@ internal_sources = files(
'internal/catch_random_seed_generation.cpp',
'internal/catch_reporter_registry.cpp',
'internal/catch_reporter_spec_parser.cpp',
'internal/catch_result_type.cpp',
'internal/catch_reusable_string_stream.cpp',
'internal/catch_run_context.cpp',
'internal/catch_section.cpp',

View File

@@ -73,9 +73,9 @@ namespace Catch {
if (!rootName.empty())
name = rootName + '/' + name;
if ( sectionNode.hasAnyAssertions()
if ( sectionNode.stats.assertions.total() > 0
|| !sectionNode.stdOut.empty()
|| !sectionNode.stdErr.empty() ) {
|| !sectionNode.stdErr.empty() ) {
XmlWriter::ScopedElement e = xml.scopedElement("testCase");
xml.writeAttribute("name"_sr, name);
xml.writeAttribute("duration"_sr, static_cast<long>(sectionNode.stats.durationInSeconds * 1000));

View File

@@ -21,7 +21,7 @@ namespace Catch {
: CumulativeReporterBase(CATCH_MOVE(config))
, xml(m_stream) {
m_preferences.shouldRedirectStdOut = true;
m_preferences.shouldReportAllAssertions = true;
m_preferences.shouldReportAllAssertions = false;
m_shouldStoreSuccesfulAssertions = false;
}

View File

@@ -105,6 +105,7 @@ Nor would this
:test-result: PASS CaseInsensitiveEqualsTo is case insensitive
:test-result: PASS CaseInsensitiveLess is case insensitive
:test-result: PASS Character pretty printing
:test-result: PASS Clara::Arg does not crash on incomplete input
:test-result: PASS Clara::Arg supports single-arg parse the way Opt does
:test-result: PASS Clara::Opt supports accept-many lambdas
:test-result: PASS ColourGuard behaviour

View File

@@ -103,6 +103,7 @@
:test-result: PASS CaseInsensitiveEqualsTo is case insensitive
:test-result: PASS CaseInsensitiveLess is case insensitive
:test-result: PASS Character pretty printing
:test-result: PASS Clara::Arg does not crash on incomplete input
:test-result: PASS Clara::Arg supports single-arg parse the way Opt does
:test-result: PASS Clara::Opt supports accept-many lambdas
:test-result: PASS ColourGuard behaviour

View File

@@ -389,6 +389,12 @@ ToStringGeneral.tests.cpp:<line number>: passed: ::Catch::Detail::stringify( '\0
ToStringGeneral.tests.cpp:<line number>: passed: ::Catch::Detail::stringify( static_cast<char>(2) ) == "2" for: "2" == "2"
ToStringGeneral.tests.cpp:<line number>: passed: ::Catch::Detail::stringify( static_cast<char>(5) ) == "5" for: "5" == "5"
Clara.tests.cpp:<line number>: passed: name.empty() for: true
Clara.tests.cpp:<line number>: passed: result for: {?}
Clara.tests.cpp:<line number>: passed: result.type() == Catch::Clara::Detail::ResultType::Ok for: 0 == 0
Clara.tests.cpp:<line number>: passed: parsed.type() == Catch::Clara::ParseResultType::NoMatch for: 1 == 1
Clara.tests.cpp:<line number>: passed: parsed.remainingTokens().count() == 2 for: 2 == 2
Clara.tests.cpp:<line number>: passed: name.empty() for: true
Clara.tests.cpp:<line number>: passed: name.empty() for: true
Clara.tests.cpp:<line number>: passed: name == "foo" for: "foo" == "foo"
Clara.tests.cpp:<line number>: passed: !(parse_result) for: !{?}
Clara.tests.cpp:<line number>: passed: parse_result for: {?}
@@ -2844,7 +2850,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
Misc.tests.cpp:<line number>: passed:
Misc.tests.cpp:<line number>: passed:
test cases: 418 | 312 passed | 86 failed | 6 skipped | 14 failed as expected
assertions: 2259 | 2077 passed | 147 failed | 35 failed as expected
test cases: 419 | 313 passed | 86 failed | 6 skipped | 14 failed as expected
assertions: 2265 | 2083 passed | 147 failed | 35 failed as expected

View File

@@ -387,6 +387,12 @@ ToStringGeneral.tests.cpp:<line number>: passed: ::Catch::Detail::stringify( '\0
ToStringGeneral.tests.cpp:<line number>: passed: ::Catch::Detail::stringify( static_cast<char>(2) ) == "2" for: "2" == "2"
ToStringGeneral.tests.cpp:<line number>: passed: ::Catch::Detail::stringify( static_cast<char>(5) ) == "5" for: "5" == "5"
Clara.tests.cpp:<line number>: passed: name.empty() for: true
Clara.tests.cpp:<line number>: passed: result for: {?}
Clara.tests.cpp:<line number>: passed: result.type() == Catch::Clara::Detail::ResultType::Ok for: 0 == 0
Clara.tests.cpp:<line number>: passed: parsed.type() == Catch::Clara::ParseResultType::NoMatch for: 1 == 1
Clara.tests.cpp:<line number>: passed: parsed.remainingTokens().count() == 2 for: 2 == 2
Clara.tests.cpp:<line number>: passed: name.empty() for: true
Clara.tests.cpp:<line number>: passed: name.empty() for: true
Clara.tests.cpp:<line number>: passed: name == "foo" for: "foo" == "foo"
Clara.tests.cpp:<line number>: passed: !(parse_result) for: !{?}
Clara.tests.cpp:<line number>: passed: parse_result for: {?}
@@ -2833,7 +2839,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
Misc.tests.cpp:<line number>: passed:
Misc.tests.cpp:<line number>: passed:
test cases: 418 | 312 passed | 86 failed | 6 skipped | 14 failed as expected
assertions: 2259 | 2077 passed | 147 failed | 35 failed as expected
test cases: 419 | 313 passed | 86 failed | 6 skipped | 14 failed as expected
assertions: 2265 | 2083 passed | 147 failed | 35 failed as expected

View File

@@ -1610,6 +1610,6 @@ due to unexpected exception with message:
Why would you throw a std::string?
===============================================================================
test cases: 418 | 326 passed | 71 failed | 7 skipped | 14 failed as expected
assertions: 2242 | 2077 passed | 130 failed | 35 failed as expected
test cases: 419 | 327 passed | 71 failed | 7 skipped | 14 failed as expected
assertions: 2248 | 2083 passed | 130 failed | 35 failed as expected

View File

@@ -3039,6 +3039,42 @@ ToStringGeneral.tests.cpp:<line number>: PASSED:
with expansion:
"5" == "5"
-------------------------------------------------------------------------------
Clara::Arg does not crash on incomplete input
-------------------------------------------------------------------------------
Clara.tests.cpp:<line number>
...............................................................................
Clara.tests.cpp:<line number>: PASSED:
CHECK( name.empty() )
with expansion:
true
Clara.tests.cpp:<line number>: PASSED:
CHECK( result )
with expansion:
{?}
Clara.tests.cpp:<line number>: PASSED:
CHECK( result.type() == Catch::Clara::Detail::ResultType::Ok )
with expansion:
0 == 0
Clara.tests.cpp:<line number>: PASSED:
CHECK( parsed.type() == Catch::Clara::ParseResultType::NoMatch )
with expansion:
1 == 1
Clara.tests.cpp:<line number>: PASSED:
CHECK( parsed.remainingTokens().count() == 2 )
with expansion:
2 == 2
Clara.tests.cpp:<line number>: PASSED:
CHECK( name.empty() )
with expansion:
true
-------------------------------------------------------------------------------
Clara::Arg supports single-arg parse the way Opt does
-------------------------------------------------------------------------------
@@ -18942,6 +18978,6 @@ Misc.tests.cpp:<line number>
Misc.tests.cpp:<line number>: PASSED:
===============================================================================
test cases: 418 | 312 passed | 86 failed | 6 skipped | 14 failed as expected
assertions: 2259 | 2077 passed | 147 failed | 35 failed as expected
test cases: 419 | 313 passed | 86 failed | 6 skipped | 14 failed as expected
assertions: 2265 | 2083 passed | 147 failed | 35 failed as expected

View File

@@ -3037,6 +3037,42 @@ ToStringGeneral.tests.cpp:<line number>: PASSED:
with expansion:
"5" == "5"
-------------------------------------------------------------------------------
Clara::Arg does not crash on incomplete input
-------------------------------------------------------------------------------
Clara.tests.cpp:<line number>
...............................................................................
Clara.tests.cpp:<line number>: PASSED:
CHECK( name.empty() )
with expansion:
true
Clara.tests.cpp:<line number>: PASSED:
CHECK( result )
with expansion:
{?}
Clara.tests.cpp:<line number>: PASSED:
CHECK( result.type() == Catch::Clara::Detail::ResultType::Ok )
with expansion:
0 == 0
Clara.tests.cpp:<line number>: PASSED:
CHECK( parsed.type() == Catch::Clara::ParseResultType::NoMatch )
with expansion:
1 == 1
Clara.tests.cpp:<line number>: PASSED:
CHECK( parsed.remainingTokens().count() == 2 )
with expansion:
2 == 2
Clara.tests.cpp:<line number>: PASSED:
CHECK( name.empty() )
with expansion:
true
-------------------------------------------------------------------------------
Clara::Arg supports single-arg parse the way Opt does
-------------------------------------------------------------------------------
@@ -18931,6 +18967,6 @@ Misc.tests.cpp:<line number>
Misc.tests.cpp:<line number>: PASSED:
===============================================================================
test cases: 418 | 312 passed | 86 failed | 6 skipped | 14 failed as expected
assertions: 2259 | 2077 passed | 147 failed | 35 failed as expected
test cases: 419 | 313 passed | 86 failed | 6 skipped | 14 failed as expected
assertions: 2265 | 2083 passed | 147 failed | 35 failed as expected

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuitesloose text artifact
>
<testsuite name="<exe-name>" errors="17" failures="130" skipped="12" tests="2271" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testsuite name="<exe-name>" errors="17" failures="130" skipped="12" tests="2277" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<properties>
<property name="random-seed" value="1"/>
<property name="filters" value="&quot;*&quot; ~[!nonportable] ~[!benchmark] ~[approvals]"/>
@@ -420,6 +420,7 @@ at Exception.tests.cpp:<line number>
<testcase classname="<exe-name>.global" name="Character pretty printing/Specifically escaped" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Character pretty printing/General chars" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Character pretty printing/Low ASCII" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Clara::Arg does not crash on incomplete input" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Clara::Arg supports single-arg parse the way Opt does" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Clara::Opt supports accept-many lambdas" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Clara::Opt supports accept-many lambdas/Parsing fails on multiple options without accept_many" time="{duration}" status="run"/>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="<exe-name>" errors="17" failures="130" skipped="12" tests="2271" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testsuite name="<exe-name>" errors="17" failures="130" skipped="12" tests="2277" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<properties>
<property name="random-seed" value="1"/>
<property name="filters" value="&quot;*&quot; ~[!nonportable] ~[!benchmark] ~[approvals]"/>
@@ -419,6 +419,7 @@ at Exception.tests.cpp:<line number>
<testcase classname="<exe-name>.global" name="Character pretty printing/Specifically escaped" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Character pretty printing/General chars" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Character pretty printing/Low ASCII" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Clara::Arg does not crash on incomplete input" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Clara::Arg supports single-arg parse the way Opt does" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Clara::Opt supports accept-many lambdas" time="{duration}" status="run"/>
<testcase classname="<exe-name>.global" name="Clara::Opt supports accept-many lambdas/Parsing fails on multiple options without accept_many" time="{duration}" status="run"/>

View File

@@ -13,52 +13,68 @@ at AssertionHandler.tests.cpp:<line number>
</testCase>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp">
<testCase name="Clara::Arg does not crash on incomplete input" duration="{duration}"/>
<testCase name="Clara::Arg supports single-arg parse the way Opt does" duration="{duration}"/>
<testCase name="Clara::Opt supports accept-many lambdas" duration="{duration}"/>
<testCase name="Clara::Opt supports accept-many lambdas/Parsing fails on multiple options without accept_many" duration="{duration}"/>
<testCase name="Clara::Opt supports accept-many lambdas/Parsing succeeds on multiple options with accept_many" duration="{duration}"/>
<testCase name="is_unary_function" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp">
<testCase name="Parsing sharding-related cli flags" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/shard-count" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Negative shard count reports error" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Zero shard count reports error" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/shard-index" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Negative shard index reports error" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Shard index 0 is accepted" duration="{duration}"/>
<testCase name="Parsing warnings" duration="{duration}"/>
<testCase name="Parsing warnings/NoAssertions" duration="{duration}"/>
<testCase name="Parsing warnings/NoTests is no longer supported" duration="{duration}"/>
<testCase name="Parsing warnings/Combining multiple warnings" duration="{duration}"/>
<testCase name="Process can be configured on command line" duration="{duration}"/>
<testCase name="Process can be configured on command line/empty args don't cause a crash" duration="{duration}"/>
<testCase name="Process can be configured on command line/default - no arguments" duration="{duration}"/>
<testCase name="Process can be configured on command line/test lists" duration="{duration}"/>
<testCase name="Process can be configured on command line/test lists/Specify one test case using" duration="{duration}"/>
<testCase name="Process can be configured on command line/test lists/Specify one test case exclusion using exclude:" duration="{duration}"/>
<testCase name="Process can be configured on command line/test lists/Specify one test case exclusion using ~" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/-r/console" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/-r/xml" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/--reporter/junit" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/must match one of the available ones" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/With output file" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/With Windows-like absolute path as output file" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/Multiple reporters" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/Multiple reporters/All with output files" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/Multiple reporters/Mixed output files and default output" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/Multiple reporters/cannot have multiple reporters with default output" duration="{duration}"/>
<testCase name="Process can be configured on command line/debugger" duration="{duration}"/>
<testCase name="Process can be configured on command line/debugger/-b" duration="{duration}"/>
<testCase name="Process can be configured on command line/debugger/--break" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/-a aborts after first failure" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/-x 2 aborts after two failures" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/-x must be numeric" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/wait-for-keypress" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/wait-for-keypress/Accepted options" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/wait-for-keypress/invalid options are reported" duration="{duration}"/>
<testCase name="Process can be configured on command line/nothrow" duration="{duration}"/>
<testCase name="Process can be configured on command line/nothrow/-e" duration="{duration}"/>
<testCase name="Process can be configured on command line/nothrow/--nothrow" duration="{duration}"/>
<testCase name="Process can be configured on command line/output filename" duration="{duration}"/>
<testCase name="Process can be configured on command line/output filename/-o filename" duration="{duration}"/>
<testCase name="Process can be configured on command line/output filename/--out" duration="{duration}"/>
<testCase name="Process can be configured on command line/combinations" duration="{duration}"/>
<testCase name="Process can be configured on command line/combinations/Single character flags can be combined" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/without option" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/auto" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/yes" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/no" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/error" duration="{duration}"/>
<testCase name="Process can be configured on command line/Benchmark options" duration="{duration}"/>
<testCase name="Process can be configured on command line/Benchmark options/samples" duration="{duration}"/>
<testCase name="Process can be configured on command line/Benchmark options/resamples" duration="{duration}"/>
<testCase name="Process can be configured on command line/Benchmark options/confidence-interval" duration="{duration}"/>
@@ -67,13 +83,16 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="Test with special, characters &quot;in name" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/ColourImpl.tests.cpp">
<testCase name="ColourGuard behaviour" duration="{duration}"/>
<testCase name="ColourGuard behaviour/ColourGuard is disengaged by default" duration="{duration}"/>
<testCase name="ColourGuard behaviour/ColourGuard is engaged by op&lt;&lt;" duration="{duration}"/>
<testCase name="ColourGuard behaviour/ColourGuard can be engaged explicitly" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Details.tests.cpp">
<testCase name="CaseInsensitiveEqualsTo is case insensitive" duration="{duration}"/>
<testCase name="CaseInsensitiveEqualsTo is case insensitive/Degenerate cases" duration="{duration}"/>
<testCase name="CaseInsensitiveEqualsTo is case insensitive/Plain comparisons" duration="{duration}"/>
<testCase name="CaseInsensitiveLess is case insensitive" duration="{duration}"/>
<testCase name="CaseInsensitiveLess is case insensitive/Degenerate cases" duration="{duration}"/>
<testCase name="CaseInsensitiveLess is case insensitive/Plain comparisons" duration="{duration}"/>
</file>
@@ -82,35 +101,49 @@ at AssertionHandler.tests.cpp:<line number>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp">
<testCase name="Filter generator throws exception for empty generator" duration="{duration}"/>
<testCase name="Generators internals" duration="{duration}"/>
<testCase name="Generators internals/Single value" duration="{duration}"/>
<testCase name="Generators internals/Preset values" duration="{duration}"/>
<testCase name="Generators internals/Generator combinator" duration="{duration}"/>
<testCase name="Generators internals/Explicitly typed generator sequence" duration="{duration}"/>
<testCase name="Generators internals/Filter generator" duration="{duration}"/>
<testCase name="Generators internals/Filter generator/Simple filtering" duration="{duration}"/>
<testCase name="Generators internals/Filter generator/Filter out multiple elements at the start and end" duration="{duration}"/>
<testCase name="Generators internals/Filter generator/Throws on construction if it can't get initial element" duration="{duration}"/>
<testCase name="Generators internals/Take generator" duration="{duration}"/>
<testCase name="Generators internals/Take generator/Take less" duration="{duration}"/>
<testCase name="Generators internals/Take generator/Take more" duration="{duration}"/>
<testCase name="Generators internals/Map with explicit return type" duration="{duration}"/>
<testCase name="Generators internals/Map with deduced return type" duration="{duration}"/>
<testCase name="Generators internals/Repeat" duration="{duration}"/>
<testCase name="Generators internals/Repeat/Singular repeat" duration="{duration}"/>
<testCase name="Generators internals/Repeat/Actual repeat" duration="{duration}"/>
<testCase name="Generators internals/Range" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive auto step" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive auto step/Integer" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative auto step" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative auto step/Integer" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Integer" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Integer/Exact" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Integer/Slightly over end" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Integer/Slightly under end" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Floating Point" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Floating Point/Exact" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Floating Point/Slightly over end" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Floating Point/Slightly under end" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step/Integer" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step/Integer/Exact" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step/Integer/Slightly over end" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step/Integer/Slightly under end" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/InternalBenchmark.tests.cpp">
<testCase name="analyse no analysis" duration="{duration}"/>
<testCase name="benchmark function call" duration="{duration}"/>
<testCase name="benchmark function call/without chronometer" duration="{duration}"/>
<testCase name="benchmark function call/with chronometer" duration="{duration}"/>
<testCase name="classify_outliers" duration="{duration}"/>
<testCase name="classify_outliers/none" duration="{duration}"/>
<testCase name="classify_outliers/low severe" duration="{duration}"/>
<testCase name="classify_outliers/low mild" duration="{duration}"/>
@@ -130,6 +163,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="weighted_average_quantile" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Json.tests.cpp">
<testCase name="JsonWriter" duration="{duration}"/>
<testCase name="JsonWriter/Newly constructed JsonWriter does nothing" duration="{duration}"/>
<testCase name="JsonWriter/Calling writeObject will create an empty pair of braces" duration="{duration}"/>
<testCase name="JsonWriter/Calling writeObject with key will create an object to write the value" duration="{duration}"/>
@@ -139,6 +173,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="JsonWriter/Moved from JsonObjectWriter shall not insert superfluous brace" duration="{duration}"/>
<testCase name="JsonWriter/Moved from JsonArrayWriter shall not insert superfluous bracket" duration="{duration}"/>
<testCase name="JsonWriter/Custom class shall be quoted" duration="{duration}"/>
<testCase name="JsonWriter escapes charaters in strings properly" duration="{duration}"/>
<testCase name="JsonWriter escapes charaters in strings properly/Quote in a string is escaped" duration="{duration}"/>
<testCase name="JsonWriter escapes charaters in strings properly/Backslash in a string is escaped" duration="{duration}"/>
<testCase name="JsonWriter escapes charaters in strings properly/Forward slash in a string is **not** escaped" duration="{duration}"/>
@@ -150,10 +185,12 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="JsonWriter escapes charaters in strings properly/combination of characters is escaped" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Parse.tests.cpp">
<testCase name="Parse uints" duration="{duration}"/>
<testCase name="Parse uints/proper inputs" duration="{duration}"/>
<testCase name="Parse uints/Bad inputs" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/PartTracker.tests.cpp">
<testCase name="#1938 - GENERATE after a section" duration="{duration}"/>
<testCase name="#1938 - GENERATE after a section/A" duration="{duration}"/>
<testCase name="#1938 - GENERATE after a section/B" duration="{duration}"/>
<testCase name="#1938 - Section followed by flat generate" duration="{duration}"/>
@@ -176,6 +213,7 @@ at AssertionHandler.tests.cpp:<line number>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/RandomNumberGeneration.tests.cpp">
<testCase name="Comparison ops" duration="{duration}"/>
<testCase name="Our PCG implementation provides expected results for known seeds" duration="{duration}"/>
<testCase name="Our PCG implementation provides expected results for known seeds/Default seeded" duration="{duration}"/>
<testCase name="Our PCG implementation provides expected results for known seeds/Specific seed" duration="{duration}"/>
<testCase name="Random seed generation accepts known methods" duration="{duration}"/>
@@ -217,6 +255,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="Reporter's write listings to provided stream/XML reporter lists reporters" duration="{duration}"/>
<testCase name="Reporter's write listings to provided stream/XML reporter lists tests" duration="{duration}"/>
<testCase name="Reproducer for #2309 - a very long description past 80 chars (default console width) with a late colon : blablabla" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing tags" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing reporters" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing tests" duration="{duration}"/>
@@ -230,11 +269,13 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="stdout and stderr streams have %-starting name" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/String.tests.cpp">
<testCase name="StringRef" duration="{duration}"/>
<testCase name="StringRef/Empty string" duration="{duration}"/>
<testCase name="StringRef/From string literal" duration="{duration}"/>
<testCase name="StringRef/From sub-string" duration="{duration}"/>
<testCase name="StringRef/Copy construction is shallow" duration="{duration}"/>
<testCase name="StringRef/Copy assignment is shallow" duration="{duration}"/>
<testCase name="StringRef/Substrings" duration="{duration}"/>
<testCase name="StringRef/Substrings/zero-based substring" duration="{duration}"/>
<testCase name="StringRef/Substrings/non-zero-based substring" duration="{duration}"/>
<testCase name="StringRef/Substrings/Pointer values of full refs should match" duration="{duration}"/>
@@ -243,24 +284,29 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="StringRef/Substrings/Substring off the end are trimmed" duration="{duration}"/>
<testCase name="StringRef/Substrings/substring start after the end is empty" duration="{duration}"/>
<testCase name="StringRef/Comparisons are deep" duration="{duration}"/>
<testCase name="StringRef/from std::string" duration="{duration}"/>
<testCase name="StringRef/from std::string/implicitly constructed" duration="{duration}"/>
<testCase name="StringRef/from std::string/explicitly constructed" duration="{duration}"/>
<testCase name="StringRef/from std::string/assigned" duration="{duration}"/>
<testCase name="StringRef/to std::string" duration="{duration}"/>
<testCase name="StringRef/to std::string/explicitly constructed" duration="{duration}"/>
<testCase name="StringRef/to std::string/assigned" duration="{duration}"/>
<testCase name="StringRef/std::string += StringRef" duration="{duration}"/>
<testCase name="StringRef/StringRef + StringRef" duration="{duration}"/>
<testCase name="StringRef at compilation time" duration="{duration}"/>
<testCase name="StringRef at compilation time/Simple constructors" duration="{duration}"/>
<testCase name="StringRef at compilation time/UDL construction" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/StringManip.tests.cpp">
<testCase name="Trim strings" duration="{duration}"/>
<testCase name="replaceInPlace" duration="{duration}"/>
<testCase name="replaceInPlace/replace single char" duration="{duration}"/>
<testCase name="replaceInPlace/replace two chars" duration="{duration}"/>
<testCase name="replaceInPlace/replace first char" duration="{duration}"/>
<testCase name="replaceInPlace/replace last char" duration="{duration}"/>
<testCase name="replaceInPlace/replace all chars" duration="{duration}"/>
<testCase name="replaceInPlace/replace no chars" duration="{duration}"/>
<testCase name="replaceInPlace/no replace in already-replaced string" duration="{duration}"/>
<testCase name="replaceInPlace/no replace in already-replaced string/lengthening" duration="{duration}"/>
<testCase name="replaceInPlace/no replace in already-replaced string/shortening" duration="{duration}"/>
<testCase name="replaceInPlace/escape '" duration="{duration}"/>
@@ -268,6 +314,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="startsWith" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Tag.tests.cpp">
<testCase name="Tag alias can be registered against tag patterns" duration="{duration}"/>
<testCase name="Tag alias can be registered against tag patterns/The same tag alias can only be registered once" duration="{duration}"/>
<testCase name="Tag alias can be registered against tag patterns/Tag aliases must be of the form [@name]" duration="{duration}"/>
<testCase name="Tags with spaces and non-alphanumerical characters are accepted" duration="{duration}"/>
@@ -279,6 +326,7 @@ at AssertionHandler.tests.cpp:<line number>
<file path="tests/<exe-name>/IntrospectiveTests/TestCaseInfoHasher.tests.cpp">
<testCase name="Hashers with different seed produce different hash with same test case" duration="{duration}"/>
<testCase name="Hashers with same seed produce same hash" duration="{duration}"/>
<testCase name="Hashing different test cases produces different result" duration="{duration}"/>
<testCase name="Hashing different test cases produces different result/Different test name" duration="{duration}"/>
<testCase name="Hashing different test cases produces different result/Different classname" duration="{duration}"/>
<testCase name="Hashing different test cases produces different result/Different tags" duration="{duration}"/>
@@ -286,6 +334,7 @@ at AssertionHandler.tests.cpp:<line number>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/TestSpec.tests.cpp">
<testCase name="#1905 -- test spec parser properly clears internal state between compound tests" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/Various parentheses" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/backslash in test name" duration="{duration}"/>
</file>
@@ -299,16 +348,20 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="Stringifying char arrays with statically known sizes - char" duration="{duration}"/>
<testCase name="Stringifying char arrays with statically known sizes - signed char" duration="{duration}"/>
<testCase name="Stringifying char arrays with statically known sizes - unsigned char" duration="{duration}"/>
<testCase name="parseEnums" duration="{duration}"/>
<testCase name="parseEnums/No enums" duration="{duration}"/>
<testCase name="parseEnums/One enum value" duration="{duration}"/>
<testCase name="parseEnums/Multiple enum values" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/UniquePtr.tests.cpp">
<testCase name="Upcasting special member functions" duration="{duration}"/>
<testCase name="Upcasting special member functions/Move constructor" duration="{duration}"/>
<testCase name="Upcasting special member functions/move assignment" duration="{duration}"/>
<testCase name="make_unique reimplementation" duration="{duration}"/>
<testCase name="make_unique reimplementation/From lvalue copies" duration="{duration}"/>
<testCase name="make_unique reimplementation/From rvalue moves" duration="{duration}"/>
<testCase name="make_unique reimplementation/Variadic constructor" duration="{duration}"/>
<testCase name="unique_ptr reimplementation: basic functionality" duration="{duration}"/>
<testCase name="unique_ptr reimplementation: basic functionality/Default constructed unique_ptr is empty" duration="{duration}"/>
<testCase name="unique_ptr reimplementation: basic functionality/Take ownership of allocation" duration="{duration}"/>
<testCase name="unique_ptr reimplementation: basic functionality/Take ownership of allocation/Plain reset deallocates" duration="{duration}"/>
@@ -319,6 +372,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="unique_ptr reimplementation: basic functionality/free swap" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Xml.tests.cpp">
<testCase name="XmlEncode" duration="{duration}"/>
<testCase name="XmlEncode/normal string" duration="{duration}"/>
<testCase name="XmlEncode/empty string" duration="{duration}"/>
<testCase name="XmlEncode/string with ampersand" duration="{duration}"/>
@@ -348,14 +402,27 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="Use a custom approx" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/UsageTests/BDD.tests.cpp">
<testCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods" duration="{duration}"/>
<testCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me" duration="{duration}"/>
<testCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me/When: We get the count" duration="{duration}"/>
<testCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me/When: We get the count/Then: Subsequently values are higher" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists/And given: And some assumption" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists/And given: And some assumption/When: I do this" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists/And given: And some assumption/When: I do this/Then: it should do this" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists/And given: And some assumption/When: I do this/Then: it should do this/And: do that" duration="{duration}"/>
<testCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping" duration="{duration}"/>
<testCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping/Given: A section name that is so long that it cannot fit in a single console width" duration="{duration}"/>
<testCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping/Given: A section name that is so long that it cannot fit in a single console width/When: The test headers are printed as part of the normal running of the scenario" duration="{duration}"/>
<testCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping/Given: A section name that is so long that it cannot fit in a single console width/When: The test headers are printed as part of the normal running of the scenario/Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: it is made larger" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: it is made larger/Then: the size and capacity go up" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: it is made larger/Then: the size and capacity go up/And when: it is made smaller again" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: it is made larger/Then: the size and capacity go up/And when: it is made smaller again/Then: the size goes down but the capacity stays the same" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: we reserve more space" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: we reserve more space/Then: The capacity is increased but the size remains the same" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/UsageTests/Class.tests.cpp">
@@ -529,6 +596,7 @@ with expansion:
at Class.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="A TEST_CASE_PERSISTENT_FIXTURE based test run that succeeds" duration="{duration}"/>
<testCase name="A TEST_CASE_PERSISTENT_FIXTURE based test run that succeeds/First partial run" duration="{duration}"/>
<testCase name="A TEST_CASE_PERSISTENT_FIXTURE based test run that succeeds/Second partial run" duration="{duration}"/>
<testCase name="Template test case method with test types specified inside std::tuple - MyTypes - 0" duration="{duration}"/>
@@ -540,6 +608,7 @@ at Class.tests.cpp:<line number>
<testCase name="#1147" duration="{duration}"/>
<testCase name="#1238" duration="{duration}"/>
<testCase name="#1245" duration="{duration}"/>
<testCase name="#1319: Sections can have description (even if it is not saved" duration="{duration}"/>
<testCase name="#1319: Sections can have description (even if it is not saved/SectionName" duration="{duration}"/>
<testCase name="#1403" duration="{duration}"/>
<testCase name="#1548" duration="{duration}"/>
@@ -749,24 +818,28 @@ at Condition.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="Inequality checks that should succeed" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/1" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/1/A" duration="{duration}">
<skipped message="FAIL()">
FAILED:
at Condition.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="Mayfail test case with nested sections/2" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/2/A" duration="{duration}">
<skipped message="FAIL()">
FAILED:
at Condition.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="Mayfail test case with nested sections/1" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/1/B" duration="{duration}">
<skipped message="FAIL()">
FAILED:
at Condition.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="Mayfail test case with nested sections/2" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/2/B" duration="{duration}">
<skipped message="FAIL()">
FAILED:
@@ -933,6 +1006,7 @@ at Decomposition.tests.cpp:<line number>
<testCase name="toString(enum)" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/UsageTests/Exception.tests.cpp">
<testCase name="#748 - captures with unexpected exceptions" duration="{duration}"/>
<testCase name="#748 - captures with unexpected exceptions/outside assertions" duration="{duration}">
<skipped message="TEST_CASE()">
FAILED:
@@ -982,6 +1056,7 @@ custom std exception
at Exception.tests.cpp:<line number>
</error>
</testCase>
<testCase name="Exception messages can be tested for" duration="{duration}"/>
<testCase name="Exception messages can be tested for/exact match" duration="{duration}"/>
<testCase name="Exception messages can be tested for/different case" duration="{duration}"/>
<testCase name="Exception messages can be tested for/wildcarded" duration="{duration}"/>
@@ -1073,6 +1148,7 @@ unexpected exception
at Exception.tests.cpp:<line number>
</error>
</testCase>
<testCase name="When unchecked exceptions are thrown, but caught, they do not affect the test" duration="{duration}"/>
<testCase name="thrown std::strings are translated" duration="{duration}">
<error message="TEST_CASE()">
FAILED:
@@ -1092,21 +1168,27 @@ at Generators.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="3x3x3 ints" duration="{duration}"/>
<testCase name="Copy and then generate a range" duration="{duration}"/>
<testCase name="Copy and then generate a range/from var and iterators" duration="{duration}"/>
<testCase name="Copy and then generate a range/From a temporary container" duration="{duration}"/>
<testCase name="Copy and then generate a range/Final validation" duration="{duration}"/>
<testCase name="GENERATE can combine literals and generators" duration="{duration}"/>
<testCase name="Generators -- adapters" duration="{duration}"/>
<testCase name="Generators -- adapters/Filtering by predicate" duration="{duration}"/>
<testCase name="Generators -- adapters/Filtering by predicate/Basic usage" duration="{duration}"/>
<testCase name="Generators -- adapters/Filtering by predicate/Throws if there are no matching values" duration="{duration}"/>
<testCase name="Generators -- adapters/Shortening a range" duration="{duration}"/>
<testCase name="Generators -- adapters/Transforming elements" duration="{duration}"/>
<testCase name="Generators -- adapters/Transforming elements/Same type" duration="{duration}"/>
<testCase name="Generators -- adapters/Transforming elements/Different type" duration="{duration}"/>
<testCase name="Generators -- adapters/Transforming elements/Different deduced type" duration="{duration}"/>
<testCase name="Generators -- adapters/Repeating a generator" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces/Number of elements in source is divisible by chunk size" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces/Number of elements in source is not divisible by chunk size" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces/Chunk size of zero" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces/Throws on too small generators" duration="{duration}"/>
<testCase name="Generators -- simple" duration="{duration}"/>
<testCase name="Generators -- simple/one" duration="{duration}"/>
<testCase name="Generators -- simple/two" duration="{duration}"/>
<testCase name="Nested generators and captured variables" duration="{duration}"/>
@@ -1116,6 +1198,7 @@ at Generators.tests.cpp:<line number>
<file path="tests/<exe-name>/UsageTests/Matchers.tests.cpp">
<testCase name="#2152 - ULP checks between differently signed values were wrong - double" duration="{duration}"/>
<testCase name="#2152 - ULP checks between differently signed values were wrong - float" duration="{duration}"/>
<testCase name="Arbitrary predicate matcher" duration="{duration}"/>
<testCase name="Arbitrary predicate matcher/Function pointer" duration="{duration}"/>
<testCase name="Arbitrary predicate matcher/Lambdas + different type" duration="{duration}"/>
<testCase name="Combining MatchAllOfGeneric does not nest" duration="{duration}"/>
@@ -1125,8 +1208,10 @@ at Generators.tests.cpp:<line number>
<testCase name="Combining only templated matchers" duration="{duration}"/>
<testCase name="Combining templated and concrete matchers" duration="{duration}"/>
<testCase name="Combining templated matchers" duration="{duration}"/>
<testCase name="Composed generic matchers shortcircuit" duration="{duration}"/>
<testCase name="Composed generic matchers shortcircuit/MatchAllOf" duration="{duration}"/>
<testCase name="Composed generic matchers shortcircuit/MatchAnyOf" duration="{duration}"/>
<testCase name="Composed matchers shortcircuit" duration="{duration}"/>
<testCase name="Composed matchers shortcircuit/MatchAllOf" duration="{duration}"/>
<testCase name="Composed matchers shortcircuit/MatchAnyOf" duration="{duration}"/>
<testCase name="Contains string matcher" duration="{duration}">
@@ -1223,6 +1308,7 @@ at Matchers.tests.cpp:<line number>
<testCase name="Exception matchers that succeed" duration="{duration}"/>
<testCase name="Exception message can be matched" duration="{duration}"/>
<testCase name="Exceptions matchers" duration="{duration}"/>
<testCase name="Floating point matchers: double" duration="{duration}"/>
<testCase name="Floating point matchers: double/Relative" duration="{duration}"/>
<testCase name="Floating point matchers: double/Relative/Some subnormal values" duration="{duration}"/>
<testCase name="Floating point matchers: double/Margin" duration="{duration}"/>
@@ -1230,6 +1316,7 @@ at Matchers.tests.cpp:<line number>
<testCase name="Floating point matchers: double/Composed" duration="{duration}"/>
<testCase name="Floating point matchers: double/Constructor validation" duration="{duration}"/>
<testCase name="Floating point matchers: double/IsNaN" duration="{duration}"/>
<testCase name="Floating point matchers: float" duration="{duration}"/>
<testCase name="Floating point matchers: float/Relative" duration="{duration}"/>
<testCase name="Floating point matchers: float/Relative/Some subnormal values" duration="{duration}"/>
<testCase name="Floating point matchers: float/Margin" duration="{duration}"/>
@@ -1302,10 +1389,13 @@ at Matchers.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="String matchers" duration="{duration}"/>
<testCase name="Vector Approx matcher" duration="{duration}"/>
<testCase name="Vector Approx matcher/Empty vector is roughly equal to an empty vector" duration="{duration}"/>
<testCase name="Vector Approx matcher/Vectors with elements" duration="{duration}"/>
<testCase name="Vector Approx matcher/Vectors with elements/A vector is approx equal to itself" duration="{duration}"/>
<testCase name="Vector Approx matcher/Vectors with elements/Different length" duration="{duration}"/>
<testCase name="Vector Approx matcher/Vectors with elements/Same length, different elements" duration="{duration}"/>
<testCase name="Vector Approx matcher -- failing" duration="{duration}"/>
<testCase name="Vector Approx matcher -- failing/Empty and non empty vectors are not approx equal" duration="{duration}">
<failure message="CHECK_THAT(empty, Approx( t1 ))">
FAILED:
@@ -1324,11 +1414,13 @@ with expansion:
at Matchers.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="Vector matchers" duration="{duration}"/>
<testCase name="Vector matchers/Contains (element)" duration="{duration}"/>
<testCase name="Vector matchers/Contains (vector)" duration="{duration}"/>
<testCase name="Vector matchers/Contains (element), composed" duration="{duration}"/>
<testCase name="Vector matchers/Equals" duration="{duration}"/>
<testCase name="Vector matchers/UnorderedEquals" duration="{duration}"/>
<testCase name="Vector matchers that fail" duration="{duration}"/>
<testCase name="Vector matchers that fail/Contains (element)" duration="{duration}">
<failure message="CHECK_THAT(v, VectorContains( -1 ))">
FAILED:
@@ -1423,82 +1515,114 @@ at Matchers.tests.cpp:<line number>
</testCase>
</file>
<file path="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp">
<testCase name="Basic use of the Contains range matcher" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Different argument ranges, same element type, default comparison" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Different argument ranges, same element type, custom comparison" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Different element type, custom comparisons" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Can handle type that requires ADL-found free function begin and end" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Initialization with move only types" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Matching using matcher" duration="{duration}"/>
<testCase name="Basic use of the Empty range matcher" duration="{duration}"/>
<testCase name="Basic use of the Empty range matcher/Simple, std-provided containers" duration="{duration}"/>
<testCase name="Basic use of the Empty range matcher/Type with empty" duration="{duration}"/>
<testCase name="Basic use of the Empty range matcher/Type requires ADL found empty free function" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions/Two equal containers of different container types" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions/Two equal containers of different container types (differ in array N)" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions/Two equal containers of different container types and value types" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions/Two equal containers, one random access, one not" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Value type" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Value type/Two equal containers of different value types" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Value type/Two non-equal containers of different value types" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Ranges with begin that needs ADL" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Custom predicate" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Type requires ADL found begin and end" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage/All true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage/Empty evaluates to true" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage/One false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage/All false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Contained type is convertible to bool" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Contained type is convertible to bool/All true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Contained type is convertible to bool/One false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Contained type is convertible to bool/All false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Type requires ADL found begin and end" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage/All true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage/Empty evaluates to false" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage/One true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage/All false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Contained type is convertible to bool" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Contained type is convertible to bool/All true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Contained type is convertible to bool/One true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Contained type is convertible to bool/All false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Type requires ADL found begin and end" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage/All true evaluates to false" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage/Empty evaluates to true" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage/One true evaluates to false" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage/All false evaluates to true" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Contained type is convertible to bool" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Contained type is convertible to bool/All true evaluates to false" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Contained type is convertible to bool/One true evaluates to false" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Contained type is convertible to bool/All false evaluates to true" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Empty container matches empty container" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Empty container does not match non-empty container" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Two equal 1-length non-empty containers" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Two equal-sized, equal, non-empty containers" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Two equal-sized, non-equal, non-empty containers" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Two non-equal-sized, non-empty containers (with same first elements)" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Custom predicate" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Ranges that need ADL begin/end" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/Check short-circuits on failure" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/All elements are checked on success" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Empty container matches empty container" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Empty container does not match non-empty container" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Two equal 1-length non-empty containers" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Two equal-sized, equal, non-empty containers" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Two equal-sized, non-equal, non-empty containers" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Two non-equal-sized, non-empty containers" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Ranges that need ADL begin/end" duration="{duration}"/>
<testCase name="Usage of the SizeIs range matcher" duration="{duration}"/>
<testCase name="Usage of the SizeIs range matcher/Some with stdlib containers" duration="{duration}"/>
<testCase name="Usage of the SizeIs range matcher/Type requires ADL found size free function" duration="{duration}"/>
<testCase name="Usage of the SizeIs range matcher/Type has size member" duration="{duration}"/>
@@ -1597,6 +1721,8 @@ at Message.tests.cpp:<line number>
</testCase>
<testCase name="SUCCEED counts as a test pass" duration="{duration}"/>
<testCase name="SUCCEED does not require an argument" duration="{duration}"/>
<testCase name="Standard output from all sections is reported" duration="{duration}"/>
<testCase name="Standard output from all sections is reported/one" duration="{duration}"/>
<testCase name="Standard output from all sections is reported/two" duration="{duration}"/>
<testCase name="The NO_FAIL macro reports a failure but does not fail the test" duration="{duration}"/>
<testCase name="just failure" duration="{duration}">
@@ -1613,6 +1739,8 @@ previous unscoped info SHOULD not be seen
at Message.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="just info" duration="{duration}"/>
<testCase name="just unscoped info" duration="{duration}"/>
<testCase name="mix info, unscoped info and warning" duration="{duration}"/>
<testCase name="not prints unscoped info from previous failures" duration="{duration}">
<failure message="REQUIRE(false)">
@@ -1685,6 +1813,7 @@ with expansion:
at Misc.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="#961 -- Dynamically created sections should all be reported" duration="{duration}"/>
<testCase name="#961 -- Dynamically created sections should all be reported/Looped section 0" duration="{duration}"/>
<testCase name="#961 -- Dynamically created sections should all be reported/Looped section 1" duration="{duration}"/>
<testCase name="#961 -- Dynamically created sections should all be reported/Looped section 2" duration="{duration}"/>
@@ -1705,7 +1834,9 @@ to infinity and beyond
at Misc.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="A couple of nested sections followed by a failure/Outer" duration="{duration}"/>
<testCase name="A couple of nested sections followed by a failure/Outer/Inner" duration="{duration}"/>
<testCase name="An empty test with no assertions" duration="{duration}"/>
<testCase name="Factorials are computed" duration="{duration}"/>
<testCase name="ManuallyRegistered" duration="{duration}"/>
<testCase name="Nice descriptive name" duration="{duration}"/>
@@ -1834,10 +1965,14 @@ with expansion:
at Misc.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="even more nested SECTION tests" duration="{duration}"/>
<testCase name="even more nested SECTION tests/c" duration="{duration}"/>
<testCase name="even more nested SECTION tests/c/d (leaf)" duration="{duration}"/>
<testCase name="even more nested SECTION tests/c/e (leaf)" duration="{duration}"/>
<testCase name="even more nested SECTION tests/f (leaf)" duration="{duration}"/>
<testCase name="first tag" duration="{duration}"/>
<testCase name="long long" duration="{duration}"/>
<testCase name="looped SECTION tests" duration="{duration}"/>
<testCase name="looped SECTION tests/b is currently: 0" duration="{duration}">
<failure message="CHECK(b > a)">
FAILED:
@@ -1914,6 +2049,8 @@ Testing if fib[7] (21) is even
at Misc.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="more nested SECTION tests" duration="{duration}"/>
<testCase name="more nested SECTION tests/equal" duration="{duration}"/>
<testCase name="more nested SECTION tests/equal/doesn't equal" duration="{duration}">
<failure message="REQUIRE(a == b)">
FAILED:
@@ -1923,14 +2060,18 @@ with expansion:
at Misc.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="more nested SECTION tests/doesn't equal" duration="{duration}"/>
<testCase name="more nested SECTION tests/doesn't equal/not equal" duration="{duration}"/>
<testCase name="more nested SECTION tests/doesn't equal/less than" duration="{duration}"/>
<testCase name="nested SECTION tests" duration="{duration}"/>
<testCase name="nested SECTION tests/doesn't equal" duration="{duration}"/>
<testCase name="nested SECTION tests/doesn't equal/not equal" duration="{duration}"/>
<testCase name="not allowed" duration="{duration}"/>
<testCase name="null strings" duration="{duration}"/>
<testCase name="random SECTION tests" duration="{duration}"/>
<testCase name="random SECTION tests/doesn't equal" duration="{duration}"/>
<testCase name="random SECTION tests/not equal" duration="{duration}"/>
<testCase name="second tag" duration="{duration}"/>
<testCase name="send a single char to INFO" duration="{duration}">
<failure message="REQUIRE(false)">
FAILED:
@@ -1949,6 +2090,7 @@ at Misc.tests.cpp:<line number>
<testCase name="vectors can be sized and resized/resizing smaller changes size but not capacity/We can use the 'swap trick' to reset the capacity" duration="{duration}"/>
<testCase name="vectors can be sized and resized/reserving bigger changes capacity but not size" duration="{duration}"/>
<testCase name="vectors can be sized and resized/reserving smaller does not change size or capacity" duration="{duration}"/>
<testCase name="xmlentitycheck" duration="{duration}"/>
<testCase name="xmlentitycheck/embedded xml: &lt;test>it should be possible to embed xml characters, such as &lt;, &quot; or &amp;, or even whole &lt;xml>documents&lt;/xml> within an attribute&lt;/test>" duration="{duration}"/>
<testCase name="xmlentitycheck/encoded chars: these should all be encoded: &amp;&amp;&amp;&quot;&quot;&quot;&lt;&lt;&lt;&amp;&quot;&lt;&lt;&amp;&quot;" duration="{duration}"/>
</file>
@@ -2019,6 +2161,9 @@ FAILED:
at Skip.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="nested sections can be skipped dynamically at runtime/A" duration="{duration}"/>
<testCase name="nested sections can be skipped dynamically at runtime/B2" duration="{duration}"/>
<testCase name="nested sections can be skipped dynamically at runtime/B2/B1" duration="{duration}"/>
<testCase name="nested sections can be skipped dynamically at runtime/B2/B" duration="{duration}">
<skipped message="SKIP()">
SKIPPED
@@ -2026,6 +2171,7 @@ at Skip.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="nested sections can be skipped dynamically at runtime/B" duration="{duration}"/>
<testCase name="sections can be skipped dynamically at runtime" duration="{duration}"/>
<testCase name="sections can be skipped dynamically at runtime/not skipped" duration="{duration}"/>
<testCase name="sections can be skipped dynamically at runtime/skipped" duration="{duration}">
<skipped message="SKIP()">
@@ -2054,20 +2200,26 @@ at Skip.tests.cpp:<line number>
<testCase name="Stringifying std::chrono::time_point&lt;system_clock>" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/UsageTests/ToStringGeneral.tests.cpp">
<testCase name="Capture and info messages" duration="{duration}"/>
<testCase name="Capture and info messages/Capture should stringify like assertions" duration="{duration}"/>
<testCase name="Capture and info messages/Info should NOT stringify the way assertions do" duration="{duration}"/>
<testCase name="Character pretty printing" duration="{duration}"/>
<testCase name="Character pretty printing/Specifically escaped" duration="{duration}"/>
<testCase name="Character pretty printing/General chars" duration="{duration}"/>
<testCase name="Character pretty printing/Low ASCII" duration="{duration}"/>
<testCase name="Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified" duration="{duration}"/>
<testCase name="Precision of floating point stringification can be set" duration="{duration}"/>
<testCase name="Precision of floating point stringification can be set/Floats" duration="{duration}"/>
<testCase name="Precision of floating point stringification can be set/Double" duration="{duration}"/>
<testCase name="Static arrays are convertible to string" duration="{duration}"/>
<testCase name="Static arrays are convertible to string/Single item" duration="{duration}"/>
<testCase name="Static arrays are convertible to string/Multiple" duration="{duration}"/>
<testCase name="Static arrays are convertible to string/Non-trivial inner items" duration="{duration}"/>
<testCase name="std::map is convertible string" duration="{duration}"/>
<testCase name="std::map is convertible string/empty" duration="{duration}"/>
<testCase name="std::map is convertible string/single item" duration="{duration}"/>
<testCase name="std::map is convertible string/several items" duration="{duration}"/>
<testCase name="std::set is convertible string" duration="{duration}"/>
<testCase name="std::set is convertible string/empty" duration="{duration}"/>
<testCase name="std::set is convertible string/single item" duration="{duration}"/>
<testCase name="std::set is convertible string/several items" duration="{duration}"/>
@@ -2112,6 +2264,7 @@ FAILED:
at Tricky.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="(unimplemented) static bools can be evaluated" duration="{duration}"/>
<testCase name="(unimplemented) static bools can be evaluated/compare to true" duration="{duration}"/>
<testCase name="(unimplemented) static bools can be evaluated/compare to false" duration="{duration}"/>
<testCase name="(unimplemented) static bools can be evaluated/negation" duration="{duration}"/>
@@ -2147,6 +2300,7 @@ at Tricky.tests.cpp:<line number>
<testCase name="X/level/1/a" duration="{duration}"/>
<testCase name="X/level/1/b" duration="{duration}"/>
<testCase name="boolean member" duration="{duration}"/>
<testCase name="has printf" duration="{duration}"/>
<testCase name="non streamable - with conv. op" duration="{duration}"/>
<testCase name="non-copyable objects" duration="{duration}"/>
<testCase name="null_ptr" duration="{duration}"/>
@@ -2155,6 +2309,7 @@ at Tricky.tests.cpp:<line number>
<file path="tests/<exe-name>/UsageTests/VariadicMacros.tests.cpp">
<testCase name="Anonymous test case 1" duration="{duration}"/>
<testCase name="Test case with one argument" duration="{duration}"/>
<testCase name="Variadic macros" duration="{duration}"/>
<testCase name="Variadic macros/Section with one argument" duration="{duration}"/>
</file>
</testExecutions>

View File

@@ -12,52 +12,68 @@ at AssertionHandler.tests.cpp:<line number>
</testCase>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp">
<testCase name="Clara::Arg does not crash on incomplete input" duration="{duration}"/>
<testCase name="Clara::Arg supports single-arg parse the way Opt does" duration="{duration}"/>
<testCase name="Clara::Opt supports accept-many lambdas" duration="{duration}"/>
<testCase name="Clara::Opt supports accept-many lambdas/Parsing fails on multiple options without accept_many" duration="{duration}"/>
<testCase name="Clara::Opt supports accept-many lambdas/Parsing succeeds on multiple options with accept_many" duration="{duration}"/>
<testCase name="is_unary_function" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/CmdLine.tests.cpp">
<testCase name="Parsing sharding-related cli flags" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/shard-count" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Negative shard count reports error" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Zero shard count reports error" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/shard-index" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Negative shard index reports error" duration="{duration}"/>
<testCase name="Parsing sharding-related cli flags/Shard index 0 is accepted" duration="{duration}"/>
<testCase name="Parsing warnings" duration="{duration}"/>
<testCase name="Parsing warnings/NoAssertions" duration="{duration}"/>
<testCase name="Parsing warnings/NoTests is no longer supported" duration="{duration}"/>
<testCase name="Parsing warnings/Combining multiple warnings" duration="{duration}"/>
<testCase name="Process can be configured on command line" duration="{duration}"/>
<testCase name="Process can be configured on command line/empty args don't cause a crash" duration="{duration}"/>
<testCase name="Process can be configured on command line/default - no arguments" duration="{duration}"/>
<testCase name="Process can be configured on command line/test lists" duration="{duration}"/>
<testCase name="Process can be configured on command line/test lists/Specify one test case using" duration="{duration}"/>
<testCase name="Process can be configured on command line/test lists/Specify one test case exclusion using exclude:" duration="{duration}"/>
<testCase name="Process can be configured on command line/test lists/Specify one test case exclusion using ~" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/-r/console" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/-r/xml" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/--reporter/junit" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/must match one of the available ones" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/With output file" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/With Windows-like absolute path as output file" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/Multiple reporters" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/Multiple reporters/All with output files" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/Multiple reporters/Mixed output files and default output" duration="{duration}"/>
<testCase name="Process can be configured on command line/reporter/Multiple reporters/cannot have multiple reporters with default output" duration="{duration}"/>
<testCase name="Process can be configured on command line/debugger" duration="{duration}"/>
<testCase name="Process can be configured on command line/debugger/-b" duration="{duration}"/>
<testCase name="Process can be configured on command line/debugger/--break" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/-a aborts after first failure" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/-x 2 aborts after two failures" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/-x must be numeric" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/wait-for-keypress" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/wait-for-keypress/Accepted options" duration="{duration}"/>
<testCase name="Process can be configured on command line/abort/wait-for-keypress/invalid options are reported" duration="{duration}"/>
<testCase name="Process can be configured on command line/nothrow" duration="{duration}"/>
<testCase name="Process can be configured on command line/nothrow/-e" duration="{duration}"/>
<testCase name="Process can be configured on command line/nothrow/--nothrow" duration="{duration}"/>
<testCase name="Process can be configured on command line/output filename" duration="{duration}"/>
<testCase name="Process can be configured on command line/output filename/-o filename" duration="{duration}"/>
<testCase name="Process can be configured on command line/output filename/--out" duration="{duration}"/>
<testCase name="Process can be configured on command line/combinations" duration="{duration}"/>
<testCase name="Process can be configured on command line/combinations/Single character flags can be combined" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/without option" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/auto" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/yes" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/no" duration="{duration}"/>
<testCase name="Process can be configured on command line/use-colour/error" duration="{duration}"/>
<testCase name="Process can be configured on command line/Benchmark options" duration="{duration}"/>
<testCase name="Process can be configured on command line/Benchmark options/samples" duration="{duration}"/>
<testCase name="Process can be configured on command line/Benchmark options/resamples" duration="{duration}"/>
<testCase name="Process can be configured on command line/Benchmark options/confidence-interval" duration="{duration}"/>
@@ -66,13 +82,16 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="Test with special, characters &quot;in name" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/ColourImpl.tests.cpp">
<testCase name="ColourGuard behaviour" duration="{duration}"/>
<testCase name="ColourGuard behaviour/ColourGuard is disengaged by default" duration="{duration}"/>
<testCase name="ColourGuard behaviour/ColourGuard is engaged by op&lt;&lt;" duration="{duration}"/>
<testCase name="ColourGuard behaviour/ColourGuard can be engaged explicitly" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Details.tests.cpp">
<testCase name="CaseInsensitiveEqualsTo is case insensitive" duration="{duration}"/>
<testCase name="CaseInsensitiveEqualsTo is case insensitive/Degenerate cases" duration="{duration}"/>
<testCase name="CaseInsensitiveEqualsTo is case insensitive/Plain comparisons" duration="{duration}"/>
<testCase name="CaseInsensitiveLess is case insensitive" duration="{duration}"/>
<testCase name="CaseInsensitiveLess is case insensitive/Degenerate cases" duration="{duration}"/>
<testCase name="CaseInsensitiveLess is case insensitive/Plain comparisons" duration="{duration}"/>
</file>
@@ -81,35 +100,49 @@ at AssertionHandler.tests.cpp:<line number>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp">
<testCase name="Filter generator throws exception for empty generator" duration="{duration}"/>
<testCase name="Generators internals" duration="{duration}"/>
<testCase name="Generators internals/Single value" duration="{duration}"/>
<testCase name="Generators internals/Preset values" duration="{duration}"/>
<testCase name="Generators internals/Generator combinator" duration="{duration}"/>
<testCase name="Generators internals/Explicitly typed generator sequence" duration="{duration}"/>
<testCase name="Generators internals/Filter generator" duration="{duration}"/>
<testCase name="Generators internals/Filter generator/Simple filtering" duration="{duration}"/>
<testCase name="Generators internals/Filter generator/Filter out multiple elements at the start and end" duration="{duration}"/>
<testCase name="Generators internals/Filter generator/Throws on construction if it can't get initial element" duration="{duration}"/>
<testCase name="Generators internals/Take generator" duration="{duration}"/>
<testCase name="Generators internals/Take generator/Take less" duration="{duration}"/>
<testCase name="Generators internals/Take generator/Take more" duration="{duration}"/>
<testCase name="Generators internals/Map with explicit return type" duration="{duration}"/>
<testCase name="Generators internals/Map with deduced return type" duration="{duration}"/>
<testCase name="Generators internals/Repeat" duration="{duration}"/>
<testCase name="Generators internals/Repeat/Singular repeat" duration="{duration}"/>
<testCase name="Generators internals/Repeat/Actual repeat" duration="{duration}"/>
<testCase name="Generators internals/Range" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive auto step" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive auto step/Integer" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative auto step" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative auto step/Integer" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Integer" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Integer/Exact" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Integer/Slightly over end" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Integer/Slightly under end" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Floating Point" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Floating Point/Exact" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Floating Point/Slightly over end" duration="{duration}"/>
<testCase name="Generators internals/Range/Positive manual step/Floating Point/Slightly under end" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step/Integer" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step/Integer/Exact" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step/Integer/Slightly over end" duration="{duration}"/>
<testCase name="Generators internals/Range/Negative manual step/Integer/Slightly under end" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/InternalBenchmark.tests.cpp">
<testCase name="analyse no analysis" duration="{duration}"/>
<testCase name="benchmark function call" duration="{duration}"/>
<testCase name="benchmark function call/without chronometer" duration="{duration}"/>
<testCase name="benchmark function call/with chronometer" duration="{duration}"/>
<testCase name="classify_outliers" duration="{duration}"/>
<testCase name="classify_outliers/none" duration="{duration}"/>
<testCase name="classify_outliers/low severe" duration="{duration}"/>
<testCase name="classify_outliers/low mild" duration="{duration}"/>
@@ -129,6 +162,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="weighted_average_quantile" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Json.tests.cpp">
<testCase name="JsonWriter" duration="{duration}"/>
<testCase name="JsonWriter/Newly constructed JsonWriter does nothing" duration="{duration}"/>
<testCase name="JsonWriter/Calling writeObject will create an empty pair of braces" duration="{duration}"/>
<testCase name="JsonWriter/Calling writeObject with key will create an object to write the value" duration="{duration}"/>
@@ -138,6 +172,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="JsonWriter/Moved from JsonObjectWriter shall not insert superfluous brace" duration="{duration}"/>
<testCase name="JsonWriter/Moved from JsonArrayWriter shall not insert superfluous bracket" duration="{duration}"/>
<testCase name="JsonWriter/Custom class shall be quoted" duration="{duration}"/>
<testCase name="JsonWriter escapes charaters in strings properly" duration="{duration}"/>
<testCase name="JsonWriter escapes charaters in strings properly/Quote in a string is escaped" duration="{duration}"/>
<testCase name="JsonWriter escapes charaters in strings properly/Backslash in a string is escaped" duration="{duration}"/>
<testCase name="JsonWriter escapes charaters in strings properly/Forward slash in a string is **not** escaped" duration="{duration}"/>
@@ -149,10 +184,12 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="JsonWriter escapes charaters in strings properly/combination of characters is escaped" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Parse.tests.cpp">
<testCase name="Parse uints" duration="{duration}"/>
<testCase name="Parse uints/proper inputs" duration="{duration}"/>
<testCase name="Parse uints/Bad inputs" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/PartTracker.tests.cpp">
<testCase name="#1938 - GENERATE after a section" duration="{duration}"/>
<testCase name="#1938 - GENERATE after a section/A" duration="{duration}"/>
<testCase name="#1938 - GENERATE after a section/B" duration="{duration}"/>
<testCase name="#1938 - Section followed by flat generate" duration="{duration}"/>
@@ -175,6 +212,7 @@ at AssertionHandler.tests.cpp:<line number>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/RandomNumberGeneration.tests.cpp">
<testCase name="Comparison ops" duration="{duration}"/>
<testCase name="Our PCG implementation provides expected results for known seeds" duration="{duration}"/>
<testCase name="Our PCG implementation provides expected results for known seeds/Default seeded" duration="{duration}"/>
<testCase name="Our PCG implementation provides expected results for known seeds/Specific seed" duration="{duration}"/>
<testCase name="Random seed generation accepts known methods" duration="{duration}"/>
@@ -216,6 +254,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="Reporter's write listings to provided stream/XML reporter lists reporters" duration="{duration}"/>
<testCase name="Reporter's write listings to provided stream/XML reporter lists tests" duration="{duration}"/>
<testCase name="Reproducer for #2309 - a very long description past 80 chars (default console width) with a late colon : blablabla" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing tags" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing reporters" duration="{duration}"/>
<testCase name="The default listing implementation write to provided stream/Listing tests" duration="{duration}"/>
@@ -229,11 +268,13 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="stdout and stderr streams have %-starting name" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/String.tests.cpp">
<testCase name="StringRef" duration="{duration}"/>
<testCase name="StringRef/Empty string" duration="{duration}"/>
<testCase name="StringRef/From string literal" duration="{duration}"/>
<testCase name="StringRef/From sub-string" duration="{duration}"/>
<testCase name="StringRef/Copy construction is shallow" duration="{duration}"/>
<testCase name="StringRef/Copy assignment is shallow" duration="{duration}"/>
<testCase name="StringRef/Substrings" duration="{duration}"/>
<testCase name="StringRef/Substrings/zero-based substring" duration="{duration}"/>
<testCase name="StringRef/Substrings/non-zero-based substring" duration="{duration}"/>
<testCase name="StringRef/Substrings/Pointer values of full refs should match" duration="{duration}"/>
@@ -242,24 +283,29 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="StringRef/Substrings/Substring off the end are trimmed" duration="{duration}"/>
<testCase name="StringRef/Substrings/substring start after the end is empty" duration="{duration}"/>
<testCase name="StringRef/Comparisons are deep" duration="{duration}"/>
<testCase name="StringRef/from std::string" duration="{duration}"/>
<testCase name="StringRef/from std::string/implicitly constructed" duration="{duration}"/>
<testCase name="StringRef/from std::string/explicitly constructed" duration="{duration}"/>
<testCase name="StringRef/from std::string/assigned" duration="{duration}"/>
<testCase name="StringRef/to std::string" duration="{duration}"/>
<testCase name="StringRef/to std::string/explicitly constructed" duration="{duration}"/>
<testCase name="StringRef/to std::string/assigned" duration="{duration}"/>
<testCase name="StringRef/std::string += StringRef" duration="{duration}"/>
<testCase name="StringRef/StringRef + StringRef" duration="{duration}"/>
<testCase name="StringRef at compilation time" duration="{duration}"/>
<testCase name="StringRef at compilation time/Simple constructors" duration="{duration}"/>
<testCase name="StringRef at compilation time/UDL construction" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/StringManip.tests.cpp">
<testCase name="Trim strings" duration="{duration}"/>
<testCase name="replaceInPlace" duration="{duration}"/>
<testCase name="replaceInPlace/replace single char" duration="{duration}"/>
<testCase name="replaceInPlace/replace two chars" duration="{duration}"/>
<testCase name="replaceInPlace/replace first char" duration="{duration}"/>
<testCase name="replaceInPlace/replace last char" duration="{duration}"/>
<testCase name="replaceInPlace/replace all chars" duration="{duration}"/>
<testCase name="replaceInPlace/replace no chars" duration="{duration}"/>
<testCase name="replaceInPlace/no replace in already-replaced string" duration="{duration}"/>
<testCase name="replaceInPlace/no replace in already-replaced string/lengthening" duration="{duration}"/>
<testCase name="replaceInPlace/no replace in already-replaced string/shortening" duration="{duration}"/>
<testCase name="replaceInPlace/escape '" duration="{duration}"/>
@@ -267,6 +313,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="startsWith" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Tag.tests.cpp">
<testCase name="Tag alias can be registered against tag patterns" duration="{duration}"/>
<testCase name="Tag alias can be registered against tag patterns/The same tag alias can only be registered once" duration="{duration}"/>
<testCase name="Tag alias can be registered against tag patterns/Tag aliases must be of the form [@name]" duration="{duration}"/>
<testCase name="Tags with spaces and non-alphanumerical characters are accepted" duration="{duration}"/>
@@ -278,6 +325,7 @@ at AssertionHandler.tests.cpp:<line number>
<file path="tests/<exe-name>/IntrospectiveTests/TestCaseInfoHasher.tests.cpp">
<testCase name="Hashers with different seed produce different hash with same test case" duration="{duration}"/>
<testCase name="Hashers with same seed produce same hash" duration="{duration}"/>
<testCase name="Hashing different test cases produces different result" duration="{duration}"/>
<testCase name="Hashing different test cases produces different result/Different test name" duration="{duration}"/>
<testCase name="Hashing different test cases produces different result/Different classname" duration="{duration}"/>
<testCase name="Hashing different test cases produces different result/Different tags" duration="{duration}"/>
@@ -285,6 +333,7 @@ at AssertionHandler.tests.cpp:<line number>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/TestSpec.tests.cpp">
<testCase name="#1905 -- test spec parser properly clears internal state between compound tests" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/Various parentheses" duration="{duration}"/>
<testCase name="#1912 -- test spec parser handles escaping/backslash in test name" duration="{duration}"/>
</file>
@@ -298,16 +347,20 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="Stringifying char arrays with statically known sizes - char" duration="{duration}"/>
<testCase name="Stringifying char arrays with statically known sizes - signed char" duration="{duration}"/>
<testCase name="Stringifying char arrays with statically known sizes - unsigned char" duration="{duration}"/>
<testCase name="parseEnums" duration="{duration}"/>
<testCase name="parseEnums/No enums" duration="{duration}"/>
<testCase name="parseEnums/One enum value" duration="{duration}"/>
<testCase name="parseEnums/Multiple enum values" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/UniquePtr.tests.cpp">
<testCase name="Upcasting special member functions" duration="{duration}"/>
<testCase name="Upcasting special member functions/Move constructor" duration="{duration}"/>
<testCase name="Upcasting special member functions/move assignment" duration="{duration}"/>
<testCase name="make_unique reimplementation" duration="{duration}"/>
<testCase name="make_unique reimplementation/From lvalue copies" duration="{duration}"/>
<testCase name="make_unique reimplementation/From rvalue moves" duration="{duration}"/>
<testCase name="make_unique reimplementation/Variadic constructor" duration="{duration}"/>
<testCase name="unique_ptr reimplementation: basic functionality" duration="{duration}"/>
<testCase name="unique_ptr reimplementation: basic functionality/Default constructed unique_ptr is empty" duration="{duration}"/>
<testCase name="unique_ptr reimplementation: basic functionality/Take ownership of allocation" duration="{duration}"/>
<testCase name="unique_ptr reimplementation: basic functionality/Take ownership of allocation/Plain reset deallocates" duration="{duration}"/>
@@ -318,6 +371,7 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="unique_ptr reimplementation: basic functionality/free swap" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/IntrospectiveTests/Xml.tests.cpp">
<testCase name="XmlEncode" duration="{duration}"/>
<testCase name="XmlEncode/normal string" duration="{duration}"/>
<testCase name="XmlEncode/empty string" duration="{duration}"/>
<testCase name="XmlEncode/string with ampersand" duration="{duration}"/>
@@ -347,14 +401,27 @@ at AssertionHandler.tests.cpp:<line number>
<testCase name="Use a custom approx" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/UsageTests/BDD.tests.cpp">
<testCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods" duration="{duration}"/>
<testCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me" duration="{duration}"/>
<testCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me/When: We get the count" duration="{duration}"/>
<testCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me/When: We get the count/Then: Subsequently values are higher" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists/And given: And some assumption" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists/And given: And some assumption/When: I do this" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists/And given: And some assumption/When: I do this/Then: it should do this" duration="{duration}"/>
<testCase name="Scenario: Do that thing with the thing/Given: This stuff exists/And given: And some assumption/When: I do this/Then: it should do this/And: do that" duration="{duration}"/>
<testCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping" duration="{duration}"/>
<testCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping/Given: A section name that is so long that it cannot fit in a single console width" duration="{duration}"/>
<testCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping/Given: A section name that is so long that it cannot fit in a single console width/When: The test headers are printed as part of the normal running of the scenario" duration="{duration}"/>
<testCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping/Given: A section name that is so long that it cannot fit in a single console width/When: The test headers are printed as part of the normal running of the scenario/Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: it is made larger" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: it is made larger/Then: the size and capacity go up" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: it is made larger/Then: the size and capacity go up/And when: it is made smaller again" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: it is made larger/Then: the size and capacity go up/And when: it is made smaller again/Then: the size goes down but the capacity stays the same" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: we reserve more space" duration="{duration}"/>
<testCase name="Scenario: Vector resizing affects size and capacity/Given: an empty vector/When: we reserve more space/Then: The capacity is increased but the size remains the same" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/UsageTests/Class.tests.cpp">
@@ -528,6 +595,7 @@ with expansion:
at Class.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="A TEST_CASE_PERSISTENT_FIXTURE based test run that succeeds" duration="{duration}"/>
<testCase name="A TEST_CASE_PERSISTENT_FIXTURE based test run that succeeds/First partial run" duration="{duration}"/>
<testCase name="A TEST_CASE_PERSISTENT_FIXTURE based test run that succeeds/Second partial run" duration="{duration}"/>
<testCase name="Template test case method with test types specified inside std::tuple - MyTypes - 0" duration="{duration}"/>
@@ -539,6 +607,7 @@ at Class.tests.cpp:<line number>
<testCase name="#1147" duration="{duration}"/>
<testCase name="#1238" duration="{duration}"/>
<testCase name="#1245" duration="{duration}"/>
<testCase name="#1319: Sections can have description (even if it is not saved" duration="{duration}"/>
<testCase name="#1319: Sections can have description (even if it is not saved/SectionName" duration="{duration}"/>
<testCase name="#1403" duration="{duration}"/>
<testCase name="#1548" duration="{duration}"/>
@@ -748,24 +817,28 @@ at Condition.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="Inequality checks that should succeed" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/1" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/1/A" duration="{duration}">
<skipped message="FAIL()">
FAILED:
at Condition.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="Mayfail test case with nested sections/2" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/2/A" duration="{duration}">
<skipped message="FAIL()">
FAILED:
at Condition.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="Mayfail test case with nested sections/1" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/1/B" duration="{duration}">
<skipped message="FAIL()">
FAILED:
at Condition.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="Mayfail test case with nested sections/2" duration="{duration}"/>
<testCase name="Mayfail test case with nested sections/2/B" duration="{duration}">
<skipped message="FAIL()">
FAILED:
@@ -932,6 +1005,7 @@ at Decomposition.tests.cpp:<line number>
<testCase name="toString(enum)" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/UsageTests/Exception.tests.cpp">
<testCase name="#748 - captures with unexpected exceptions" duration="{duration}"/>
<testCase name="#748 - captures with unexpected exceptions/outside assertions" duration="{duration}">
<skipped message="TEST_CASE()">
FAILED:
@@ -981,6 +1055,7 @@ custom std exception
at Exception.tests.cpp:<line number>
</error>
</testCase>
<testCase name="Exception messages can be tested for" duration="{duration}"/>
<testCase name="Exception messages can be tested for/exact match" duration="{duration}"/>
<testCase name="Exception messages can be tested for/different case" duration="{duration}"/>
<testCase name="Exception messages can be tested for/wildcarded" duration="{duration}"/>
@@ -1072,6 +1147,7 @@ unexpected exception
at Exception.tests.cpp:<line number>
</error>
</testCase>
<testCase name="When unchecked exceptions are thrown, but caught, they do not affect the test" duration="{duration}"/>
<testCase name="thrown std::strings are translated" duration="{duration}">
<error message="TEST_CASE()">
FAILED:
@@ -1091,21 +1167,27 @@ at Generators.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="3x3x3 ints" duration="{duration}"/>
<testCase name="Copy and then generate a range" duration="{duration}"/>
<testCase name="Copy and then generate a range/from var and iterators" duration="{duration}"/>
<testCase name="Copy and then generate a range/From a temporary container" duration="{duration}"/>
<testCase name="Copy and then generate a range/Final validation" duration="{duration}"/>
<testCase name="GENERATE can combine literals and generators" duration="{duration}"/>
<testCase name="Generators -- adapters" duration="{duration}"/>
<testCase name="Generators -- adapters/Filtering by predicate" duration="{duration}"/>
<testCase name="Generators -- adapters/Filtering by predicate/Basic usage" duration="{duration}"/>
<testCase name="Generators -- adapters/Filtering by predicate/Throws if there are no matching values" duration="{duration}"/>
<testCase name="Generators -- adapters/Shortening a range" duration="{duration}"/>
<testCase name="Generators -- adapters/Transforming elements" duration="{duration}"/>
<testCase name="Generators -- adapters/Transforming elements/Same type" duration="{duration}"/>
<testCase name="Generators -- adapters/Transforming elements/Different type" duration="{duration}"/>
<testCase name="Generators -- adapters/Transforming elements/Different deduced type" duration="{duration}"/>
<testCase name="Generators -- adapters/Repeating a generator" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces/Number of elements in source is divisible by chunk size" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces/Number of elements in source is not divisible by chunk size" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces/Chunk size of zero" duration="{duration}"/>
<testCase name="Generators -- adapters/Chunking a generator into sized pieces/Throws on too small generators" duration="{duration}"/>
<testCase name="Generators -- simple" duration="{duration}"/>
<testCase name="Generators -- simple/one" duration="{duration}"/>
<testCase name="Generators -- simple/two" duration="{duration}"/>
<testCase name="Nested generators and captured variables" duration="{duration}"/>
@@ -1115,6 +1197,7 @@ at Generators.tests.cpp:<line number>
<file path="tests/<exe-name>/UsageTests/Matchers.tests.cpp">
<testCase name="#2152 - ULP checks between differently signed values were wrong - double" duration="{duration}"/>
<testCase name="#2152 - ULP checks between differently signed values were wrong - float" duration="{duration}"/>
<testCase name="Arbitrary predicate matcher" duration="{duration}"/>
<testCase name="Arbitrary predicate matcher/Function pointer" duration="{duration}"/>
<testCase name="Arbitrary predicate matcher/Lambdas + different type" duration="{duration}"/>
<testCase name="Combining MatchAllOfGeneric does not nest" duration="{duration}"/>
@@ -1124,8 +1207,10 @@ at Generators.tests.cpp:<line number>
<testCase name="Combining only templated matchers" duration="{duration}"/>
<testCase name="Combining templated and concrete matchers" duration="{duration}"/>
<testCase name="Combining templated matchers" duration="{duration}"/>
<testCase name="Composed generic matchers shortcircuit" duration="{duration}"/>
<testCase name="Composed generic matchers shortcircuit/MatchAllOf" duration="{duration}"/>
<testCase name="Composed generic matchers shortcircuit/MatchAnyOf" duration="{duration}"/>
<testCase name="Composed matchers shortcircuit" duration="{duration}"/>
<testCase name="Composed matchers shortcircuit/MatchAllOf" duration="{duration}"/>
<testCase name="Composed matchers shortcircuit/MatchAnyOf" duration="{duration}"/>
<testCase name="Contains string matcher" duration="{duration}">
@@ -1222,6 +1307,7 @@ at Matchers.tests.cpp:<line number>
<testCase name="Exception matchers that succeed" duration="{duration}"/>
<testCase name="Exception message can be matched" duration="{duration}"/>
<testCase name="Exceptions matchers" duration="{duration}"/>
<testCase name="Floating point matchers: double" duration="{duration}"/>
<testCase name="Floating point matchers: double/Relative" duration="{duration}"/>
<testCase name="Floating point matchers: double/Relative/Some subnormal values" duration="{duration}"/>
<testCase name="Floating point matchers: double/Margin" duration="{duration}"/>
@@ -1229,6 +1315,7 @@ at Matchers.tests.cpp:<line number>
<testCase name="Floating point matchers: double/Composed" duration="{duration}"/>
<testCase name="Floating point matchers: double/Constructor validation" duration="{duration}"/>
<testCase name="Floating point matchers: double/IsNaN" duration="{duration}"/>
<testCase name="Floating point matchers: float" duration="{duration}"/>
<testCase name="Floating point matchers: float/Relative" duration="{duration}"/>
<testCase name="Floating point matchers: float/Relative/Some subnormal values" duration="{duration}"/>
<testCase name="Floating point matchers: float/Margin" duration="{duration}"/>
@@ -1301,10 +1388,13 @@ at Matchers.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="String matchers" duration="{duration}"/>
<testCase name="Vector Approx matcher" duration="{duration}"/>
<testCase name="Vector Approx matcher/Empty vector is roughly equal to an empty vector" duration="{duration}"/>
<testCase name="Vector Approx matcher/Vectors with elements" duration="{duration}"/>
<testCase name="Vector Approx matcher/Vectors with elements/A vector is approx equal to itself" duration="{duration}"/>
<testCase name="Vector Approx matcher/Vectors with elements/Different length" duration="{duration}"/>
<testCase name="Vector Approx matcher/Vectors with elements/Same length, different elements" duration="{duration}"/>
<testCase name="Vector Approx matcher -- failing" duration="{duration}"/>
<testCase name="Vector Approx matcher -- failing/Empty and non empty vectors are not approx equal" duration="{duration}">
<failure message="CHECK_THAT(empty, Approx( t1 ))">
FAILED:
@@ -1323,11 +1413,13 @@ with expansion:
at Matchers.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="Vector matchers" duration="{duration}"/>
<testCase name="Vector matchers/Contains (element)" duration="{duration}"/>
<testCase name="Vector matchers/Contains (vector)" duration="{duration}"/>
<testCase name="Vector matchers/Contains (element), composed" duration="{duration}"/>
<testCase name="Vector matchers/Equals" duration="{duration}"/>
<testCase name="Vector matchers/UnorderedEquals" duration="{duration}"/>
<testCase name="Vector matchers that fail" duration="{duration}"/>
<testCase name="Vector matchers that fail/Contains (element)" duration="{duration}">
<failure message="CHECK_THAT(v, VectorContains( -1 ))">
FAILED:
@@ -1422,82 +1514,114 @@ at Matchers.tests.cpp:<line number>
</testCase>
</file>
<file path="tests/<exe-name>/UsageTests/MatchersRanges.tests.cpp">
<testCase name="Basic use of the Contains range matcher" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Different argument ranges, same element type, default comparison" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Different argument ranges, same element type, custom comparison" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Different element type, custom comparisons" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Can handle type that requires ADL-found free function begin and end" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Initialization with move only types" duration="{duration}"/>
<testCase name="Basic use of the Contains range matcher/Matching using matcher" duration="{duration}"/>
<testCase name="Basic use of the Empty range matcher" duration="{duration}"/>
<testCase name="Basic use of the Empty range matcher/Simple, std-provided containers" duration="{duration}"/>
<testCase name="Basic use of the Empty range matcher/Type with empty" duration="{duration}"/>
<testCase name="Basic use of the Empty range matcher/Type requires ADL found empty free function" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions/Two equal containers of different container types" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions/Two equal containers of different container types (differ in array N)" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions/Two equal containers of different container types and value types" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Container conversions/Two equal containers, one random access, one not" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Value type" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Value type/Two equal containers of different value types" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Value type/Two non-equal containers of different value types" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Ranges with begin that needs ADL" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Custom predicate" duration="{duration}"/>
<testCase name="Type conversions of RangeEquals and similar/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Type requires ADL found begin and end" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of AllMatch range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage/All true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage/Empty evaluates to true" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage/One false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Basic usage/All false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Contained type is convertible to bool" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Contained type is convertible to bool/All true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Contained type is convertible to bool/One false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Contained type is convertible to bool/All false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of AllTrue range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Type requires ADL found begin and end" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of AnyMatch range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage/All true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage/Empty evaluates to false" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage/One true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Basic usage/All false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Contained type is convertible to bool" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Contained type is convertible to bool/All true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Contained type is convertible to bool/One true evaluates to true" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Contained type is convertible to bool/All false evaluates to false" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of AnyTrue range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Type requires ADL found begin and end" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of NoneMatch range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage/All true evaluates to false" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage/Empty evaluates to true" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage/One true evaluates to false" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Basic usage/All false evaluates to true" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Contained type is convertible to bool" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Contained type is convertible to bool/All true evaluates to false" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Contained type is convertible to bool/One true evaluates to false" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Contained type is convertible to bool/All false evaluates to true" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Shortcircuiting" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Shortcircuiting/All are read" duration="{duration}"/>
<testCase name="Usage of NoneTrue range matcher/Shortcircuiting/Short-circuited" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Empty container matches empty container" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Empty container does not match non-empty container" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Two equal 1-length non-empty containers" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Two equal-sized, equal, non-empty containers" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Two equal-sized, non-equal, non-empty containers" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Basic usage/Two non-equal-sized, non-empty containers (with same first elements)" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Custom predicate" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Ranges that need ADL begin/end" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/Check short-circuits on failure" duration="{duration}"/>
<testCase name="Usage of RangeEquals range matcher/Check short-circuiting behaviour/All elements are checked on success" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Empty container matches empty container" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Empty container does not match non-empty container" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Two equal 1-length non-empty containers" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Two equal-sized, equal, non-empty containers" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Two equal-sized, non-equal, non-empty containers" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Basic usage/Two non-equal-sized, non-empty containers" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Custom predicate/Two non-equal non-empty containers (close enough)" duration="{duration}"/>
<testCase name="Usage of UnorderedRangeEquals range matcher/Ranges that need ADL begin/end" duration="{duration}"/>
<testCase name="Usage of the SizeIs range matcher" duration="{duration}"/>
<testCase name="Usage of the SizeIs range matcher/Some with stdlib containers" duration="{duration}"/>
<testCase name="Usage of the SizeIs range matcher/Type requires ADL found size free function" duration="{duration}"/>
<testCase name="Usage of the SizeIs range matcher/Type has size member" duration="{duration}"/>
@@ -1596,6 +1720,8 @@ at Message.tests.cpp:<line number>
</testCase>
<testCase name="SUCCEED counts as a test pass" duration="{duration}"/>
<testCase name="SUCCEED does not require an argument" duration="{duration}"/>
<testCase name="Standard output from all sections is reported" duration="{duration}"/>
<testCase name="Standard output from all sections is reported/one" duration="{duration}"/>
<testCase name="Standard output from all sections is reported/two" duration="{duration}"/>
<testCase name="The NO_FAIL macro reports a failure but does not fail the test" duration="{duration}"/>
<testCase name="just failure" duration="{duration}">
@@ -1612,6 +1738,8 @@ previous unscoped info SHOULD not be seen
at Message.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="just info" duration="{duration}"/>
<testCase name="just unscoped info" duration="{duration}"/>
<testCase name="mix info, unscoped info and warning" duration="{duration}"/>
<testCase name="not prints unscoped info from previous failures" duration="{duration}">
<failure message="REQUIRE(false)">
@@ -1684,6 +1812,7 @@ with expansion:
at Misc.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="#961 -- Dynamically created sections should all be reported" duration="{duration}"/>
<testCase name="#961 -- Dynamically created sections should all be reported/Looped section 0" duration="{duration}"/>
<testCase name="#961 -- Dynamically created sections should all be reported/Looped section 1" duration="{duration}"/>
<testCase name="#961 -- Dynamically created sections should all be reported/Looped section 2" duration="{duration}"/>
@@ -1704,7 +1833,9 @@ to infinity and beyond
at Misc.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="A couple of nested sections followed by a failure/Outer" duration="{duration}"/>
<testCase name="A couple of nested sections followed by a failure/Outer/Inner" duration="{duration}"/>
<testCase name="An empty test with no assertions" duration="{duration}"/>
<testCase name="Factorials are computed" duration="{duration}"/>
<testCase name="ManuallyRegistered" duration="{duration}"/>
<testCase name="Nice descriptive name" duration="{duration}"/>
@@ -1833,10 +1964,14 @@ with expansion:
at Misc.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="even more nested SECTION tests" duration="{duration}"/>
<testCase name="even more nested SECTION tests/c" duration="{duration}"/>
<testCase name="even more nested SECTION tests/c/d (leaf)" duration="{duration}"/>
<testCase name="even more nested SECTION tests/c/e (leaf)" duration="{duration}"/>
<testCase name="even more nested SECTION tests/f (leaf)" duration="{duration}"/>
<testCase name="first tag" duration="{duration}"/>
<testCase name="long long" duration="{duration}"/>
<testCase name="looped SECTION tests" duration="{duration}"/>
<testCase name="looped SECTION tests/b is currently: 0" duration="{duration}">
<failure message="CHECK(b > a)">
FAILED:
@@ -1913,6 +2048,8 @@ Testing if fib[7] (21) is even
at Misc.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="more nested SECTION tests" duration="{duration}"/>
<testCase name="more nested SECTION tests/equal" duration="{duration}"/>
<testCase name="more nested SECTION tests/equal/doesn't equal" duration="{duration}">
<failure message="REQUIRE(a == b)">
FAILED:
@@ -1922,14 +2059,18 @@ with expansion:
at Misc.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="more nested SECTION tests/doesn't equal" duration="{duration}"/>
<testCase name="more nested SECTION tests/doesn't equal/not equal" duration="{duration}"/>
<testCase name="more nested SECTION tests/doesn't equal/less than" duration="{duration}"/>
<testCase name="nested SECTION tests" duration="{duration}"/>
<testCase name="nested SECTION tests/doesn't equal" duration="{duration}"/>
<testCase name="nested SECTION tests/doesn't equal/not equal" duration="{duration}"/>
<testCase name="not allowed" duration="{duration}"/>
<testCase name="null strings" duration="{duration}"/>
<testCase name="random SECTION tests" duration="{duration}"/>
<testCase name="random SECTION tests/doesn't equal" duration="{duration}"/>
<testCase name="random SECTION tests/not equal" duration="{duration}"/>
<testCase name="second tag" duration="{duration}"/>
<testCase name="send a single char to INFO" duration="{duration}">
<failure message="REQUIRE(false)">
FAILED:
@@ -1948,6 +2089,7 @@ at Misc.tests.cpp:<line number>
<testCase name="vectors can be sized and resized/resizing smaller changes size but not capacity/We can use the 'swap trick' to reset the capacity" duration="{duration}"/>
<testCase name="vectors can be sized and resized/reserving bigger changes capacity but not size" duration="{duration}"/>
<testCase name="vectors can be sized and resized/reserving smaller does not change size or capacity" duration="{duration}"/>
<testCase name="xmlentitycheck" duration="{duration}"/>
<testCase name="xmlentitycheck/embedded xml: &lt;test>it should be possible to embed xml characters, such as &lt;, &quot; or &amp;, or even whole &lt;xml>documents&lt;/xml> within an attribute&lt;/test>" duration="{duration}"/>
<testCase name="xmlentitycheck/encoded chars: these should all be encoded: &amp;&amp;&amp;&quot;&quot;&quot;&lt;&lt;&lt;&amp;&quot;&lt;&lt;&amp;&quot;" duration="{duration}"/>
</file>
@@ -2018,6 +2160,9 @@ FAILED:
at Skip.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="nested sections can be skipped dynamically at runtime/A" duration="{duration}"/>
<testCase name="nested sections can be skipped dynamically at runtime/B2" duration="{duration}"/>
<testCase name="nested sections can be skipped dynamically at runtime/B2/B1" duration="{duration}"/>
<testCase name="nested sections can be skipped dynamically at runtime/B2/B" duration="{duration}">
<skipped message="SKIP()">
SKIPPED
@@ -2025,6 +2170,7 @@ at Skip.tests.cpp:<line number>
</skipped>
</testCase>
<testCase name="nested sections can be skipped dynamically at runtime/B" duration="{duration}"/>
<testCase name="sections can be skipped dynamically at runtime" duration="{duration}"/>
<testCase name="sections can be skipped dynamically at runtime/not skipped" duration="{duration}"/>
<testCase name="sections can be skipped dynamically at runtime/skipped" duration="{duration}">
<skipped message="SKIP()">
@@ -2053,20 +2199,26 @@ at Skip.tests.cpp:<line number>
<testCase name="Stringifying std::chrono::time_point&lt;system_clock>" duration="{duration}"/>
</file>
<file path="tests/<exe-name>/UsageTests/ToStringGeneral.tests.cpp">
<testCase name="Capture and info messages" duration="{duration}"/>
<testCase name="Capture and info messages/Capture should stringify like assertions" duration="{duration}"/>
<testCase name="Capture and info messages/Info should NOT stringify the way assertions do" duration="{duration}"/>
<testCase name="Character pretty printing" duration="{duration}"/>
<testCase name="Character pretty printing/Specifically escaped" duration="{duration}"/>
<testCase name="Character pretty printing/General chars" duration="{duration}"/>
<testCase name="Character pretty printing/Low ASCII" duration="{duration}"/>
<testCase name="Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified" duration="{duration}"/>
<testCase name="Precision of floating point stringification can be set" duration="{duration}"/>
<testCase name="Precision of floating point stringification can be set/Floats" duration="{duration}"/>
<testCase name="Precision of floating point stringification can be set/Double" duration="{duration}"/>
<testCase name="Static arrays are convertible to string" duration="{duration}"/>
<testCase name="Static arrays are convertible to string/Single item" duration="{duration}"/>
<testCase name="Static arrays are convertible to string/Multiple" duration="{duration}"/>
<testCase name="Static arrays are convertible to string/Non-trivial inner items" duration="{duration}"/>
<testCase name="std::map is convertible string" duration="{duration}"/>
<testCase name="std::map is convertible string/empty" duration="{duration}"/>
<testCase name="std::map is convertible string/single item" duration="{duration}"/>
<testCase name="std::map is convertible string/several items" duration="{duration}"/>
<testCase name="std::set is convertible string" duration="{duration}"/>
<testCase name="std::set is convertible string/empty" duration="{duration}"/>
<testCase name="std::set is convertible string/single item" duration="{duration}"/>
<testCase name="std::set is convertible string/several items" duration="{duration}"/>
@@ -2111,6 +2263,7 @@ FAILED:
at Tricky.tests.cpp:<line number>
</failure>
</testCase>
<testCase name="(unimplemented) static bools can be evaluated" duration="{duration}"/>
<testCase name="(unimplemented) static bools can be evaluated/compare to true" duration="{duration}"/>
<testCase name="(unimplemented) static bools can be evaluated/compare to false" duration="{duration}"/>
<testCase name="(unimplemented) static bools can be evaluated/negation" duration="{duration}"/>
@@ -2146,6 +2299,7 @@ at Tricky.tests.cpp:<line number>
<testCase name="X/level/1/a" duration="{duration}"/>
<testCase name="X/level/1/b" duration="{duration}"/>
<testCase name="boolean member" duration="{duration}"/>
<testCase name="has printf" duration="{duration}"/>
<testCase name="non streamable - with conv. op" duration="{duration}"/>
<testCase name="non-copyable objects" duration="{duration}"/>
<testCase name="null_ptr" duration="{duration}"/>
@@ -2154,6 +2308,7 @@ at Tricky.tests.cpp:<line number>
<file path="tests/<exe-name>/UsageTests/VariadicMacros.tests.cpp">
<testCase name="Anonymous test case 1" duration="{duration}"/>
<testCase name="Test case with one argument" duration="{duration}"/>
<testCase name="Variadic macros" duration="{duration}"/>
<testCase name="Variadic macros/Section with one argument" duration="{duration}"/>
</file>
</testExecutions>

View File

@@ -724,6 +724,18 @@ ok {test-number} - ::Catch::Detail::stringify( '\0' ) == "0" for: "0" == "0"
ok {test-number} - ::Catch::Detail::stringify( static_cast<char>(2) ) == "2" for: "2" == "2"
# Character pretty printing
ok {test-number} - ::Catch::Detail::stringify( static_cast<char>(5) ) == "5" for: "5" == "5"
# Clara::Arg does not crash on incomplete input
ok {test-number} - name.empty() for: true
# Clara::Arg does not crash on incomplete input
ok {test-number} - result for: {?}
# Clara::Arg does not crash on incomplete input
ok {test-number} - result.type() == Catch::Clara::Detail::ResultType::Ok for: 0 == 0
# Clara::Arg does not crash on incomplete input
ok {test-number} - parsed.type() == Catch::Clara::ParseResultType::NoMatch for: 1 == 1
# Clara::Arg does not crash on incomplete input
ok {test-number} - parsed.remainingTokens().count() == 2 for: 2 == 2
# Clara::Arg does not crash on incomplete input
ok {test-number} - name.empty() for: true
# Clara::Arg supports single-arg parse the way Opt does
ok {test-number} - name.empty() for: true
# Clara::Arg supports single-arg parse the way Opt does
@@ -4547,5 +4559,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
ok {test-number} -
# xmlentitycheck
ok {test-number} -
1..2271
1..2277

View File

@@ -722,6 +722,18 @@ ok {test-number} - ::Catch::Detail::stringify( '\0' ) == "0" for: "0" == "0"
ok {test-number} - ::Catch::Detail::stringify( static_cast<char>(2) ) == "2" for: "2" == "2"
# Character pretty printing
ok {test-number} - ::Catch::Detail::stringify( static_cast<char>(5) ) == "5" for: "5" == "5"
# Clara::Arg does not crash on incomplete input
ok {test-number} - name.empty() for: true
# Clara::Arg does not crash on incomplete input
ok {test-number} - result for: {?}
# Clara::Arg does not crash on incomplete input
ok {test-number} - result.type() == Catch::Clara::Detail::ResultType::Ok for: 0 == 0
# Clara::Arg does not crash on incomplete input
ok {test-number} - parsed.type() == Catch::Clara::ParseResultType::NoMatch for: 1 == 1
# Clara::Arg does not crash on incomplete input
ok {test-number} - parsed.remainingTokens().count() == 2 for: 2 == 2
# Clara::Arg does not crash on incomplete input
ok {test-number} - name.empty() for: true
# Clara::Arg supports single-arg parse the way Opt does
ok {test-number} - name.empty() for: true
# Clara::Arg supports single-arg parse the way Opt does
@@ -4536,5 +4548,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
ok {test-number} -
# xmlentitycheck
ok {test-number} -
1..2271
1..2277

View File

@@ -245,6 +245,8 @@
##teamcity[testFinished name='CaseInsensitiveLess is case insensitive' duration="{duration}"]
##teamcity[testStarted name='Character pretty printing']
##teamcity[testFinished name='Character pretty printing' duration="{duration}"]
##teamcity[testStarted name='Clara::Arg does not crash on incomplete input']
##teamcity[testFinished name='Clara::Arg does not crash on incomplete input' duration="{duration}"]
##teamcity[testStarted name='Clara::Arg supports single-arg parse the way Opt does']
##teamcity[testFinished name='Clara::Arg supports single-arg parse the way Opt does' duration="{duration}"]
##teamcity[testStarted name='Clara::Opt supports accept-many lambdas']

View File

@@ -245,6 +245,8 @@
##teamcity[testFinished name='CaseInsensitiveLess is case insensitive' duration="{duration}"]
##teamcity[testStarted name='Character pretty printing']
##teamcity[testFinished name='Character pretty printing' duration="{duration}"]
##teamcity[testStarted name='Clara::Arg does not crash on incomplete input']
##teamcity[testFinished name='Clara::Arg does not crash on incomplete input' duration="{duration}"]
##teamcity[testStarted name='Clara::Arg supports single-arg parse the way Opt does']
##teamcity[testFinished name='Clara::Arg supports single-arg parse the way Opt does' duration="{duration}"]
##teamcity[testStarted name='Clara::Opt supports accept-many lambdas']

View File

@@ -3304,6 +3304,57 @@ Approx( 1.23399996757507324 )
</Section>
<OverallResult success="true" skips="0"/>
</TestCase>
<TestCase name="Clara::Arg does not crash on incomplete input" tags="[arg][clara][compilation]" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
name.empty()
</Original>
<Expanded>
true
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
result
</Original>
<Expanded>
{?}
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
result.type() == Catch::Clara::Detail::ResultType::Ok
</Original>
<Expanded>
0 == 0
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
parsed.type() == Catch::Clara::ParseResultType::NoMatch
</Original>
<Expanded>
1 == 1
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
parsed.remainingTokens().count() == 2
</Original>
<Expanded>
2 == 2
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
name.empty()
</Original>
<Expanded>
true
</Expanded>
</Expression>
<OverallResult success="true" skips="0"/>
</TestCase>
<TestCase name="Clara::Arg supports single-arg parse the way Opt does" tags="[arg][clara][compilation]" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
@@ -21882,6 +21933,6 @@ Approx( -1.95996398454005449 )
</Section>
<OverallResult success="true" skips="0"/>
</TestCase>
<OverallResults successes="2077" failures="147" expectedFailures="35" skips="12"/>
<OverallResultsCases successes="312" failures="86" expectedFailures="14" skips="6"/>
<OverallResults successes="2083" failures="147" expectedFailures="35" skips="12"/>
<OverallResultsCases successes="313" failures="86" expectedFailures="14" skips="6"/>
</Catch2TestRun>

View File

@@ -3304,6 +3304,57 @@ Approx( 1.23399996757507324 )
</Section>
<OverallResult success="true" skips="0"/>
</TestCase>
<TestCase name="Clara::Arg does not crash on incomplete input" tags="[arg][clara][compilation]" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
name.empty()
</Original>
<Expanded>
true
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
result
</Original>
<Expanded>
{?}
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
result.type() == Catch::Clara::Detail::ResultType::Ok
</Original>
<Expanded>
0 == 0
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
parsed.type() == Catch::Clara::ParseResultType::NoMatch
</Original>
<Expanded>
1 == 1
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
parsed.remainingTokens().count() == 2
</Original>
<Expanded>
2 == 2
</Expanded>
</Expression>
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
name.empty()
</Original>
<Expanded>
true
</Expanded>
</Expression>
<OverallResult success="true" skips="0"/>
</TestCase>
<TestCase name="Clara::Arg supports single-arg parse the way Opt does" tags="[arg][clara][compilation]" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/Clara.tests.cpp" >
<Original>
@@ -21881,6 +21932,6 @@ Approx( -1.95996398454005449 )
</Section>
<OverallResult success="true" skips="0"/>
</TestCase>
<OverallResults successes="2077" failures="147" expectedFailures="35" skips="12"/>
<OverallResultsCases successes="312" failures="86" expectedFailures="14" skips="6"/>
<OverallResults successes="2083" failures="147" expectedFailures="35" skips="12"/>
<OverallResultsCases successes="313" failures="86" expectedFailures="14" skips="6"/>
</Catch2TestRun>

View File

@@ -51,6 +51,21 @@ TEST_CASE("Clara::Arg supports single-arg parse the way Opt does", "[clara][arg]
REQUIRE(name == "foo");
}
TEST_CASE("Clara::Arg does not crash on incomplete input", "[clara][arg][compilation]") {
std::string name;
auto p = Catch::Clara::Arg(name, "-");
CHECK(name.empty());
auto result = p.parse( Catch::Clara::Args{ "UnitTest", "-" } );
CHECK( result );
CHECK( result.type() == Catch::Clara::Detail::ResultType::Ok );
const auto& parsed = result.value();
CHECK( parsed.type() == Catch::Clara::ParseResultType::NoMatch );
CHECK( parsed.remainingTokens().count() == 2 );
CHECK( name.empty() );
}
TEST_CASE("Clara::Opt supports accept-many lambdas", "[clara][opt]") {
using namespace Catch::Clara;
std::vector<std::string> res;

View File

@@ -308,10 +308,15 @@ TEST_CASE( "X/level/0/b", "[Tricky][fizz]" ){ SUCCEED(""); }
TEST_CASE( "X/level/1/a", "[Tricky]" ) { SUCCEED(""); }
TEST_CASE( "X/level/1/b", "[Tricky]" ) { SUCCEED(""); }
#include <chrono>
#include <thread>
TEST_CASE( "has printf" ) {
// This can cause problems as, currently, stdout itself is not redirected - only the cout (and cerr) buffer
printf( "loose text artifact\n" );
fflush( stdout );
std::this_thread::sleep_for( std::chrono::seconds( 1 ) );
}
namespace {

View File

@@ -12,6 +12,5 @@ rem 3. Run the actual build
cmake --build debug-build
rem 4. Run the tests using CTest
cd debug-build
ctest -j 4 --output-on-failure -C Debug
ctest -j 4 --output-on-failure -C Debug --test-dir debug-build
rem end-snippet

View File

@@ -14,6 +14,5 @@ cmake -B debug-build -S . -DCMAKE_BUILD_TYPE=Debug --preset all-tests
cmake --build debug-build
# 4. Run the tests using CTest
cd debug-build
ctest -j 4 --output-on-failure -C Debug
ctest -j 4 --output-on-failure -C Debug --test-dir debug-build
# end-snippet