mirror of
https://github.com/zeek/zeek.git
synced 2025-10-01 22:28:20 +00:00
src/3rdparty: Update doctest to v2.4.12
This commit is contained in:
parent
21fc299131
commit
08b018cc61
1 changed files with 150 additions and 35 deletions
185
src/3rdparty/doctest.h
vendored
185
src/3rdparty/doctest.h
vendored
|
@ -4,7 +4,7 @@
|
|||
//
|
||||
// doctest.h - the lightest feature-rich C++ single-header testing framework for unit tests and TDD
|
||||
//
|
||||
// Copyright (c) 2016-2021 Viktor Kirilov
|
||||
// Copyright (c) 2016-2023 Viktor Kirilov
|
||||
//
|
||||
// Distributed under the MIT Software License
|
||||
// See accompanying file LICENSE.txt or copy at
|
||||
|
@ -48,7 +48,7 @@
|
|||
|
||||
#define DOCTEST_VERSION_MAJOR 2
|
||||
#define DOCTEST_VERSION_MINOR 4
|
||||
#define DOCTEST_VERSION_PATCH 9
|
||||
#define DOCTEST_VERSION_PATCH 12
|
||||
|
||||
// util we need here
|
||||
#define DOCTEST_TOSTR_IMPL(x) #x
|
||||
|
@ -85,12 +85,15 @@
|
|||
DOCTEST_COMPILER(_MSC_VER / 100, (_MSC_FULL_VER / 100000) % 100, _MSC_FULL_VER % 100000)
|
||||
#endif // MSVC
|
||||
#endif // MSVC
|
||||
#if defined(__clang__) && defined(__clang_minor__)
|
||||
#if defined(__clang__) && defined(__clang_minor__) && defined(__clang_patchlevel__)
|
||||
#define DOCTEST_CLANG DOCTEST_COMPILER(__clang_major__, __clang_minor__, __clang_patchlevel__)
|
||||
#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) && \
|
||||
!defined(__INTEL_COMPILER)
|
||||
#define DOCTEST_GCC DOCTEST_COMPILER(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
|
||||
#endif // GCC
|
||||
#if defined(__INTEL_COMPILER)
|
||||
#define DOCTEST_ICC DOCTEST_COMPILER(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
|
||||
#endif // ICC
|
||||
|
||||
#ifndef DOCTEST_MSVC
|
||||
#define DOCTEST_MSVC 0
|
||||
|
@ -101,12 +104,15 @@
|
|||
#ifndef DOCTEST_GCC
|
||||
#define DOCTEST_GCC 0
|
||||
#endif // DOCTEST_GCC
|
||||
#ifndef DOCTEST_ICC
|
||||
#define DOCTEST_ICC 0
|
||||
#endif // DOCTEST_ICC
|
||||
|
||||
// =================================================================================================
|
||||
// == COMPILER WARNINGS HELPERS ====================================================================
|
||||
// =================================================================================================
|
||||
|
||||
#if DOCTEST_CLANG
|
||||
#if DOCTEST_CLANG && !DOCTEST_ICC
|
||||
#define DOCTEST_PRAGMA_TO_STR(x) _Pragma(#x)
|
||||
#define DOCTEST_CLANG_SUPPRESS_WARNING_PUSH _Pragma("clang diagnostic push")
|
||||
#define DOCTEST_CLANG_SUPPRESS_WARNING(w) DOCTEST_PRAGMA_TO_STR(clang diagnostic ignored w)
|
||||
|
@ -152,7 +158,7 @@
|
|||
// =================================================================================================
|
||||
|
||||
// both the header and the implementation suppress all of these,
|
||||
// so it only makes sense to aggregrate them like so
|
||||
// so it only makes sense to aggregate them like so
|
||||
#define DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH \
|
||||
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH \
|
||||
DOCTEST_CLANG_SUPPRESS_WARNING("-Wunknown-pragmas") \
|
||||
|
@ -178,7 +184,7 @@
|
|||
DOCTEST_MSVC_SUPPRESS_WARNING(4571) /* SEH related */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(4710) /* function not inlined */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(4711) /* function selected for inline expansion*/ \
|
||||
/* */ \
|
||||
/* common ones */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(4616) /* invalid compiler warning */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(4619) /* invalid compiler warning */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(4996) /* The compiler encountered a deprecated declaration */ \
|
||||
|
@ -192,6 +198,7 @@
|
|||
DOCTEST_MSVC_SUPPRESS_WARNING(5026) /* move constructor was implicitly deleted */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(4640) /* construction of local static object not thread-safe */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(5264) /* 'variable-name': 'const' variable is not used */ \
|
||||
/* static analysis */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(26439) /* Function may not throw. Declare it 'noexcept' */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(26495) /* Always initialize a member variable */ \
|
||||
|
@ -236,7 +243,8 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
|
|||
DOCTEST_MSVC_SUPPRESS_WARNING(5039) /* pointer to pot. throwing function passed to extern C */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(5105) /* macro producing 'defined' has undefined behavior */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(4738) /* storing float result in memory, loss of performance */
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(4738) /* storing float result in memory, loss of performance */ \
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING(5262) /* implicit fall-through */
|
||||
|
||||
#define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END DOCTEST_MSVC_SUPPRESS_WARNING_POP
|
||||
|
||||
|
@ -352,6 +360,12 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
|
|||
#define DOCTEST_ALIGNMENT(x) __attribute__((aligned(x)))
|
||||
#endif
|
||||
|
||||
#ifdef DOCTEST_CONFIG_NO_CONTRADICTING_INLINE
|
||||
#define DOCTEST_INLINE_NOINLINE inline
|
||||
#else
|
||||
#define DOCTEST_INLINE_NOINLINE inline DOCTEST_NOINLINE
|
||||
#endif
|
||||
|
||||
#ifndef DOCTEST_NORETURN
|
||||
#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
|
||||
#define DOCTEST_NORETURN
|
||||
|
@ -378,6 +392,14 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
|
|||
#endif // DOCTEST_MSVC
|
||||
#endif // DOCTEST_CONSTEXPR
|
||||
|
||||
#ifndef DOCTEST_NO_SANITIZE_INTEGER
|
||||
#if DOCTEST_CLANG >= DOCTEST_COMPILER(3, 7, 0)
|
||||
#define DOCTEST_NO_SANITIZE_INTEGER __attribute__((no_sanitize("integer")))
|
||||
#else
|
||||
#define DOCTEST_NO_SANITIZE_INTEGER
|
||||
#endif
|
||||
#endif // DOCTEST_NO_SANITIZE_INTEGER
|
||||
|
||||
// =================================================================================================
|
||||
// == FEATURE DETECTION END ========================================================================
|
||||
// =================================================================================================
|
||||
|
@ -475,12 +497,13 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP
|
|||
// https://github.com/doctest/doctest/issues/356
|
||||
#if DOCTEST_CLANG
|
||||
#include <ciso646>
|
||||
#endif // clang
|
||||
|
||||
#ifdef _LIBCPP_VERSION
|
||||
#ifndef DOCTEST_CONFIG_USE_STD_HEADERS
|
||||
#define DOCTEST_CONFIG_USE_STD_HEADERS
|
||||
#endif
|
||||
#endif // _LIBCPP_VERSION
|
||||
#endif // clang
|
||||
|
||||
#ifdef DOCTEST_CONFIG_USE_STD_HEADERS
|
||||
#ifndef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
|
||||
|
@ -902,6 +925,7 @@ struct ContextOptions //!OCLINT too many fields
|
|||
bool no_skip; // don't skip test cases which are marked to be skipped
|
||||
bool gnu_file_line; // if line numbers should be surrounded with :x: and not (x):
|
||||
bool no_path_in_filenames; // if the path to files should be removed from the output
|
||||
String strip_file_prefixes;// remove the longest matching one of these prefixes from any file paths in the output
|
||||
bool no_line_numbers; // if source code line numbers should be omitted from the output
|
||||
bool no_debug_output; // no output in the debug console when a debugger is attached
|
||||
bool no_skipped_summary; // don't print "skipped" in the summary !!! UNDOCUMENTED !!!
|
||||
|
@ -970,7 +994,7 @@ namespace detail {
|
|||
struct deferred_false : types::false_type { };
|
||||
|
||||
// MSVS 2015 :(
|
||||
#if defined(_MSC_VER) && _MSC_VER <= 1900
|
||||
#if !DOCTEST_CLANG && defined(_MSC_VER) && _MSC_VER <= 1900
|
||||
template <typename T, typename = void>
|
||||
struct has_global_insertion_operator : types::false_type { };
|
||||
|
||||
|
@ -1000,8 +1024,13 @@ namespace detail {
|
|||
struct has_insertion_operator : types::false_type { };
|
||||
#endif
|
||||
|
||||
template <typename T>
|
||||
struct has_insertion_operator<T, decltype(operator<<(declval<std::ostream&>(), declval<const T&>()), void())> : types::true_type { };
|
||||
template <typename T>
|
||||
struct has_insertion_operator<T, decltype(operator<<(declval<std::ostream&>(), declval<const T&>()), void())> : types::true_type { };
|
||||
|
||||
template <typename T>
|
||||
struct should_stringify_as_underlying_type {
|
||||
static DOCTEST_CONSTEXPR bool value = detail::types::is_enum<T>::value && !doctest::detail::has_insertion_operator<T>::value;
|
||||
};
|
||||
|
||||
DOCTEST_INTERFACE std::ostream* tlssPush();
|
||||
DOCTEST_INTERFACE String tlssPop();
|
||||
|
@ -1063,7 +1092,7 @@ struct StringMaker : public detail::StringMakerBase<
|
|||
|
||||
template <typename T>
|
||||
String toString() {
|
||||
#if DOCTEST_MSVC >= 0 && DOCTEST_CLANG == 0 && DOCTEST_GCC == 0
|
||||
#if DOCTEST_CLANG == 0 && DOCTEST_GCC == 0 && DOCTEST_ICC == 0
|
||||
String ret = __FUNCSIG__; // class doctest::String __cdecl doctest::toString<TYPE>(void)
|
||||
String::size_type beginPos = ret.find('<');
|
||||
return ret.substr(beginPos + 1, ret.size() - beginPos - static_cast<String::size_type>(sizeof(">(void)")));
|
||||
|
@ -1074,7 +1103,7 @@ String toString() {
|
|||
#endif
|
||||
}
|
||||
|
||||
template <typename T, typename detail::types::enable_if<!detail::types::is_enum<T>::value, bool>::type = true>
|
||||
template <typename T, typename detail::types::enable_if<!detail::should_stringify_as_underlying_type<T>::value, bool>::type = true>
|
||||
String toString(const DOCTEST_REF_WRAP(T) value) {
|
||||
return StringMaker<T>::convert(value);
|
||||
}
|
||||
|
@ -1110,7 +1139,7 @@ DOCTEST_INTERFACE String toString(long unsigned in);
|
|||
DOCTEST_INTERFACE String toString(long long in);
|
||||
DOCTEST_INTERFACE String toString(long long unsigned in);
|
||||
|
||||
template <typename T, typename detail::types::enable_if<detail::types::is_enum<T>::value, bool>::type = true>
|
||||
template <typename T, typename detail::types::enable_if<detail::should_stringify_as_underlying_type<T>::value, bool>::type = true>
|
||||
String toString(const DOCTEST_REF_WRAP(T) value) {
|
||||
using UT = typename detail::types::underlying_type<T>::type;
|
||||
return (DOCTEST_STRINGIFY(static_cast<UT>(value)));
|
||||
|
@ -1162,8 +1191,18 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP
|
|||
|
||||
template <typename T>
|
||||
struct filldata<T*> {
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4180)
|
||||
static void fill(std::ostream* stream, const T* in) {
|
||||
filldata<const void*>::fill(stream, in);
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING_POP
|
||||
DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wmicrosoft-cast")
|
||||
filldata<const void*>::fill(stream,
|
||||
#if DOCTEST_GCC == 0 || DOCTEST_GCC >= DOCTEST_COMPILER(4, 9, 0)
|
||||
reinterpret_cast<const void*>(in)
|
||||
#else
|
||||
*reinterpret_cast<const void* const*>(&in)
|
||||
#endif
|
||||
);
|
||||
DOCTEST_CLANG_SUPPRESS_WARNING_POP
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -1275,9 +1314,9 @@ namespace detail {
|
|||
template<class T, unsigned N> struct decay_array<T[N]> { using type = T*; };
|
||||
template<class T> struct decay_array<T[]> { using type = T*; };
|
||||
|
||||
template<class T> struct not_char_pointer { static DOCTEST_CONSTEXPR value = 1; };
|
||||
template<> struct not_char_pointer<char*> { static DOCTEST_CONSTEXPR value = 0; };
|
||||
template<> struct not_char_pointer<const char*> { static DOCTEST_CONSTEXPR value = 0; };
|
||||
template<class T> struct not_char_pointer { static DOCTEST_CONSTEXPR int value = 1; };
|
||||
template<> struct not_char_pointer<char*> { static DOCTEST_CONSTEXPR int value = 0; };
|
||||
template<> struct not_char_pointer<const char*> { static DOCTEST_CONSTEXPR int value = 0; };
|
||||
|
||||
template<class T> struct can_use_op : public not_char_pointer<typename decay_array<T>::type> {};
|
||||
#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
|
||||
|
@ -1326,7 +1365,11 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
|
|||
// If not it doesn't find the operator or if the operator at global scope is defined after
|
||||
// this template, the template won't be instantiated due to SFINAE. Once the template is not
|
||||
// instantiated it can look for global operator using normal conversions.
|
||||
#ifdef __NVCC__
|
||||
#define SFINAE_OP(ret,op) ret
|
||||
#else
|
||||
#define SFINAE_OP(ret,op) decltype((void)(doctest::detail::declval<L>() op doctest::detail::declval<R>()),ret{})
|
||||
#endif
|
||||
|
||||
#define DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(op, op_str, op_macro) \
|
||||
template <typename R> \
|
||||
|
@ -1536,8 +1579,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
|
|||
// https://github.com/catchorg/Catch2/issues/870
|
||||
// https://github.com/catchorg/Catch2/issues/565
|
||||
template <typename L>
|
||||
Expression_lhs<L> operator<<(L&& operand) {
|
||||
return Expression_lhs<L>(static_cast<L&&>(operand), m_at);
|
||||
Expression_lhs<const L&&> operator<<(const L&& operand) { //bitfields bind to universal ref but not const rvalue ref
|
||||
return Expression_lhs<const L&&>(static_cast<const L&&>(operand), m_at);
|
||||
}
|
||||
|
||||
template <typename L,typename types::enable_if<!doctest::detail::types::is_rvalue_reference<L>::value,void >::type* = nullptr>
|
||||
|
@ -2129,13 +2172,13 @@ int registerReporter(const char* name, int priority, bool isReporter) {
|
|||
{ \
|
||||
void f(); \
|
||||
}; \
|
||||
static inline DOCTEST_NOINLINE void func() { \
|
||||
static DOCTEST_INLINE_NOINLINE void func() { \
|
||||
der v; \
|
||||
v.f(); \
|
||||
} \
|
||||
DOCTEST_REGISTER_FUNCTION(DOCTEST_EMPTY, func, decorators) \
|
||||
} \
|
||||
inline DOCTEST_NOINLINE void der::f() // NOLINT(misc-definitions-in-headers)
|
||||
DOCTEST_INLINE_NOINLINE void der::f() // NOLINT(misc-definitions-in-headers)
|
||||
|
||||
#define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, decorators) \
|
||||
static void f(); \
|
||||
|
@ -3119,7 +3162,9 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
|
|||
#include <utility>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#ifndef DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
#include <iostream>
|
||||
#endif // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
#include <algorithm>
|
||||
#include <iomanip>
|
||||
#include <vector>
|
||||
|
@ -3156,9 +3201,11 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
|
|||
// defines for a leaner windows.h
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define DOCTEST_UNDEF_WIN32_LEAN_AND_MEAN
|
||||
#endif // WIN32_LEAN_AND_MEAN
|
||||
#ifndef NOMINMAX
|
||||
#define NOMINMAX
|
||||
#define DOCTEST_UNDEF_NOMINMAX
|
||||
#endif // NOMINMAX
|
||||
|
||||
// not sure what AfxWin.h is for - here I do what Catch does
|
||||
|
@ -3197,6 +3244,10 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
|
|||
#define DOCTEST_CONFIG_OPTIONS_PREFIX "dt-"
|
||||
#endif
|
||||
|
||||
#ifndef DOCTEST_CONFIG_OPTIONS_FILE_PREFIX_SEPARATOR
|
||||
#define DOCTEST_CONFIG_OPTIONS_FILE_PREFIX_SEPARATOR ':'
|
||||
#endif
|
||||
|
||||
#ifndef DOCTEST_THREAD_LOCAL
|
||||
#if defined(DOCTEST_CONFIG_NO_MULTITHREADING) || DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
|
||||
#define DOCTEST_THREAD_LOCAL
|
||||
|
@ -3239,8 +3290,14 @@ namespace {
|
|||
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
|
||||
throw e;
|
||||
#else // DOCTEST_CONFIG_NO_EXCEPTIONS
|
||||
#ifdef DOCTEST_CONFIG_HANDLE_EXCEPTION
|
||||
DOCTEST_CONFIG_HANDLE_EXCEPTION(e);
|
||||
#else // DOCTEST_CONFIG_HANDLE_EXCEPTION
|
||||
#ifndef DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
std::cerr << "doctest will terminate because it needed to throw an exception.\n"
|
||||
<< "The message was: " << e.what() << '\n';
|
||||
#endif // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
#endif // DOCTEST_CONFIG_HANDLE_EXCEPTION
|
||||
std::terminate();
|
||||
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
|
||||
}
|
||||
|
@ -3315,7 +3372,7 @@ namespace detail {
|
|||
|
||||
namespace timer_large_integer
|
||||
{
|
||||
|
||||
|
||||
#if defined(DOCTEST_PLATFORM_WINDOWS)
|
||||
using type = ULONGLONG;
|
||||
#else // DOCTEST_PLATFORM_WINDOWS
|
||||
|
@ -3699,7 +3756,7 @@ String::size_type String::capacity() const {
|
|||
}
|
||||
|
||||
String String::substr(size_type pos, size_type cnt) && {
|
||||
cnt = std::min(cnt, size() - 1 - pos);
|
||||
cnt = std::min(cnt, size() - pos);
|
||||
char* cptr = c_str();
|
||||
memmove(cptr, cptr + pos, cnt);
|
||||
setSize(cnt);
|
||||
|
@ -3707,7 +3764,7 @@ String String::substr(size_type pos, size_type cnt) && {
|
|||
}
|
||||
|
||||
String String::substr(size_type pos, size_type cnt) const & {
|
||||
cnt = std::min(cnt, size() - 1 - pos);
|
||||
cnt = std::min(cnt, size() - pos);
|
||||
return String{ c_str() + pos, cnt };
|
||||
}
|
||||
|
||||
|
@ -3777,7 +3834,7 @@ namespace Color {
|
|||
|
||||
// clang-format off
|
||||
const char* assertString(assertType::Enum at) {
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4061) // enum 'x' in switch of enum 'y' is not explicitely handled
|
||||
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4061) // enum 'x' in switch of enum 'y' is not explicitly handled
|
||||
#define DOCTEST_GENERATE_ASSERT_TYPE_CASE(assert_type) case assertType::DT_ ## assert_type: return #assert_type
|
||||
#define DOCTEST_GENERATE_ASSERT_TYPE_CASES(assert_type) \
|
||||
DOCTEST_GENERATE_ASSERT_TYPE_CASE(WARN_ ## assert_type); \
|
||||
|
@ -3839,6 +3896,26 @@ const char* skipPathFromFilename(const char* file) {
|
|||
forward = back;
|
||||
return forward + 1;
|
||||
}
|
||||
} else {
|
||||
const auto prefixes = getContextOptions()->strip_file_prefixes;
|
||||
const char separator = DOCTEST_CONFIG_OPTIONS_FILE_PREFIX_SEPARATOR;
|
||||
String::size_type longest_match = 0U;
|
||||
for(String::size_type pos = 0U; pos < prefixes.size(); ++pos)
|
||||
{
|
||||
const auto prefix_start = pos;
|
||||
pos = std::min(prefixes.find(separator, prefix_start), prefixes.size());
|
||||
|
||||
const auto prefix_size = pos - prefix_start;
|
||||
if(prefix_size > longest_match)
|
||||
{
|
||||
// TODO under DOCTEST_MSVC: does the comparison need strnicmp() to work with drive letter capitalization?
|
||||
if(0 == std::strncmp(prefixes.c_str() + prefix_start, file, prefix_size))
|
||||
{
|
||||
longest_match = prefix_size;
|
||||
}
|
||||
}
|
||||
}
|
||||
return &file[longest_match];
|
||||
}
|
||||
#endif // DOCTEST_CONFIG_DISABLE
|
||||
return file;
|
||||
|
@ -4105,11 +4182,13 @@ namespace {
|
|||
return false;
|
||||
}
|
||||
|
||||
DOCTEST_NO_SANITIZE_INTEGER
|
||||
unsigned long long hash(unsigned long long a, unsigned long long b) {
|
||||
return (a << 5) + b;
|
||||
}
|
||||
|
||||
// C string hash function (djb2) - taken from http://www.cse.yorku.ca/~oz/hash.html
|
||||
DOCTEST_NO_SANITIZE_INTEGER
|
||||
unsigned long long hash(const char* str) {
|
||||
unsigned long long hash = 5381;
|
||||
char c;
|
||||
|
@ -4949,7 +5028,7 @@ namespace detail {
|
|||
m_string = tlssPop();
|
||||
logged = true;
|
||||
}
|
||||
|
||||
|
||||
DOCTEST_ITERATE_THROUGH_REPORTERS(log_message, *this);
|
||||
|
||||
const bool isWarn = m_severity & assertType::is_warn;
|
||||
|
@ -5018,7 +5097,11 @@ namespace {
|
|||
mutable XmlWriter* m_writer = nullptr;
|
||||
};
|
||||
|
||||
#ifndef DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
XmlWriter( std::ostream& os = std::cout );
|
||||
#else // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
XmlWriter( std::ostream& os );
|
||||
#endif // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
~XmlWriter();
|
||||
|
||||
XmlWriter( XmlWriter const& ) = delete;
|
||||
|
@ -5500,7 +5583,7 @@ namespace {
|
|||
test_case_start_impl(in);
|
||||
xml.ensureTagClosed();
|
||||
}
|
||||
|
||||
|
||||
void test_case_reenter(const TestCaseData&) override {}
|
||||
|
||||
void test_case_end(const CurrentTestCaseStats& st) override {
|
||||
|
@ -5848,7 +5931,22 @@ namespace {
|
|||
testCaseData.addFailure(rb.m_decomp.c_str(), assertString(rb.m_at), os.str());
|
||||
}
|
||||
|
||||
void log_message(const MessageData&) override {}
|
||||
void log_message(const MessageData& mb) override {
|
||||
if(mb.m_severity & assertType::is_warn) // report only failures
|
||||
return;
|
||||
|
||||
DOCTEST_LOCK_MUTEX(mutex)
|
||||
|
||||
std::ostringstream os;
|
||||
os << skipPathFromFilename(mb.m_file) << (opt.gnu_file_line ? ":" : "(")
|
||||
<< line(mb.m_line) << (opt.gnu_file_line ? ":" : "):") << std::endl;
|
||||
|
||||
os << mb.m_string.c_str() << "\n";
|
||||
log_contexts(os);
|
||||
|
||||
testCaseData.addFailure(mb.m_string.c_str(),
|
||||
mb.m_severity & assertType::is_check ? "FAIL_CHECK" : "FAIL", os.str());
|
||||
}
|
||||
|
||||
void test_case_skipped(const TestCaseData&) override {}
|
||||
|
||||
|
@ -6108,6 +6206,8 @@ namespace {
|
|||
<< Whitespace(sizePrefixDisplay*1) << ":n: vs (n): for line numbers in output\n";
|
||||
s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "npf, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-path-filenames=<bool> "
|
||||
<< Whitespace(sizePrefixDisplay*1) << "only filenames and no paths in output\n";
|
||||
s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "spp, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "skip-path-prefixes=<p1:p2> "
|
||||
<< Whitespace(sizePrefixDisplay*1) << "whenever file paths start with this prefix, remove it from the output\n";
|
||||
s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nln, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-line-numbers=<bool> "
|
||||
<< Whitespace(sizePrefixDisplay*1) << "0 instead of real line numbers in output\n";
|
||||
// ================================================================================== << 79
|
||||
|
@ -6188,9 +6288,9 @@ namespace {
|
|||
separator_to_stream();
|
||||
s << std::dec;
|
||||
|
||||
auto totwidth = int(std::ceil(log10((std::max(p.numTestCasesPassingFilters, static_cast<unsigned>(p.numAsserts))) + 1)));
|
||||
auto passwidth = int(std::ceil(log10((std::max(p.numTestCasesPassingFilters - p.numTestCasesFailed, static_cast<unsigned>(p.numAsserts - p.numAssertsFailed))) + 1)));
|
||||
auto failwidth = int(std::ceil(log10((std::max(p.numTestCasesFailed, static_cast<unsigned>(p.numAssertsFailed))) + 1)));
|
||||
auto totwidth = int(std::ceil(log10(static_cast<double>(std::max(p.numTestCasesPassingFilters, static_cast<unsigned>(p.numAsserts))) + 1)));
|
||||
auto passwidth = int(std::ceil(log10(static_cast<double>(std::max(p.numTestCasesPassingFilters - p.numTestCasesFailed, static_cast<unsigned>(p.numAsserts - p.numAssertsFailed))) + 1)));
|
||||
auto failwidth = int(std::ceil(log10(static_cast<double>(std::max(p.numTestCasesFailed, static_cast<unsigned>(p.numAssertsFailed))) + 1)));
|
||||
const bool anythingFailed = p.numTestCasesFailed > 0 || p.numAssertsFailed > 0;
|
||||
s << Color::Cyan << "[doctest] " << Color::None << "test cases: " << std::setw(totwidth)
|
||||
<< p.numTestCasesPassingFilters << " | "
|
||||
|
@ -6222,7 +6322,7 @@ namespace {
|
|||
subcasesStack.clear();
|
||||
currentSubcaseLevel = 0;
|
||||
}
|
||||
|
||||
|
||||
void test_case_reenter(const TestCaseData&) override {
|
||||
subcasesStack.clear();
|
||||
}
|
||||
|
@ -6612,6 +6712,7 @@ void Context::parseArgs(int argc, const char* const* argv, bool withDefaults) {
|
|||
DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-skip", "ns", no_skip, false);
|
||||
DOCTEST_PARSE_AS_BOOL_OR_FLAG("gnu-file-line", "gfl", gnu_file_line, !bool(DOCTEST_MSVC));
|
||||
DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-path-filenames", "npf", no_path_in_filenames, false);
|
||||
DOCTEST_PARSE_STR_OPTION("strip-file-prefixes", "sfp", strip_file_prefixes, "");
|
||||
DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-line-numbers", "nln", no_line_numbers, false);
|
||||
DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-debug-output", "ndo", no_debug_output, false);
|
||||
DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-skipped-summary", "nss", no_skipped_summary, false);
|
||||
|
@ -6739,8 +6840,12 @@ int Context::run() {
|
|||
fstr.open(p->out.c_str(), std::fstream::out);
|
||||
p->cout = &fstr;
|
||||
} else {
|
||||
#ifndef DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
// stdout by default
|
||||
p->cout = &std::cout;
|
||||
#else // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
return EXIT_FAILURE;
|
||||
#endif // DOCTEST_CONFIG_NO_INCLUDE_IOSTREAM
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6905,7 +7010,7 @@ int Context::run() {
|
|||
DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_start, tc);
|
||||
|
||||
p->timer.start();
|
||||
|
||||
|
||||
bool run_test = true;
|
||||
|
||||
do {
|
||||
|
@ -6946,7 +7051,7 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP
|
|||
run_test = false;
|
||||
p->failure_flags |= TestCaseFailureReason::TooManyFailedAsserts;
|
||||
}
|
||||
|
||||
|
||||
if(!p->nextSubcaseStack.empty() && run_test)
|
||||
DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_reenter, tc);
|
||||
if(p->nextSubcaseStack.empty())
|
||||
|
@ -7017,3 +7122,13 @@ DOCTEST_SUPPRESS_COMMON_WARNINGS_POP
|
|||
|
||||
#endif // DOCTEST_LIBRARY_IMPLEMENTATION
|
||||
#endif // DOCTEST_CONFIG_IMPLEMENT
|
||||
|
||||
#ifdef DOCTEST_UNDEF_WIN32_LEAN_AND_MEAN
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#undef DOCTEST_UNDEF_WIN32_LEAN_AND_MEAN
|
||||
#endif // DOCTEST_UNDEF_WIN32_LEAN_AND_MEAN
|
||||
|
||||
#ifdef DOCTEST_UNDEF_NOMINMAX
|
||||
#undef NOMINMAX
|
||||
#undef DOCTEST_UNDEF_NOMINMAX
|
||||
#endif // DOCTEST_UNDEF_NOMINMAX
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue