29#include <gmock/gmock.h>
30#include <gtest/gtest.h>
68 ASSERT_EQ(
gtestLogOutput.str(),
"File:10: test: sample message\n\n");
74 "File:10: test: sample message\nwith \n3 lines\n");
85 ASSERT_EQ(
gtestLogOutput.str(),
"File:10: test: sample message\n");
89 (
const char *)
"sample %s with %d arguments\n",
"message", 2);
91 "File:10: test: sample message with 2 arguments\n");
101 ASSERT_EQ(
gtestLogOutput.str(),
"File:10: test: sample message\n");
105 std::string(
"sample %s with %d arguments\n"),
"message", 2);
107 "File:10: test: sample message with 2 arguments\n");
117 ASSERT_EQ(
gtestLogOutput.str(),
"File:10: test: <extra arg>% message\n");
123 "File:10: test: sample messa<extra arg>%ge\n");
133 ASSERT_EQ(
gtestLogOutput.str(),
"File:10: test: <extra arg>% message\n");
139 "File:10: test: sample messa<extra arg>%ge\n");
145 class DisabledLogger :
public Logger
148 DisabledLogger(
const char *prefix)
169 ASSERT_EQ(
gtestLogOutput.str(),
"File:10: test: message\nExtra log 1\n");
178 "File:10: test: message\nExtra log 1\nExtra log 2\nExtra log 3\n");
245 testing::HasSubstr(
"File:10: fatal: message\nMemory Usage:"));
265 ::testing::HasSubstr(
"File:10: panic: message\nMemory Usage:"));
279 ASSERT_THAT(
gtestLogOutput.str(), ::testing::HasSubstr(
"test: message\n"));
283 ASSERT_THAT(
gtestLogOutput.str(), ::testing::HasSubstr(
"test: message\n"));
288 ::testing::HasSubstr(
"test: sample message\n\n"));
293 ::testing::HasSubstr(
"test: sample message\nwith \n3 lines\n"));
296 base_message(logger,
"sample %s with %d arguments\n",
"message", 2);
298 ::testing::HasSubstr(
"test: sample message with 2 arguments\n"));
306 for (
int i = 0;
i < 10;
i++) {
311 ::testing::HasSubstr(
"test: message\n"));
326 ::testing::HasSubstr(
"warn: message\n"));
331 ::testing::HasSubstr(
"warn: message\n"));
334 warn(
"sample message\n\n");
336 ::testing::HasSubstr(
"warn: sample message\n\n"));
339 warn(
"sample message\nwith \n3 lines");
341 ::testing::HasSubstr(
"warn: sample message\nwith \n3 lines\n"));
344 warn(
"sample %s with %d arguments\n",
"message", 2);
346 ::testing::HasSubstr(
"warn: sample message with 2 arguments\n"));
357 ::testing::HasSubstr(
"info: message\n"));
362 ::testing::HasSubstr(
"info: message\n"));
365 inform(
"sample message\n\n");
367 ::testing::HasSubstr(
"info: sample message\n\n"));
370 inform(
"sample message\nwith \n3 lines");
372 ::testing::HasSubstr(
"info: sample message\nwith \n3 lines\n"));
375 inform(
"sample %s with %d arguments\n",
"message", 2);
377 ::testing::HasSubstr(
"info: sample message with 2 arguments\n"));
388 ::testing::HasSubstr(
"hack: message\n"));
393 ::testing::HasSubstr(
"hack: message\n"));
396 hack(
"sample message\n\n");
398 ::testing::HasSubstr(
"hack: sample message\n\n"));
401 hack(
"sample message\nwith \n3 lines");
403 ::testing::HasSubstr(
"hack: sample message\nwith \n3 lines\n"));
406 hack(
"sample %s with %d arguments\n",
"message", 2);
408 ::testing::HasSubstr(
"hack: sample message with 2 arguments\n"));
414 for (
int i = 0;
i < 10;
i++) {
419 ::testing::HasSubstr(
"warn: message\n"));
429 for (
int i = 0;
i < 10;
i++) {
434 ::testing::HasSubstr(
"info: message\n"));
444 for (
int i = 0;
i < 10;
i++) {
449 ::testing::HasSubstr(
"hack: message\n"));
462 ::testing::HasSubstr(
"warn: message\n"));
472 for (
int i = 0;
i < 10;
i++) {
477 ::testing::HasSubstr(
"warn: message\n"));
485TEST(LoggingDeathTest, EmptyPrefix)
488 GTEST_SKIP() <<
"Skipping as assertions are "
489 "stripped out of fast builds";
491 ASSERT_DEATH(
Logger(
nullptr),
"");
495TEST(LoggingDeathTest, ExitHelper)
497 ASSERT_DEATH(
Logger(
"test: ").exit_helper(),
"");
501TEST(LoggingDeathTest, WarnLoggerExitHelper)
507TEST(LoggingDeathTest, InfoLoggerExitHelper)
513TEST(LoggingDeathTest, HackLoggerExitHelper)
519TEST(LoggingDeathTest, FatalLoggerExitHelper)
525TEST(LoggingDeathTest, PanicLoggerExitHelper)
531TEST(LoggingDeathTest, ExitMessage)
534 ASSERT_DEATH(
exit_message(logger,
"message\n"),
"test: message\n");
540 ASSERT_DEATH(
panic(
"message\n"),
541 ::testing::HasSubstr(
"panic: message\nMemory Usage:"));
547 ASSERT_DEATH(
fatal(
"message\n"),
548 ::testing::HasSubstr(
"fatal: message\nMemory Usage:"));
555 ASSERT_DEATH(
panic_if(
true,
"message\n"), ::testing::HasSubstr(
556 "panic: panic condition true occurred: message\nMemory Usage:"));
563 ASSERT_DEATH(
fatal_if(
true,
"message\n"), ::testing::HasSubstr(
564 "fatal: fatal condition true occurred: message\nMemory Usage:"));
568TEST(LoggingDeathTest, gem5Assert)
571 GTEST_SKIP() <<
"Skipping as assertions are "
572 "stripped out of fast builds";
575 ASSERT_DEATH(
gem5_assert(
false,
"message\n"), ::testing::HasSubstr(
576 "panic: assert(false) failed: message\nMemory Usage:"));
577 ASSERT_DEATH(
gem5_assert(
false,
"%s, %s!\n",
"Hello",
"World"),
578 ::testing::HasSubstr(
579 "panic: assert(false) failed: Hello, World!\nMemory Usage:"));
581 ASSERT_DEATH(
gem5_assert(
false), ::testing::HasSubstr(
582 "panic: assert(false) failed\nMemory Usage:"));
Temporarily redirects cerr to gtestLogOutput.
std::streambuf * old
Used to restore cerr's streambuf.
static Logger & getWarn()
void registerExtraLog(std::function< std::string()> cb)
Register callback to generate extra log.
Logger(const char *prefix)
static Logger & getInfo()
static Logger & getHack()
void print(const Loc &loc, const char *format, const Args &...args)
static Logger & getPanic()
Get a Logger for the specified type of message.
static Logger & getFatal()
static void setLevel(LogLevel ll)
#define panic(...)
This implements a cprintf based panic() function.
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
#define gem5_assert(cond,...)
The assert macro will function like a normal assert, but will use panic instead of straight abort().
#define warn_if_once(cond,...)
#define fatal(...)
This implements a cprintf based fatal() function.
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
#define base_message_once(logger,...)
#define exit_message(logger,...)
#define base_message(logger,...)
#define warn_if(cond,...)
Conditional warning macro that checks the supplied condition and only prints a warning if the conditi...
TEST_F(LoggingFixture, BasicPrint)
Test the most basic print.
TEST(LoggingDeathTest, EmptyPrefix)
Test that a logger cannot be created with an empty prefix.
Copyright (c) 2024 Arm Limited All rights reserved.
thread_local GTestLogOutput gtestLogOutput