mock_logger.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //
  2. // mock_logger.h
  3. // logger_test
  4. //
  5. // Created by Sam Jaffe on 4/2/19.
  6. //
  7. #ifndef mock_logger_h
  8. #define mock_logger_h
  9. #include <gmock/gmock.h>
  10. #include <sstream>
  11. #include "logger/detail/appender.h"
  12. #include "logger/detail/layout.h"
  13. #include "logger/detail/logger_impl.h"
  14. #include "logger/logpacket.h"
  15. namespace logging {
  16. inline void PrintTo(location_info const & info, std::ostream * os) {
  17. if (info.line) {
  18. (*os) << "{\"" << info.filename << "\", \"" <<
  19. info.function << "\", " << info.line << "}";
  20. } else {
  21. (*os) << "NULL";
  22. }
  23. }
  24. inline void PrintTo(logpacket const & pkt, std::ostream * os) {
  25. (*os) << "{ " << pkt.level << ", ";
  26. PrintTo(pkt.info, os);
  27. (*os) << ", \"" << pkt.logger << "\", \"" << pkt.message.str() << "\" }";
  28. }
  29. }
  30. struct MockAppender : public logging::appender {
  31. MockAppender() { SetLogLevel(logging::level::trace); }
  32. void SetLogLevel(logging::level ll) { min_log_level = ll; }
  33. MOCK_METHOD0(flush, void());
  34. MOCK_METHOD1(write, void(logging::logpacket const &));
  35. };
  36. struct StubAppender : public logging::appender {
  37. StubAppender() { SetLogLevel(logging::level::trace); }
  38. void SetLogLevel(logging::level ll) { min_log_level = ll; }
  39. void flush() override {}
  40. void write(logging::logpacket const & pkt) override {
  41. layout->format(stream, pkt);
  42. }
  43. std::stringstream stream;
  44. };
  45. struct MockLayout : public logging::layout {
  46. MOCK_CONST_METHOD2(format, void(std::ostream&, logging::logpacket const&));
  47. };
  48. struct StubLayout : public logging::layout {
  49. void format(std::ostream& os, logging::logpacket const& pkt) const {
  50. os << pkt.message.str();
  51. }
  52. };
  53. ACTION(LogMessage) {
  54. arg0 << arg1.message.str();
  55. }
  56. MATCHER_P(MessageEq, value, "") {
  57. return arg.message.str() == value;
  58. }
  59. struct LoggerTest : public testing::Test {
  60. void SetUp() override {
  61. appender.reset(new MockAppender);
  62. pimpl = std::make_shared<logging::logger_impl>();
  63. pimpl->impls.push_back(appender);
  64. using testing::_;
  65. using testing::AnyNumber;
  66. EXPECT_CALL(*appender, write(_)).Times(AnyNumber());
  67. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  68. }
  69. void TearDown() override {
  70. pimpl.reset();
  71. appender.reset();
  72. }
  73. std::shared_ptr<MockAppender> appender;
  74. std::shared_ptr<logging::logger_impl> pimpl;
  75. };
  76. #endif /* mock_logger_h */