diff --git a/src/awesome_log/CMakeLists.txt b/src/awesome_log/CMakeLists.txt index e8e064a..48fd953 100644 --- a/src/awesome_log/CMakeLists.txt +++ b/src/awesome_log/CMakeLists.txt @@ -19,3 +19,25 @@ target_include_directories( ${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ) + +project(awesome_log_test) +find_package(GTest REQUIRED) +add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME}) + +add_executable( + ${PROJECT_NAME} + ./test/test_scoped_log.cpp +) + +set_property( + TARGET ${PROJECT_NAME} + PROPERTY CXX_STANDARD 20 +) + +target_link_libraries( + ${PROJECT_NAME} + PUBLIC + awesome_log + GTest::gtest_main + GTest::gmock +) diff --git a/src/awesome_log/test/mock_writer.hpp b/src/awesome_log/test/mock_writer.hpp new file mode 100644 index 0000000..1465628 --- /dev/null +++ b/src/awesome_log/test/mock_writer.hpp @@ -0,0 +1,13 @@ + +#pragma once + +#include +#include + +class mock_writer : public awesome_log::writer_interface +{ +public: + ~mock_writer() override = default; + + MOCK_METHOD(void, log, (std::string_view), (override)); +}; \ No newline at end of file diff --git a/src/awesome_log/test/test_scoped_log.cpp b/src/awesome_log/test/test_scoped_log.cpp new file mode 100644 index 0000000..8835b78 --- /dev/null +++ b/src/awesome_log/test/test_scoped_log.cpp @@ -0,0 +1,52 @@ +#include +#include + +#include "mock_writer.hpp" +#include +#include + +#include + +class test_scoped_log : public ::testing::Test +{ +public: + void SetUp() override + { + m_writer = std::make_shared(); + awesome_log::set_writer(m_writer); + } + + void TearDown() override + { + awesome_log::set_writer(std::shared_ptr()); + } + +protected: + std::shared_ptr m_writer; +}; + +TEST_F(test_scoped_log, log_normal_flow) +{ + EXPECT_CALL(*m_writer, log("> log")); + EXPECT_CALL(*m_writer, log("< log")); + + { + awesome_log::scoped_log a("log"); + } +} + +TEST_F(test_scoped_log, log_stack_unwind) +{ + EXPECT_CALL(*m_writer, log("> log")); + EXPECT_CALL(*m_writer, log("< log (stack unwinding)")); + + try + { + awesome_log::scoped_log a("log"); + throw std::runtime_error(""); + } + catch(const std::exception& e) + { + // Not doing anything + } +} \ No newline at end of file