mock_logger.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 "logger/detail/appender.h"
  11. #include "logger/detail/layout.h"
  12. #include "logger/detail/logger_impl.h"
  13. #include "logger/logpacket.h"
  14. namespace logging {
  15. inline void PrintTo(location_info const & info, std::ostream * os) {
  16. if (info.line) {
  17. (*os) << "{\"" << info.filename << "\", \"" <<
  18. info.function << "\", " << info.line << "}";
  19. } else {
  20. (*os) << "NULL";
  21. }
  22. }
  23. inline void PrintTo(logpacket const & pkt, std::ostream * os) {
  24. (*os) << "{ " << pkt.level << ", ";
  25. PrintTo(pkt.info, os);
  26. (*os) << ", \"" << pkt.logger << "\", \"" << pkt.message.str() << "\" }";
  27. }
  28. }
  29. struct MockAppender : public logging::appender {
  30. MockAppender() { SetLogLevel(logging::level::trace); }
  31. void SetLogLevel(logging::level ll) { min_log_level = ll; }
  32. MOCK_METHOD0(flush, void());
  33. MOCK_METHOD1(write, void(std::string const &));
  34. };
  35. struct MockLayout : public logging::layout {
  36. MOCK_CONST_METHOD1(format, std::string(logging::logpacket const &));
  37. };
  38. ACTION(ReturnMessage) {
  39. return arg0.message.str();
  40. }
  41. MATCHER_P(MessageEq, value, "") {
  42. return arg.message.str() == value;
  43. }
  44. struct LoggerTest : public testing::Test {
  45. void SetUp() override {
  46. appender.reset(new MockAppender);
  47. layout.reset(new MockLayout);
  48. pimpl = std::make_shared<logging::logger_impl>();
  49. pimpl->impls.push_back({appender, layout});
  50. using testing::_;
  51. using testing::AnyNumber;
  52. EXPECT_CALL(*appender, write(_)).Times(AnyNumber());
  53. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  54. ON_CALL(*layout, format(_)).WillByDefault(ReturnMessage());
  55. }
  56. void TearDown() override {
  57. pimpl.reset();
  58. layout.reset();
  59. appender.reset();
  60. }
  61. std::shared_ptr<MockAppender> appender;
  62. std::shared_ptr<MockLayout> layout;
  63. std::shared_ptr<logging::logger_impl> pimpl;
  64. };
  65. #endif /* mock_logger_h */