Improved tests suite

Enhanced tests printed output.
Created own assertions so that tests can be also executed when compiling
in release mode.
This commit is contained in:
Valentino Orlandi 2024-02-18 15:39:50 +01:00
parent 4a8df28ca6
commit f31abb364b
Signed by: elB4RTO
GPG key ID: 1719E976DB2D4E71
5 changed files with 1400 additions and 1231 deletions

View file

@ -209,6 +209,7 @@ qt_add_executable(LogDoctor
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
if(WIN32)
@ -260,6 +261,8 @@ include(CTest)
enable_testing()
add_executable(LogDocTester
tests/main.cpp
# suites
tests/lib.h
tests/white_box.h
tests/white_box.cpp
# 2 test

113
logdoctor/tests/lib.h Normal file
View file

@ -0,0 +1,113 @@
#ifndef LOGDOCTESTER__LIB_H
#define LOGDOCTESTER__LIB_H
#include <iostream>
#include <sstream>
#include <QtSystemDetection>
#if defined( Q_OS_MACOS )
#define C_DEFAULT ""
#define C_TESTING ""
#define C_FAILED ""
#define C_PASSED ""
#define C_WARN ""
#define C_SUITE ""
#elif defined( Q_OS_WINDOWS )
#define C_DEFAULT ""
#define C_TESTING ""
#define C_FAILED ""
#define C_PASSED ""
#define C_WARN ""
#define C_SUITE ""
#elif defined( Q_OS_LINUX ) || defined( Q_OS_BSD4 )
#define C_DEFAULT "\x1b[0m"
#define C_TESTING "\x1b[1;30m"
#define C_FAILED "\x1b[1;31m"
#define C_PASSED "\x1b[1;32m"
#define C_WARN "\x1b[1;33m"
#define C_SUITE "\x1b[1;34m"
#else
#error "System not supported"
#endif
#define T_INIT(ARG)\
unsigned n_tested{0}, n_passed{0}, n_failed{0};\
bool successful;\
std::cout << "\n\n"\
<< "┏(" C_SUITE "TEST_SUITE" C_DEFAULT ") " ARG << std::endl;
#define T_TEST_START(ARG)\
++n_tested;\
successful = true;\
std::cout << "\n"\
<< "┠┄┬[" C_TESTING "TESTING" C_DEFAULT "] " ARG "()" << std::endl;
#define T_TEST_RESULT()\
std::cout << "┃ │" << std::endl;\
if (successful) {\
++n_passed;\
std::cout << "┃ └┄─[" C_PASSED "PASSED" C_DEFAULT "]" << std::endl;\
} else {\
++n_failed;\
std::cout << "┃ └┄─[" C_FAILED "FAILED" C_DEFAULT "]" << std::endl;\
}
#define T_FIN()\
std::cout << "\n"\
<< "┗━┳━━━━━━━━┯━━━━━━━━┯━━━━━━━━┓\n"\
<< " ┃ TESTED ┆ PASSED ┆ FAILED ┃\n"\
<< "" << std::setw(6) << n_tested << "" << std::setw(6) << n_passed << "" << std::setw(6) << n_failed << "\n"\
<< " ┗━━━━━━━━┷━━━━━━━━┷━━━━━━━━┛"\
<< std::endl;\
return n_failed == 0 && n_passed == n_tested;
#define T_ASSERT(ARG)\
if (!(ARG)) {\
std::cout << "┃ │\n"\
<< "┃ ├─┄{" C_WARN "ASSERTION_FAILED" C_DEFAULT "}@" C_WARN << __LINE__ << C_DEFAULT " " #ARG << std::endl;\
successful = false;\
}
#define T_ASSERT_NOT(ARG)\
if (ARG) {\
std::cout << "┃ │\n"\
<< "┃ ├─┄{" C_WARN "ASSERTION_FAILED" C_DEFAULT "}@" C_WARN << __LINE__ << C_DEFAULT " ! " #ARG << std::endl;\
successful = false;\
}
#define T_EXPECT(TARGET,EXPECTED)\
if (TARGET != EXPECTED) {\
std::cout << "┃ │\n"\
<< "┃ ├─┄{" C_WARN "EXPECTATION_FAILED" C_DEFAULT "}@" C_WARN << __LINE__ << C_DEFAULT " " #TARGET << " == " << #EXPECTED << std::endl;\
successful = false;\
}
#define T_EXPECT_NOT(TARGET,EXPECTED)\
if (TARGET == EXPECTED) {\
std::cout << "┃ │\n"\
<< "┃ ├─┄{" C_WARN "EXPECTATION_FAILED" C_DEFAULT "}@" C_WARN << __LINE__ << C_DEFAULT " " #TARGET << " != " << #EXPECTED << std::endl;\
successful = false;\
}
#define REDIRECT_STDOUT()\
std::streambuf* out{ std::cout.rdbuf() };\
std::stringstream out_;\
std::cout.rdbuf( out_.rdbuf() );
#define RESTORE_STDOUT()\
std::cout.rdbuf( out );
#define REDIRECT_STDERR()\
std::streambuf* err{ std::cerr.rdbuf() };\
std::stringstream err_;\
std::cerr.rdbuf( err_.rdbuf() );
#define RESTORE_STDERR()\
std::cerr.rdbuf( err );
#endif // LOGDOCTESTER__LIB_H

View file

@ -6,20 +6,21 @@
int main()
{
std::cout << "STARTING TEST SUITE" << std::endl;
std::cout << "LOGDOCTOR TESTER" << std::endl;
bool passed{ true };
std::cout << "\nTESTING: operators" << std::endl;
Testing::testOperators();
passed &= Testing::testOperators();
std::cout << "\nTESTING: utilities" << std::endl;
Testing::testUtilities();
passed &= Testing::testUtilities();
std::cout << "\nTESTING: craplog modules" << std::endl;
Testing::testCraplogModules();
passed &= Testing::testCraplogModules();
std::cout << "\nTESTING: crapview modules" << std::endl;
Testing::testCrapviewModules();
passed &= Testing::testCrapviewModules();
std::cout << "\nALL TESTS PASSED" << std::endl;
return 0;
if (passed)
std::cout << "\n\nALL TESTS PASSED" << std::endl;
else
std::cout << "\n\nSOME TEST FAILED" << std::endl;
return passed;
}

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
#ifndef WHITE_BOX_H
#define WHITE_BOX_H
#ifndef LOGDOCTESTER__WHITE_BOX_H
#define LOGDOCTESTER__WHITE_BOX_H
//! Testing
@ -10,17 +10,17 @@ namespace Testing
{
//! A Test suit for the defined operators
void testOperators();
bool testOperators();
//! A Test suit for the utilities
void testUtilities();
bool testUtilities();
//! A Test suit for craplog's modules
void testCraplogModules();
bool testCraplogModules();
//! A Test suit for crapview's modules
void testCrapviewModules();
bool testCrapviewModules();
} // namespace Testing
#endif // WHITE_BOX_H
#endif // LOGDOCTESTER__WHITE_BOX_H