diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/fixtures/fixture_log_observer.cpp | 57 | ||||
-rw-r--r-- | test/fixtures/fixture_log_observer.hpp | 50 |
2 files changed, 76 insertions, 31 deletions
diff --git a/test/fixtures/fixture_log_observer.cpp b/test/fixtures/fixture_log_observer.cpp index 1d3517ac67..77bf955268 100644 --- a/test/fixtures/fixture_log_observer.cpp +++ b/test/fixtures/fixture_log_observer.cpp @@ -3,30 +3,40 @@ namespace mbgl { -FixtureLogObserver::LogMessage::LogMessage(EventSeverity severity_, Event event_, int64_t code_, - const std::string &msg_) +FixtureLog::Message::Message(EventSeverity severity_, + Event event_, + int64_t code_, + const std::string& msg_) : severity(severity_), event(event_), code(code_), msg(msg_) { } -bool FixtureLogObserver::LogMessage::operator==(const LogMessage &rhs) const { - return severity == rhs.severity && - event == rhs.event && - code == rhs.code && - msg == rhs.msg; +bool FixtureLog::Message::operator==(const Message& rhs) const { + return severity == rhs.severity && event == rhs.event && code == rhs.code && msg == rhs.msg; } -FixtureLogObserver::~FixtureLogObserver() { +FixtureLog::Message::Message() : severity(), event(), code(), msg() { +} + +FixtureLog::Observer::Observer(FixtureLog* log_) : log(log_) { +} + +FixtureLog::Observer::~Observer() { + if (log) { + log->observer = nullptr; + } std::cerr << unchecked(); } -bool FixtureLogObserver::onRecord(EventSeverity severity, Event event, int64_t code, - const std::string &msg) { +bool FixtureLog::Observer::onRecord(EventSeverity severity, + Event event, + int64_t code, + const std::string& msg) { messages.emplace_back(severity, event, code, msg); return true; } -size_t FixtureLogObserver::count(const LogMessage &message) const { +size_t FixtureLog::Observer::count(const Message& message) const { size_t message_count = 0; for (const auto& msg : messages) { if (msg == message) { @@ -37,8 +47,22 @@ size_t FixtureLogObserver::count(const LogMessage &message) const { return message_count; } -std::vector<FixtureLogObserver::LogMessage> FixtureLogObserver::unchecked() const { - std::vector<LogMessage> unchecked_messages; +FixtureLog::FixtureLog() : observer(new FixtureLogObserver(this)) { + Log::setObserver(std::unique_ptr<Log::Observer>(observer)); +} + +size_t FixtureLog::count(const FixtureLog::Message& message) const { + return observer ? observer->count(message) : 0; +} + +FixtureLog::~FixtureLog() { + if (observer) { + Log::removeObserver(); + } +} + +std::vector<FixtureLog::Message> FixtureLogObserver::unchecked() const { + std::vector<Message> unchecked_messages; for (const auto& msg : messages) { if (!msg.checked) { unchecked_messages.push_back(msg); @@ -48,19 +72,18 @@ std::vector<FixtureLogObserver::LogMessage> FixtureLogObserver::unchecked() cons return unchecked_messages; } -::std::ostream &operator<<(::std::ostream &os, - const std::vector<FixtureLogObserver::LogMessage> &messages) { +::std::ostream& operator<<(::std::ostream& os, const std::vector<FixtureLog::Message>& messages) { for (const auto& message : messages) { os << "- " << message; } return os; } -::std::ostream &operator<<(::std::ostream &os, const FixtureLogObserver::LogMessage &message) { +::std::ostream& operator<<(::std::ostream& os, const FixtureLog::Message& message) { os << "[\"" << message.severity << "\", \"" << message.event << "\""; os << ", " << message.code; os << ", \"" << message.msg << "\""; return os << "]" << std::endl; } -} +} // namespace mbgl diff --git a/test/fixtures/fixture_log_observer.hpp b/test/fixtures/fixture_log_observer.hpp index cadff84d31..ef4c81009b 100644 --- a/test/fixtures/fixture_log_observer.hpp +++ b/test/fixtures/fixture_log_observer.hpp @@ -9,12 +9,13 @@ namespace mbgl { -class FixtureLogObserver : public Log::Observer { +class FixtureLog { public: - struct LogMessage { - LogMessage(EventSeverity severity_, Event event_, int64_t code_, const std::string &msg_); + struct Message { + Message(EventSeverity severity_, Event event_, int64_t code_, const std::string &msg_); + Message(); - bool operator==(const LogMessage &rhs) const; + bool operator==(const Message& rhs) const; const EventSeverity severity; const Event event; @@ -24,22 +25,43 @@ public: mutable bool checked = false; }; - ~FixtureLogObserver(); + class Observer : public Log::Observer { + public: + using LogMessage = Message; - // Log::Observer implementation - virtual bool onRecord(EventSeverity severity, Event event, int64_t code, const std::string &msg) override; + Observer(FixtureLog* log = nullptr); + ~Observer(); - size_t count(const LogMessage &message) const; - std::vector<LogMessage> unchecked() const; + // Log::Observer implementation + virtual bool onRecord(EventSeverity severity, + Event event, + int64_t code, + const std::string& msg) override; -public: - std::vector<LogMessage> messages; + size_t count(const Message& message) const; + std::vector<Message> unchecked() const; + + public: + FixtureLog* log; + std::vector<Message> messages; + }; + + FixtureLog(); + + size_t count(const Message& message) const; + + ~FixtureLog(); + +private: + Observer* observer; }; ::std::ostream &operator<<(::std::ostream &os, - const std::vector<FixtureLogObserver::LogMessage> &messages); -::std::ostream &operator<<(::std::ostream &os, const FixtureLogObserver::LogMessage &message); + const std::vector<FixtureLog::Observer::LogMessage> &messages); +::std::ostream &operator<<(::std::ostream &os, const FixtureLog::Observer::LogMessage &message); + +using FixtureLogObserver = FixtureLog::Observer; -} +} // namespace mbgl #endif |