122 lines
4.2 KiB
C
122 lines
4.2 KiB
C
// Copyright 2020 The Pigweed Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
// use this file except in compliance with the License. You may obtain a copy of
|
|
// the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
// License for the specific language governing permissions and limitations under
|
|
// the License.
|
|
|
|
// This is test verifies that the logging backend:
|
|
//
|
|
// - Compiles as plain C
|
|
// - Runs when compiled as C
|
|
//
|
|
// Unfortunately, since we do not know where the log sink actually goes, the
|
|
// logging functionality itself is not verified beyond compiling and running.
|
|
|
|
#define PW_LOG_MODULE_NAME "CTS"
|
|
|
|
#include "pw_log/log.h"
|
|
|
|
#ifdef __cplusplus
|
|
#error "This file must be compiled as plain C to verify C compilation works."
|
|
#endif // __cplusplus
|
|
|
|
static void LoggingFromFunctionPlainC(void) { PW_LOG_INFO("From a function!"); }
|
|
|
|
static void CustomFormatStringTest(void);
|
|
|
|
void BasicLogTestPlainC(void) {
|
|
int n = 3;
|
|
|
|
// Debug level
|
|
PW_LOG_DEBUG("This log statement should be at DEBUG level; no args");
|
|
for (int i = 0; i < n; ++i) {
|
|
PW_LOG_DEBUG("Counting: %d", i);
|
|
}
|
|
PW_LOG_DEBUG("Here is a string: %s; with another string %s", "foo", "bar");
|
|
|
|
// Info level
|
|
PW_LOG_INFO("This log statement should be at INFO level; no args");
|
|
for (int i = 0; i < n; ++i) {
|
|
PW_LOG_INFO("Counting: %d", i);
|
|
}
|
|
PW_LOG_INFO("Here is a string: %s; with another string %s", "foo", "bar");
|
|
|
|
// Warn level
|
|
PW_LOG_WARN("This log statement should be at WARN level; no args");
|
|
for (int i = 0; i < n; ++i) {
|
|
PW_LOG_WARN("Counting: %d", i);
|
|
}
|
|
PW_LOG_WARN("Here is a string: %s; with another string %s", "foo", "bar");
|
|
|
|
// Error level.
|
|
PW_LOG_ERROR("This log statement should be at ERROR level; no args");
|
|
for (int i = 0; i < n; ++i) {
|
|
PW_LOG_ERROR("Counting: %d", i);
|
|
}
|
|
PW_LOG_ERROR("Here is a string: %s; with another string %s", "foo", "bar");
|
|
|
|
// Critical level.
|
|
PW_LOG_CRITICAL("This log is the last one; device should reboot");
|
|
|
|
// Core log macro, with manually specified level and flags.
|
|
PW_LOG(PW_LOG_LEVEL_DEBUG, 0, "A manual DEBUG-level message");
|
|
PW_LOG(PW_LOG_LEVEL_DEBUG, 1, "A manual DEBUG-level message; with a flag");
|
|
|
|
PW_LOG(PW_LOG_LEVEL_INFO, 0, "A manual INFO-level message");
|
|
PW_LOG(PW_LOG_LEVEL_INFO, 1, "A manual INFO-level message; with a flag");
|
|
|
|
PW_LOG(PW_LOG_LEVEL_WARN, 0, "A manual WARN-level message");
|
|
PW_LOG(PW_LOG_LEVEL_WARN, 1, "A manual WARN-level message; with a flag");
|
|
|
|
PW_LOG(PW_LOG_LEVEL_ERROR, 0, "A manual ERROR-level message");
|
|
PW_LOG(PW_LOG_LEVEL_ERROR, 1, "A manual ERROR-level message; with a flag");
|
|
|
|
PW_LOG(PW_LOG_LEVEL_CRITICAL, 0, "A manual CRITICAL-level message");
|
|
PW_LOG(
|
|
PW_LOG_LEVEL_CRITICAL, 1, "A manual CRITICAL-level message; with a flag");
|
|
|
|
// Log levels other than the standard ones work; what each backend does is
|
|
// implementation defined.
|
|
PW_LOG(0, PW_LOG_FLAGS, "Custom log level: 0");
|
|
PW_LOG(1, PW_LOG_FLAGS, "Custom log level: 1");
|
|
PW_LOG(2, PW_LOG_FLAGS, "Custom log level: 2");
|
|
PW_LOG(3, PW_LOG_FLAGS, "Custom log level: 3");
|
|
PW_LOG(100, PW_LOG_FLAGS, "Custom log level: 100");
|
|
|
|
// Logging from a function.
|
|
LoggingFromFunctionPlainC();
|
|
|
|
// Changing the module name mid-file.
|
|
#undef PW_LOG_MODULE_NAME
|
|
#define PW_LOG_MODULE_NAME "XYZ"
|
|
PW_LOG_INFO("This has a custom module name");
|
|
PW_LOG_INFO("So does this");
|
|
|
|
CustomFormatStringTest();
|
|
}
|
|
|
|
#undef PW_LOG
|
|
#define PW_LOG(level, flags, message, ...) \
|
|
DoNothingFakeFunction("%d/%d/%d: incoming transmission [" message "]", \
|
|
level, \
|
|
__LINE__, \
|
|
flags PW_COMMA_ARGS(__VA_ARGS__))
|
|
|
|
static void DoNothingFakeFunction(const char* f, ...) PW_PRINTF_FORMAT(1, 2);
|
|
|
|
static void DoNothingFakeFunction(const char* f, ...) { (void)f; }
|
|
|
|
static void CustomFormatStringTest(void) {
|
|
PW_LOG_DEBUG("Abc");
|
|
PW_LOG_INFO("Abc %d", 123);
|
|
PW_LOG_WARN("Abc %d %s", 123, "four");
|
|
}
|