// This file is under GNU General Public License 3.0 // see LICENSE.txt #ifndef PITYTEST_PITYUNIT_HXX #define PITYTEST_PITYUNIT_HXX #include "../../../src/std_utils.hh" #include "PityUnit.hh" #include #include #include #include #include #include #include #include #include #include #include namespace pEp { namespace PityTest11 { template PityUnit::PityUnit( const std::string &name, TestFunction test_func, TestContext *perspective, ExecutionMode exec_mode) : AbstractPityUnit(name, exec_mode), _perspective{ perspective }, _test_func{ test_func } { } template PityUnit::PityUnit( AbstractPityUnit &parent, const std::string &name, TestFunction test_func, TestContext *perspective, ExecutionMode exec_mode) : AbstractPityUnit(parent, name, exec_mode), _perspective{ perspective }, _test_func{ test_func } { } template PityUnit::PityUnit(const PityUnit &rhs) : AbstractPityUnit(rhs, *this) { _perspective = rhs._perspective; _test_func = rhs._test_func; } template PityUnit *PityUnit::clone() { return new PityUnit(*this); } template void PityUnit::_runSelf() { if (_test_func != nullptr) { try { _test_func(*this, getPerspective()); logH3(_status_string("\033[1m\033[32mSUCCESS" + Utils::to_termcol(_color()))); } catch (const std::exception &e) { _logRaw("reason: " + std::string(e.what())); logH3(_status_string("\033[1m\033[31mFAILED" + Utils::to_termcol(_color()))); } } else { _logRaw("No function to execute"); } } // Inherited (if null see parent recursively) template TestContext *PityUnit::getPerspective() const { pEpLogClass("called"); TestContext *ret = nullptr; if (_perspective != nullptr) { ret = _perspective; } else { if (!isRoot()) { ret = (dynamic_cast *>(getParent()))->getPerspective(); } } return ret; } } // namespace PityTest11 } // namespace pEp #endif // PITYTEST_PITYUNIT_HXX