aboutsummaryrefslogtreecommitdiffstats
path: root/libtests/logger.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-06-05 03:15:40 +0200
committerJay Berkenbilt <ejb@ql.org>2022-06-18 15:02:55 +0200
commitf1f711963b8e5f0b2b5a9d80a522cbd616a153a9 (patch)
tree9c5bc0bcf39cd6854786f60e68da42ddf90c3f99 /libtests/logger.cc
parentf588d74140b2a86026929aa401c9852ec215d4af (diff)
downloadqpdf-f1f711963b8e5f0b2b5a9d80a522cbd616a153a9.tar.zst
Add and test QPDFLogger class
Diffstat (limited to 'libtests/logger.cc')
-rw-r--r--libtests/logger.cc109
1 files changed, 109 insertions, 0 deletions
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 <qpdf/assert_test.h>
+
+#include <qpdf/Pl_String.hh>
+#include <qpdf/QPDFLogger.hh>
+#include <stdexcept>
+
+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<Pl_String>("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<Pl_String>("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<Pl_String>("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;
+}