From f1f711963b8e5f0b2b5a9d80a522cbd616a153a9 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 4 Jun 2022 21:15:40 -0400 Subject: Add and test QPDFLogger class --- libtests/logger.cc | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 libtests/logger.cc (limited to 'libtests/logger.cc') diff --git a/libtests/logger.cc b/libtests/logger.cc new file mode 100644 index 00000000..f10319f6 --- /dev/null +++ b/libtests/logger.cc @@ -0,0 +1,109 @@ +#include + +#include +#include +#include + +static void +test1() +{ + // Standard behavior + + auto logger = QPDFLogger::defaultLogger(); + + logger->info("info to stdout\n"); + logger->warn("warn to stderr\n"); + logger->error("error to stderr\n"); + assert(logger->getSave(true) == nullptr); + try { + logger->getSave(); + assert(false); + } catch (std::logic_error& e) { + *(logger->getInfo()) << "getSave exception: " << e.what() << "\n"; + } + try { + logger->saveToStandardOutput(); + assert(false); + } catch (std::logic_error& e) { + *(logger->getInfo()) + << "saveToStandardOutput exception: " << e.what() << "\n"; + } + logger->setWarn(logger->discard()); + logger->warn("warning not seen\n"); + logger->setWarn(nullptr); + logger->warn("restored warning to stderr\n"); +} + +static void +test2() +{ + // First call saveToStandardOutput. Then use info, which then to + // go stderr. + QPDFLogger l; + l.saveToStandardOutput(); + l.info(std::string("info to stderr\n")); + *(l.getSave()) << "save to stdout\n"; + l.setInfo(nullptr); + l.info("info still to stderr\n"); + l.setSave(nullptr); + l.setInfo(nullptr); + l.info("info back to stdout\n"); +} + +static void +test3() +{ + // Error/warning + QPDFLogger l; + + // Warning follows error when error is set explicitly. + std::string errors; + auto pl_error = std::make_shared("errors", nullptr, errors); + l.setError(pl_error); + l.warn("warn follows error\n"); + assert(errors == "warn follows error\n"); + l.error("error too\n"); + assert(errors == "warn follows error\nerror too\n"); + + // Set warnings -- now they're separate + std::string warnings; + auto pl_warn = std::make_shared("warnings", nullptr, warnings); + l.setWarn(pl_warn); + l.warn(std::string("warning now separate\n")); + l.error(std::string("new error\n")); + assert(warnings == "warning now separate\n"); + assert(errors == "warn follows error\nerror too\nnew error\n"); + std::string errors2; + pl_error = std::make_shared("errors", nullptr, errors2); + l.setError(pl_error); + l.warn("new warning\n"); + l.error("another new error\n"); + assert(warnings == "warning now separate\nnew warning\n"); + assert(errors == "warn follows error\nerror too\nnew error\n"); + assert(errors2 == "another new error\n"); + + // Restore warnings to default -- follows error again + l.setWarn(nullptr); + l.warn("warning 3\n"); + l.error("error 3\n"); + assert(warnings == "warning now separate\nnew warning\n"); + assert(errors == "warn follows error\nerror too\nnew error\n"); + assert(errors2 == "another new error\nwarning 3\nerror 3\n"); + + // Restore everything to default + l.setInfo(nullptr); + l.setWarn(nullptr); + l.setError(nullptr); + l.info("after reset, info to stdout\n"); + l.warn("after reset, warn to stderr\n"); + l.error("after reset, error to stderr\n"); +} + +int +main() +{ + test1(); + test2(); + test3(); + return 0; +} -- cgit v1.2.3-54-g00ecf