logger_test.cxx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //
  2. // logger_test.cxx
  3. // logger
  4. //
  5. // Created by Sam Jaffe on 3/31/19.
  6. //
  7. #include <gmock/gmock.h>
  8. #include "logger/logger.h"
  9. namespace logging {
  10. void PrintTo(location_info const & info, std::ostream * os) {
  11. if (info.line) {
  12. (*os) << "{\"" << info.filename << "\", \"" <<
  13. info.function << "\", " << info.line << "}";
  14. } else {
  15. (*os) << "NULL";
  16. }
  17. }
  18. void PrintTo(logpacket const & pkt, std::ostream * os) {
  19. (*os) << "{ " << logging::level_header(pkt.level) << ", ";
  20. PrintTo(pkt.info, os);
  21. (*os) << ", \"" << pkt.logger << "\", \"" << pkt.message << "\" }";
  22. }
  23. }
  24. struct MockLoggerImpl : public logging::logger_impl {
  25. MockLoggerImpl() {
  26. SetLogLevel(logging::LTRACE);
  27. }
  28. void SetLogLevel(logging::log_level ll) {
  29. min_log_level = ll;
  30. }
  31. MOCK_METHOD0(flush, void());
  32. MOCK_METHOD1(write, void(logging::logpacket const &));
  33. };
  34. struct LoggerTest : public testing::Test {
  35. void SetUp() override;
  36. void TearDown() override;
  37. std::shared_ptr<MockLoggerImpl> pimpl;
  38. };
  39. using namespace logging;
  40. struct t_logger : public logger {
  41. t_logger(std::string const & name, std::shared_ptr<logger_impl> impl)
  42. : logger(name, impl) {}
  43. };
  44. void LoggerTest::SetUp() {
  45. pimpl.reset(new MockLoggerImpl);
  46. using testing::AnyNumber;
  47. EXPECT_CALL(*pimpl, flush()).Times(AnyNumber());
  48. }
  49. void LoggerTest::TearDown() {
  50. pimpl.reset();
  51. }
  52. TEST_F(LoggerTest, LogsWithBraceFmtCode) {
  53. using testing::Field;
  54. EXPECT_CALL(*pimpl, write(Field(&logpacket::message, "5"))).Times(1);
  55. t_logger("", pimpl).log(LERROR, "{}", 5);
  56. }
  57. TEST_F(LoggerTest, DoesNotLogAboveLevel) {
  58. using testing::_;
  59. pimpl->SetLogLevel(LFATAL);
  60. EXPECT_CALL(*pimpl, write(_)).Times(0);
  61. t_logger("", pimpl).log(LERROR, "{}", 5);
  62. }
  63. TEST_F(LoggerTest, LogCurlyBraceLiteralByDoubling) {
  64. using testing::Field;
  65. EXPECT_CALL(*pimpl, write(Field(&logpacket::message, "{}"))).Times(1);
  66. t_logger("", pimpl).log(LERROR, "{{}}", 5);
  67. }