add RAII-style FixtureLog
This commit is contained in:
57
test/fixtures/fixture_log_observer.cpp
vendored
57
test/fixtures/fixture_log_observer.cpp
vendored
@@ -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
|
||||
|
||||
50
test/fixtures/fixture_log_observer.hpp
vendored
50
test/fixtures/fixture_log_observer.hpp
vendored
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user