diff options
Diffstat (limited to 'test/fixtures/fixture_log_observer.cpp')
-rw-r--r-- | test/fixtures/fixture_log_observer.cpp | 80 |
1 files changed, 57 insertions, 23 deletions
diff --git a/test/fixtures/fixture_log_observer.cpp b/test/fixtures/fixture_log_observer.cpp index b3b8e56fdb..a6e89e2e79 100644 --- a/test/fixtures/fixture_log_observer.cpp +++ b/test/fixtures/fixture_log_observer.cpp @@ -3,33 +3,50 @@ 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_) { } -FixtureLogObserver::LogMessage::LogMessage() : severity(), event(), code(), msg() { +bool FixtureLog::Message::operator==(const Message& rhs) const { + return severity == rhs.severity && event == rhs.event && code == rhs.code && msg == rhs.msg; } -bool FixtureLogObserver::LogMessage::operator==(const LogMessage &rhs) const { - return (!severity || !rhs.severity || severity.get() == rhs.severity.get()) && - (!event || !rhs.event || event.get() == rhs.event.get()) && - (!code || !rhs.code || code.get() == rhs.code.get()) && - (!msg || !rhs.msg || msg.get() == rhs.msg.get()); +FixtureLog::Message::Message() : severity(), event(), code(), msg() { } -FixtureLogObserver::~FixtureLogObserver() { +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) { + std::lock_guard<std::mutex> lock(messagesMutex); + messages.emplace_back(severity, event, code, msg); return true; } -size_t FixtureLogObserver::count(const LogMessage &message) const { +bool FixtureLog::Observer::empty() const { + std::lock_guard<std::mutex> lock(messagesMutex); + + return messages.empty(); +} + +size_t FixtureLog::Observer::count(const Message& message) const { + std::lock_guard<std::mutex> lock(messagesMutex); + size_t message_count = 0; for (const auto& msg : messages) { if (msg == message) { @@ -40,8 +57,28 @@ 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)); +} + +bool FixtureLog::empty() const { + return observer ? observer->empty() : true; +} + +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::lock_guard<std::mutex> lock(messagesMutex); + + std::vector<Message> unchecked_messages; for (const auto& msg : messages) { if (!msg.checked) { unchecked_messages.push_back(msg); @@ -51,21 +88,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) { - os << "[\"" << message.severity.get() << "\", \"" << message.event.get() << "\""; - if (message.code) - os << ", " << message.code.get(); - if (message.msg) - os << ", \"" << message.msg.get() << "\""; +::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 |