diff options
| author | Edwin Mons <edwin.mons@isode.com> | 2019-11-13 12:03:22 (GMT) |
|---|---|---|
| committer | Edwin Mons <edwin.mons@isode.com> | 2019-11-13 12:46:21 (GMT) |
| commit | d640ec248ca8bf86a03007a0f8df352df696cf92 (patch) | |
| tree | 049bda0ad8e3fe50eda047b5e8086fd903cb5afe /Swiften/Base/UnitTest/LogTest.cpp | |
| parent | 959a42d21fd70ea002da9afa7482194e8b6097e1 (diff) | |
| download | swift-d640ec248ca8bf86a03007a0f8df352df696cf92.zip swift-d640ec248ca8bf86a03007a0f8df352df696cf92.tar.bz2 | |
Support application-supplied logging
This adds a method to set a logging callback. If such a callback is
set, all SWIFT_LOG calls will invoke this callback instead of writing to
either stderr or the swift logging file.
Test-Information:
Updated unit tests pass.
Checked that logs generated by Swift and Sluift (which do not set the
callback) resulted in logging in the expected location.
Change-Id: I0eb2a1057aa77839e1b8d5f320205eb9d5fdc253
Diffstat (limited to 'Swiften/Base/UnitTest/LogTest.cpp')
| -rw-r--r-- | Swiften/Base/UnitTest/LogTest.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Swiften/Base/UnitTest/LogTest.cpp b/Swiften/Base/UnitTest/LogTest.cpp new file mode 100644 index 0000000..5d710db --- /dev/null +++ b/Swiften/Base/UnitTest/LogTest.cpp | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2019 Isode Limited. | ||
| 3 | * All rights reserved. | ||
| 4 | * See the COPYING file for more information. | ||
| 5 | */ | ||
| 6 | |||
| 7 | #include <vector> | ||
| 8 | |||
| 9 | #include <boost/algorithm/string/predicate.hpp> | ||
| 10 | |||
| 11 | #include <gtest/gtest.h> | ||
| 12 | |||
| 13 | #include <Swiften/Base/Log.h> | ||
| 14 | |||
| 15 | using namespace Swift; | ||
| 16 | |||
| 17 | struct LogEntry { | ||
| 18 | LogEntry(Log::Severity severity, std::string file, int line, std::string function, std::string message) : severity(severity), file(std::move(file)), line(line), function(std::move(function)), message(std::move(message)) {} | ||
| 19 | |||
| 20 | Log::Severity severity; | ||
| 21 | std::string file; | ||
| 22 | int line; | ||
| 23 | std::string function; | ||
| 24 | std::string message; | ||
| 25 | }; | ||
| 26 | |||
| 27 | // Helper class to set the logging callback. Using this class to set it will ensure the | ||
| 28 | // logCallback is reset to empty (its default state) after each test. | ||
| 29 | class LogCallbackSetter { | ||
| 30 | public: | ||
| 31 | LogCallbackSetter(Log::Callback callback) { | ||
| 32 | Log::setLogCallback(callback); | ||
| 33 | } | ||
| 34 | ~LogCallbackSetter() { | ||
| 35 | Log::setLogCallback({}); | ||
| 36 | } | ||
| 37 | }; | ||
| 38 | |||
| 39 | TEST(LogTest, testCallback) { | ||
| 40 | std::vector<LogEntry> logEntries; | ||
| 41 | LogCallbackSetter callbackSetter = {[&](Log::Severity severity, const std::string& file, int line, const std::string& function, const std::string& message) { | ||
| 42 | logEntries.emplace_back(severity, file, line, function, message); | ||
| 43 | }}; | ||
| 44 | |||
| 45 | SWIFT_LOG(error) << "An error"; | ||
| 46 | ASSERT_EQ(1, logEntries.size()); | ||
| 47 | ASSERT_EQ(Log::error, logEntries[0].severity); | ||
| 48 | ASSERT_EQ("An error", logEntries[0].message); | ||
| 49 | } | ||
Swift