5 #include <gtest/gtest.h> 12 std::queue<uavcan::protocol::debug::LogMessage>
msgs;
21 void log(
const uavcan::protocol::debug::LogMessage& message)
24 std::cout << message << std::endl;
27 uavcan::protocol::debug::LogMessage
pop()
31 std::cout <<
"LogSink is empty" << std::endl;
34 const uavcan::protocol::debug::LogMessage m = msgs.front();
43 std::cout <<
"LogSink is empty" << std::endl;
46 const uavcan::protocol::debug::LogMessage m =
pop();
48 level == m.level.value &&
67 ASSERT_GT(0, logger.
logError(
"foo",
"Error (fail - type is not registered)"));
68 ASSERT_EQ(0, logger.
logDebug(
"foo",
"Debug (ignored - low logging level)"));
78 ASSERT_LE(0, log_sub.
start());
81 ASSERT_EQ(0, logger.
logDebug(
"foo",
"Debug (ignored due to low logging level)"));
82 ASSERT_TRUE(sink.msgs.empty());
84 sink.level = uavcan::protocol::debug::LogLevel::DEBUG;
85 ASSERT_EQ(0, logger.
logDebug(
"foo",
"Debug (sink only)"));
86 ASSERT_TRUE(sink.popMatchByLevelAndText(uavcan::protocol::debug::LogLevel::DEBUG,
"foo",
"Debug (sink only)"));
88 ASSERT_LE(0, logger.
logError(
"foo",
"Error"));
95 logger.
setLevel(uavcan::protocol::debug::LogLevel::DEBUG);
96 ASSERT_LE(0, logger.
logWarning(
"foo",
"Warning"));
98 ASSERT_EQ(log_sub.
collector.
msg->level.value, uavcan::protocol::debug::LogLevel::WARNING);
102 ASSERT_LE(0, logger.
logInfo(
"foo",
"Info"));
104 ASSERT_EQ(log_sub.
collector.
msg->level.value, uavcan::protocol::debug::LogLevel::INFO);
108 ASSERT_LE(0, logger.
logDebug(
"foo",
"Debug"));
110 ASSERT_EQ(log_sub.
collector.
msg->level.value, uavcan::protocol::debug::LogLevel::DEBUG);
115 ASSERT_TRUE(sink.popMatchByLevelAndText(uavcan::protocol::debug::LogLevel::WARNING,
"foo",
"Warning"));
116 ASSERT_TRUE(sink.popMatchByLevelAndText(uavcan::protocol::debug::LogLevel::INFO,
"foo",
"Info"));
117 ASSERT_TRUE(sink.popMatchByLevelAndText(uavcan::protocol::debug::LogLevel::DEBUG,
"foo",
"Debug"));
120 #if !defined(UAVCAN_CPP_VERSION) || !defined(UAVCAN_CPP11) 121 # error UAVCAN_CPP_VERSION 124 #if UAVCAN_CPP_VERSION >= UAVCAN_CPP11 131 logger.
setLevel(uavcan::protocol::debug::LogLevel::DEBUG);
134 ASSERT_LE(0, log_sub.
start());
136 ASSERT_LE(0, logger.
logWarning(
"foo",
"char='%*', %* is %*",
'$',
"double", 12.34));
139 ASSERT_EQ(log_sub.
collector.
msg->level.value, uavcan::protocol::debug::LogLevel::WARNING);
141 ASSERT_EQ(log_sub.
collector.
msg->text,
"char='$', double is 12.34");
void setExternalSink(ILogSink *sink)
int logDebug(const char *source, const char *format, Args... args) UAVCAN_NOEXCEPT
int logWarning(const char *source, const char *format, Args... args) UAVCAN_NOEXCEPT
ILogSink * getExternalSink() const
StorageType< typename protocol::debug::LogLevel::FieldTypes::value >::Type LogLevel
LogLevel getLogLevel() const
bool popMatchByLevelAndText(int level, const std::string &source, const std::string &text)
void log(const uavcan::protocol::debug::LogMessage &message)
int logError(const char *source, const char *format, Args... args) UAVCAN_NOEXCEPT
int logInfo(const char *source, const char *format, Args... args) UAVCAN_NOEXCEPT
void setLevel(LogLevel level)
static GlobalDataTypeRegistry & instance()
std::queue< uavcan::protocol::debug::LogMessage > msgs
std::unique_ptr< DataType > msg
uavcan::protocol::debug::LogMessage pop()
static MonotonicDuration fromMSec(int64_t ms)
int spinBoth(uavcan::MonotonicDuration duration)
LogLevel getLevel() const