24#ifndef UNIT_TEST_UTILS__H 
   25#define UNIT_TEST_UTILS__H 
   27#define BOOST_NO_AUTO_PTR 
   29#include <boost/test/unit_test.hpp> 
   30#include <turtle/mock.hpp> 
   56#define KI_CHECK_OPT_EQUAL( lhs, rhs )                                                            \ 
   57    BOOST_CHECK_EQUAL( PRINTABLE_OPT( lhs ), PRINTABLE_OPT( rhs ) ) 
 
   63    if( aOptional.
m_Opt.has_value() )
 
   64        aOs << *aOptional.
m_Opt;
 
 
   72template <
class L, 
class R>
 
   75    if( !aLhs.
m_Opt.has_value() && !aRhs.
m_Opt.has_value() )
 
 
   82template <
class L, 
class R>
 
   85    return !( aLhs == aRhs );
 
 
   99    os << 
"std::vector size " << aVec.size() << 
" [";
 
  101    for( 
const auto& i : aVec )
 
 
  113template <
typename K, 
typename V>
 
  116    os << 
"std::map size " << aMap.size() << 
" [";
 
  118    for( 
const auto& [key, value] : aMap )
 
  120        os << 
"\n    " << key << 
" = " << value;
 
 
  130template <
typename K, 
typename V>
 
  133    os << 
"[" << aPair.first << 
", " << aPair.second << 
"]";
 
 
  146struct print_log_value<wxString>
 
  151        os << v.ToUTF8().data();
 
 
 
  159template<std::
size_t N>
 
  160struct print_log_value<wchar_t[ N ]>
 
  162    void operator()( std::ostream& os, 
const wchar_t (&ws)[ N ] )
 
  166        os << tmp.ToUTF8().data();
 
 
 
 
  185template <
typename EXP_CONT> 
using EXP_OBJ = 
typename EXP_CONT::value_type;
 
  186template <
typename FOUND_CONT> 
using FOUND_OBJ = 
typename FOUND_CONT::value_type;
 
  204template <
typename EXP_OBJ, 
typename FOUND_OBJ>
 
  241template <
typename EXP_CONT, 
typename FOUND_CONT, 
typename MATCH_PRED>
 
  245    using EXP_OBJ = 
typename EXP_CONT::value_type;
 
  248    std::set<const EXP_OBJ*> matched;
 
  251    for( 
const auto& found : aFound )
 
  253        for( 
const auto& 
expected : aExpected )
 
  255            if( aMatchPredicate( 
expected, found ) )
 
  264    for( 
const EXP_OBJ& exp : aExpected )
 
  266        BOOST_CHECK_MESSAGE( matched.count( &exp ) > 0, 
"Expected item was not found. Expected: \n" 
  271    for( 
const EXP_OBJ* found : matched )
 
  273        const bool was_expected = std::find_if( aExpected.begin(), aExpected.end(),
 
  276                    return &aObj == found;
 
  277                } ) != aExpected.end();
 
  279        BOOST_CHECK_MESSAGE( was_expected, 
"Found item was not expected. Found: \n" << *found );
 
 
  290    T sorted = aCollection;
 
  291    std::sort( sorted.begin(), sorted.end() );
 
  293    return std::adjacent_find( sorted.begin(), sorted.end() ) == sorted.end();
 
 
  322#define CHECK_WX_ASSERT( STATEMENT ) BOOST_CHECK_THROW( STATEMENT, KI_TEST::WX_ASSERT_ERROR ); 
  324#define CHECK_WX_ASSERT( STATEMENT ) 
std::string GetTestDataRootDir()
 
void CheckUnorderedMatches(const EXP_CONT &aExpected, const FOUND_CONT &aFound, MATCH_PRED aMatchPredicate)
Check that a container of "found" objects matches a container of "expected" objects.
 
typename FOUND_CONT::value_type FOUND_OBJ
 
std::function< bool(const EXP_OBJ &, const FOUND_OBJ &)> MATCH_PRED
A match predicate: check that a "found" object is equivalent to or represents an "expected" object,...
 
std::string GetEeschemaTestDataDir()
Get the configured location of Eeschema test data.
 
typename EXP_CONT::value_type EXP_OBJ
 
bool CollectionHasNoDuplicates(const T &aCollection)
Predicate to check a collection has no duplicate elements.
 
std::ostream & boost_test_print_type(std::ostream &os, std::vector< T > const &aVec)
Boost print helper for generic vectors.
 
A named data-driven test case.
 
friend std::ostream & operator<<(std::ostream &os, const NAMED_CASE &aCase)
 
PRINTABLE_OPT(const T &aVal)
 
PRINTABLE_OPT(const std::optional< T > &aOpt)
 
VECTOR3I expected(15, 30, 45)
 
bool operator!=(const PRINTABLE_OPT< L > &aLhs, const PRINTABLE_OPT< R > &aRhs)
 
bool operator==(const PRINTABLE_OPT< L > &aLhs, const PRINTABLE_OPT< R > &aRhs)
 
std::ostream & boost_test_print_type(std::ostream &os, wxPoint const &aVec)
Boost print helper for wxPoint.
 
std::ostream & operator<<(std::ostream &aOs, const PRINTABLE_OPT< T > &aOptional)