diff options
-rw-r--r-- | CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/core/common/Logger.cpp | 143 | ||||
-rw-r--r-- | src/core/common/Logger.hpp | 61 | ||||
-rw-r--r-- | src/core/frontend/Terminal.cpp (renamed from src/core/common/Terminal.cpp) | 0 | ||||
-rw-r--r-- | src/core/frontend/Terminal.hpp (renamed from src/core/common/Terminal.hpp) | 0 | ||||
-rw-r--r-- | src/core/frontend/TerminalLogger.cpp | 151 | ||||
-rw-r--r-- | src/core/frontend/TerminalLogger.hpp | 79 | ||||
-rw-r--r-- | src/core/resource/ResourceManager.cpp | 2 | ||||
-rw-r--r-- | test/core/common/ArgumentTest.cpp | 3 | ||||
-rw-r--r-- | test/core/common/LoggerTest.cpp | 81 | ||||
-rw-r--r-- | test/core/common/VariantReaderTest.cpp | 1 | ||||
-rw-r--r-- | test/core/frontend/TerminalLoggerTest.cpp | 109 | ||||
-rw-r--r-- | test/core/model/DocumentTest.cpp | 2 | ||||
-rw-r--r-- | test/core/model/DomainTest.cpp | 1 | ||||
-rw-r--r-- | test/core/model/TypesystemTest.cpp | 1 | ||||
-rw-r--r-- | test/plugins/css/CSSParserTest.cpp | 6 | ||||
-rw-r--r-- | test/plugins/html/DemoOutputTest.cpp | 2 | ||||
-rw-r--r-- | test/plugins/xml/XmlParserTest.cpp | 1 |
18 files changed, 372 insertions, 275 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ba997d..f3e89ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,12 +131,13 @@ ADD_LIBRARY(ousia_core src/core/common/Rtti src/core/common/RttiBuilder src/core/common/SourceContextReader - src/core/common/Terminal src/core/common/Utils src/core/common/Variant src/core/common/VariantConverter src/core/common/VariantReader src/core/common/VariantWriter + src/core/frontend/Terminal + src/core/frontend/TerminalLogger src/core/managed/Events src/core/managed/Managed src/core/managed/Manager @@ -227,6 +228,7 @@ IF(TEST) test/core/common/VariantWriterTest test/core/common/VariantTest test/core/common/UtilsTest + test/core/frontend/TerminalLoggerTest test/core/managed/ManagedContainerTest test/core/managed/ManagedTest test/core/managed/ManagerTest diff --git a/src/core/common/Logger.cpp b/src/core/common/Logger.cpp index aa61e6a..54156f2 100644 --- a/src/core/common/Logger.cpp +++ b/src/core/common/Logger.cpp @@ -20,8 +20,6 @@ #include <sstream> #include "Logger.hpp" -#include "Terminal.hpp" -#include "Utils.hpp" namespace ousia { @@ -118,49 +116,49 @@ void LoggerFork::commit() purge(); } -/* Class ScopedLogger */ +/* Class GuardedLogger */ -ScopedLogger::ScopedLogger(Logger &parent, SourceLocation loc) +GuardedLogger::GuardedLogger(Logger &parent, SourceLocation loc) : parent(parent), depth(0) { pushDefaultLocation(loc); } -ScopedLogger::~ScopedLogger() +GuardedLogger::~GuardedLogger() { while (depth > 0) { popDefaultLocation(); } } -void ScopedLogger::processMessage(const Message &msg) +void GuardedLogger::processMessage(const Message &msg) { parent.processMessage(msg); } -bool ScopedLogger::filterMessage(const Message &msg) +bool GuardedLogger::filterMessage(const Message &msg) { return parent.filterMessage(msg); } -void ScopedLogger::processPushDefaultLocation(const SourceLocation &loc) +void GuardedLogger::processPushDefaultLocation(const SourceLocation &loc) { parent.processPushDefaultLocation(loc); depth++; } -void ScopedLogger::processPopDefaultLocation() +void GuardedLogger::processPopDefaultLocation() { depth--; parent.processPopDefaultLocation(); } -void ScopedLogger::processSetDefaultLocation(const SourceLocation &loc) +void GuardedLogger::processSetDefaultLocation(const SourceLocation &loc) { parent.processSetDefaultLocation(loc); } -void ScopedLogger::processSetSourceContextCallback( +void GuardedLogger::processSetSourceContextCallback( SourceContextCallback sourceContextCallback) { parent.processSetSourceContextCallback(sourceContextCallback); @@ -265,128 +263,5 @@ bool ConcreteLogger::hasFatalError() return getSeverityCount(Severity::FATAL_ERROR) > 0; } -/* Class TerminalLogger */ - -void TerminalLogger::processMessage(const Message &msg) -{ - Terminal t(useColor); - - // Fetch filename, position and context - const SourceContext ctx = messageContext(msg); - - // Print the file name - if (ctx.hasFile()) { - os << t.bright() << ctx.filename << t.reset(); - } - - // Print line and column number - if (ctx.hasLine()) { - if (ctx.hasFile()) { - os << ':'; - } - os << t.bright() << ctx.startLine << t.reset(); - if (ctx.hasColumn()) { - os << ':' << ctx.startColumn; - } - } - - // Print the optional seperator - if (ctx.hasFile() || ctx.hasLine()) { - os << ": "; - } - - // Print the severity - switch (msg.severity) { - case Severity::DEBUG: - break; - case Severity::NOTE: - os << t.color(Terminal::CYAN, true) << "note: "; - break; - case Severity::WARNING: - os << t.color(Terminal::MAGENTA, true) << "warning: "; - break; - case Severity::ERROR: - os << t.color(Terminal::RED, true) << "error: "; - break; - case Severity::FATAL_ERROR: - os << t.color(Terminal::RED, true) << "fatal error: "; - break; - } - os << t.reset(); - - // Print the actual message - os << msg.msg << std::endl; - - // Print the error message context if available - if (ctx.hasText()) { - // Iterate over each line in the text - std::vector<std::string> lines = Utils::split(ctx.text, '\n'); - - const size_t relLen = ctx.relLen ? ctx.relLen : 1; - const size_t relPos = ctx.relPos; - const size_t pstart = relPos; - const size_t pend = relPos + relLen; - - size_t lstart = 0; - size_t lend = 0; - for (size_t n = 0; n < lines.size(); n++) { - bool firstLine = n == 0; - bool lastLine = n == lines.size() - 1; - - // Indicate truncation and indent non-first lines - if (ctx.truncatedStart && firstLine) { - os << "[...] "; - } - if (!firstLine) { - os << "\t"; - } - - // Print the actual line - os << lines[n]; - - // Indicate truncation - if (ctx.truncatedEnd && lastLine) { - os << " [...]"; - } - os << std::endl; - - // Repeat truncation or indendation space in the next line - if (ctx.truncatedStart && firstLine) { - os << " "; - } - if (!firstLine) { - os << "\t"; - } - - // Print the position indicators - lend = lastLine ? pend : lstart + lines[n].size(); - for (size_t i = lstart; i < lend; i++) { - if (i >= pstart && i < pend) { - os << t.color(Terminal::GREEN); - for (; i < std::min(lend, pend); i++) { - if (relLen == 1) { - os << '^'; - } else { - os << '~'; - } - if (i < ctx.text.size() && ctx.text[i] == '\t') { - os << '\t'; - } - } - os << t.reset(); - } else { - if (i < ctx.text.size() && ctx.text[i] == '\t') { - os << '\t'; - } else { - os << ' '; - } - } - } - os << std::endl; - - lstart = lend; - } - } -} } diff --git a/src/core/common/Logger.hpp b/src/core/common/Logger.hpp index 85b1bb1..afe58be 100644 --- a/src/core/common/Logger.hpp +++ b/src/core/common/Logger.hpp @@ -19,9 +19,8 @@ /** * @file Logger.hpp * - * Contains classes for logging messages in Ousía. Provides a generic Logger - * class, and TerminalLogger, an extension of Logger which logs do an output - * stream. + * Contains classes for logging messages in Ousía. Provides various base Logger + * classes that allow to Fork logger instances or to create a GuardedLogger. * * @author Andreas Stöckel (astoecke@techfak.uni-bielefeld.de) */ @@ -30,7 +29,6 @@ #define _OUSIA_LOGGER_HPP_ #include <cstdint> -#include <ostream> #include <string> #include <vector> @@ -109,7 +107,7 @@ inline MessageMode operator|(MessageMode a, MessageMode b) // Forward declaration class LoggerFork; -class ScopedLogger; +class GuardedLogger; /** * The Logger class is the base class the individual logging systems should @@ -123,7 +121,7 @@ class ScopedLogger; class Logger { public: friend LoggerFork; - friend ScopedLogger; + friend GuardedLogger; /** * The message struct represents a single log message and all information @@ -611,12 +609,12 @@ public: }; /** - * The ScopedLogger class can be used to automatically pop any pushed file from + * The GuardedLogger class can be used to automatically pop any pushed file from * the File stack maintained by a Logger class (in a RAII manner). This * simplifies managing pushing and popping files in case there are multiple * return calls or exceptions thrown. */ -class ScopedLogger : public Logger { +class GuardedLogger : public Logger { private: /** * Reference to the parent logger instance. @@ -668,20 +666,20 @@ protected: public: /** - * Constructor of the ScopedLogger class, pushes a first file instance onto + * Constructor of the GuardedLogger class, pushes a first file instance onto * the file stack. * * @param parent is the parent logger instance to which all calls should * be relayed. * @param loc specifies the first source location. */ - ScopedLogger(Logger &parent, SourceLocation loc = SourceLocation{}); + GuardedLogger(Logger &parent, SourceLocation loc = SourceLocation{}); /** - * Destructor of the ScopedLogger class, automatically unwinds the file + * Destructor of the GuardedLogger class, automatically unwinds the file * stack. */ - ~ScopedLogger(); + ~GuardedLogger(); }; /** @@ -818,45 +816,6 @@ public: bool hasFatalError(); }; -/** - * Class extending the Logger class and printing the log messages to the - * given - * stream. - */ -class TerminalLogger : public ConcreteLogger { -private: - /** - * Reference to the target output stream. - */ - std::ostream &os; - - /** - * If true, the TerminalLogger will use colors to make the log messages - * prettier. - */ - bool useColor; - -protected: - void processMessage(const Message &msg) override; - -public: - /** - * Constructor of the TerminalLogger class. - * - * @param os is the output stream the log messages should be logged to. - * Should be set to std::cerr in most cases. - * @param useColor if true, the TerminalLogger class will do its best to - * use ANSI/VT100 control sequences for colored log messages. - * @param minSeverity is the minimum severity below which log messages - *are - * discarded. - */ - TerminalLogger(std::ostream &os, bool useColor = false, - Severity minSeverity = DEFAULT_MIN_SEVERITY) - : ConcreteLogger(minSeverity), os(os), useColor(useColor) - { - } -}; } #endif /* _OUSIA_LOGGER_HPP_ */ diff --git a/src/core/common/Terminal.cpp b/src/core/frontend/Terminal.cpp index 447e595..447e595 100644 --- a/src/core/common/Terminal.cpp +++ b/src/core/frontend/Terminal.cpp diff --git a/src/core/common/Terminal.hpp b/src/core/frontend/Terminal.hpp index 730853d..730853d 100644 --- a/src/core/common/Terminal.hpp +++ b/src/core/frontend/Terminal.hpp diff --git a/src/core/frontend/TerminalLogger.cpp b/src/core/frontend/TerminalLogger.cpp new file mode 100644 index 0000000..fdb7c8f --- /dev/null +++ b/src/core/frontend/TerminalLogger.cpp @@ -0,0 +1,151 @@ +/* + Ousía + Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <core/common/Utils.hpp> + +#include "Terminal.hpp" +#include "TerminalLogger.hpp" + +namespace ousia { + +/* Class TerminalLogger */ + +void TerminalLogger::processMessage(const Message &msg) +{ + Terminal t(useColor); + + // Fetch filename, position and context + const SourceContext ctx = messageContext(msg); + + // Print the file name + if (ctx.hasFile()) { + os << t.bright() << ctx.filename << t.reset(); + } + + // Print line and column number + if (ctx.hasLine()) { + if (ctx.hasFile()) { + os << ':'; + } + os << t.bright() << ctx.startLine << t.reset(); + if (ctx.hasColumn()) { + os << ':' << ctx.startColumn; + } + } + + // Print the optional seperator + if (ctx.hasFile() || ctx.hasLine()) { + os << ": "; + } + + // Print the severity + switch (msg.severity) { + case Severity::DEBUG: + break; + case Severity::NOTE: + os << t.color(Terminal::CYAN, true) << "note: "; + break; + case Severity::WARNING: + os << t.color(Terminal::MAGENTA, true) << "warning: "; + break; + case Severity::ERROR: + os << t.color(Terminal::RED, true) << "error: "; + break; + case Severity::FATAL_ERROR: + os << t.color(Terminal::RED, true) << "fatal error: "; + break; + } + os << t.reset(); + + // Print the actual message + os << msg.msg << std::endl; + + // Print the error message context if available + if (ctx.hasText()) { + // Iterate over each line in the text + std::vector<std::string> lines = Utils::split(ctx.text, '\n'); + + const size_t relLen = ctx.relLen ? ctx.relLen : 1; + const size_t relPos = ctx.relPos; + const size_t pstart = relPos; + const size_t pend = relPos + relLen; + + size_t lstart = 0; + size_t lend = 0; + for (size_t n = 0; n < lines.size(); n++) { + bool firstLine = n == 0; + bool lastLine = n == lines.size() - 1; + + // Indicate truncation and indent non-first lines + if (ctx.truncatedStart && firstLine) { + os << "[...] "; + } + if (!firstLine) { + os << "\t"; + } + + // Print the actual line + os << lines[n]; + + // Indicate truncation + if (ctx.truncatedEnd && lastLine) { + os << " [...]"; + } + os << std::endl; + + // Repeat truncation or indendation space in the next line + if (ctx.truncatedStart && firstLine) { + os << " "; + } + if (!firstLine) { + os << "\t"; + } + + // Print the position indicators + lend = lastLine ? pend : lstart + lines[n].size(); + for (size_t i = lstart; i < lend; i++) { + if (i >= pstart && i < pend) { + os << t.color(Terminal::GREEN); + for (; i < std::min(lend, pend); i++) { + if (relLen == 1) { + os << '^'; + } else { + os << '~'; + } + if (i < ctx.text.size() && ctx.text[i] == '\t') { + os << '\t'; + } + } + os << t.reset(); + } else { + if (i < ctx.text.size() && ctx.text[i] == '\t') { + os << '\t'; + } else { + os << ' '; + } + } + } + os << std::endl; + + lstart = lend; + } + } +} + +} + diff --git a/src/core/frontend/TerminalLogger.hpp b/src/core/frontend/TerminalLogger.hpp new file mode 100644 index 0000000..03930e9 --- /dev/null +++ b/src/core/frontend/TerminalLogger.hpp @@ -0,0 +1,79 @@ +/* + Ousía + Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/** + * @file TerminalLogger.hpp + * + * Provides the TerminalLogger class, which is used to log messages to an output + * stream, possibly a Terminal. + * + * @author Andreas Stöckel (astoecke@techfak.uni-bielefeld.de) + */ + +#ifndef _OUSIA_TERMINAL_LOGGER_HPP_ +#define _OUSIA_TERMINAL_LOGGER_HPP_ + +#include <ostream> + +#include <core/common/Logger.hpp> + +namespace ousia { + +/** + * Class extending the Logger class and printing (possibly colored) log messages + * to the given stream. + */ +class TerminalLogger : public ConcreteLogger { +private: + /** + * Reference to the target output stream. + */ + std::ostream &os; + + /** + * If true, the TerminalLogger will use colors to make the log messages + * prettier. + */ + bool useColor; + +protected: + void processMessage(const Message &msg) override; + +public: + /** + * Constructor of the TerminalLogger class. + * + * @param os is the output stream the log messages should be logged to. + * Should be set to std::cerr in most cases. + * @param useColor if true, the TerminalLogger class will do its best to + * use ANSI/VT100 control sequences for colored log messages. + * @param minSeverity is the minimum severity below which log messages + * are discarded. + */ + TerminalLogger(std::ostream &os, bool useColor = false, + Severity minSeverity = DEFAULT_MIN_SEVERITY) + : ConcreteLogger(minSeverity), os(os), useColor(useColor) + { + } +}; + +} + +#endif /* _OUSIA_TERMINAL_LOGGER_HPP_ */ + + diff --git a/src/core/resource/ResourceManager.cpp b/src/core/resource/ResourceManager.cpp index a5e76b0..059da41 100644 --- a/src/core/resource/ResourceManager.cpp +++ b/src/core/resource/ResourceManager.cpp @@ -128,7 +128,7 @@ Rooted<Node> ResourceManager::parse(ParserContext &ctx, Resource &resource, Rooted<Node> node; try { // Set the current source id in the logger instance - ScopedLogger logger(ctx.logger, SourceLocation{sourceId}); + GuardedLogger logger(ctx.logger, SourceLocation{sourceId}); // Fetch the input stream and create a char reader std::unique_ptr<std::istream> is = resource.stream(); diff --git a/test/core/common/ArgumentTest.cpp b/test/core/common/ArgumentTest.cpp index 5580e00..8b74a19 100644 --- a/test/core/common/ArgumentTest.cpp +++ b/test/core/common/ArgumentTest.cpp @@ -22,9 +22,8 @@ #include <core/common/Argument.hpp> #include <core/common/Function.hpp> -#include <core/common/Logger.hpp> #include <core/common/RttiBuilder.hpp> - +#include <core/frontend/TerminalLogger.hpp> #include <core/managed/Managed.hpp> namespace ousia { diff --git a/test/core/common/LoggerTest.cpp b/test/core/common/LoggerTest.cpp index 7b0e6d0..67acc83 100644 --- a/test/core/common/LoggerTest.cpp +++ b/test/core/common/LoggerTest.cpp @@ -20,91 +20,10 @@ #include <gtest/gtest.h> -#include <core/common/CharReader.hpp> #include <core/common/Logger.hpp> -#include <core/common/SourceContextReader.hpp> namespace ousia { -struct Pos { - SourceLocation pos; - Pos(SourceLocation pos = SourceLocation{}) : pos(pos){}; - - SourceLocation getLocation() { return pos; } -}; - -static const std::string testStr = - "\\link[domain]{book}\n" // 1 - "\\link[domain]{meta}\n" // 2 - "\n" // 3 - "\\meta{\n" // 4 - "\t\\title{The Adventures Of Tom Sawyer}\n" // 5 - "\t\\author{Mark Twain}\n" // 6 - "}\n" // 7 - "\n" // 8 - "\\book{\n" // 9 - "\n" // 10 - "\n" // 11 - "\\chapter\n" // 12 - "<<TOM!>>\n" // 13 - "\n" // 14 - "No answer.\n" // 15 - "\n" // 16 - "<<TOM!>>\n" // 17 - "\n" // 18 - "No answer.\n" // 19 - "\n" // 20 - "<<What's gone with that boy, I wonder? You TOM!>>\n" // 21 - "}\n"; // 22 - -static SourceContextReader contextReader{}; - -static SourceContext contextCallback(const SourceLocation &location) -{ - CharReader reader{testStr, 0}; - return contextReader.readContext(reader, location, 60, - "the_adventures_of_tom_sawyer.opd"); -} - -TEST(TerminalLogger, log) -{ - // Test for manual visual expection only -- no assertions - TerminalLogger logger{std::cerr, true}; - logger.setSourceContextCallback(contextCallback); - - logger.debug("This is a test debug message"); - logger.note("This is a test note"); - logger.note("This is a test note with point context", SourceLocation{0, 49}); - logger.note("This is a test note with range context", SourceLocation{0, 49, 55}); - logger.note("This is a test note with multiline context", SourceLocation{0, 49, 150}); - logger.warning("This is a test warning"); - logger.error("This is a test error"); - logger.fatalError("This is a test fatal error!"); - - logger.error("This is a test error with context"); - - try { - throw LoggableException{"An exception"}; - } - catch (const LoggableException &ex) { - logger.log(ex); - } -} - -TEST(TerminalLogger, fork) -{ - // Test for manual visual expection only -- no assertions - TerminalLogger logger{std::cerr, true}; - - logger.setSourceContextCallback(contextCallback); - - LoggerFork fork = logger.fork(); - - fork.error("This is a test error with context"); - - // Print all error messages - fork.commit(); -} } diff --git a/test/core/common/VariantReaderTest.cpp b/test/core/common/VariantReaderTest.cpp index cfdb1a0..241aa56 100644 --- a/test/core/common/VariantReaderTest.cpp +++ b/test/core/common/VariantReaderTest.cpp @@ -20,6 +20,7 @@ #include <gtest/gtest.h> #include <core/common/VariantReader.hpp> +#include <core/frontend/TerminalLogger.hpp> namespace ousia { diff --git a/test/core/frontend/TerminalLoggerTest.cpp b/test/core/frontend/TerminalLoggerTest.cpp new file mode 100644 index 0000000..b0e769d --- /dev/null +++ b/test/core/frontend/TerminalLoggerTest.cpp @@ -0,0 +1,109 @@ +/* + Ousía + Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <iostream> + +#include <gtest/gtest.h> + +#include <core/common/CharReader.hpp> +#include <core/common/SourceContextReader.hpp> +#include <core/frontend/TerminalLogger.hpp> + +namespace ousia { + +struct Pos { + SourceLocation pos; + + Pos(SourceLocation pos = SourceLocation{}) : pos(pos){}; + + SourceLocation getLocation() { return pos; } +}; + +static const std::string testStr = + "\\link[domain]{book}\n" // 1 + "\\link[domain]{meta}\n" // 2 + "\n" // 3 + "\\meta{\n" // 4 + "\t\\title{The Adventures Of Tom Sawyer}\n" // 5 + "\t\\author{Mark Twain}\n" // 6 + "}\n" // 7 + "\n" // 8 + "\\book{\n" // 9 + "\n" // 10 + "\n" // 11 + "\\chapter\n" // 12 + "<<TOM!>>\n" // 13 + "\n" // 14 + "No answer.\n" // 15 + "\n" // 16 + "<<TOM!>>\n" // 17 + "\n" // 18 + "No answer.\n" // 19 + "\n" // 20 + "<<What's gone with that boy, I wonder? You TOM!>>\n" // 21 + "}\n"; // 22 + +static SourceContextReader contextReader{}; + +static SourceContext contextCallback(const SourceLocation &location) +{ + CharReader reader{testStr, 0}; + return contextReader.readContext(reader, location, 60, + "the_adventures_of_tom_sawyer.opd"); +} + +TEST(TerminalLogger, log) +{ + // Test for manual visual expection only -- no assertions + TerminalLogger logger{std::cerr, true}; + logger.setSourceContextCallback(contextCallback); + + logger.debug("This is a test debug message"); + logger.note("This is a test note"); + logger.note("This is a test note with point context", SourceLocation{0, 49}); + logger.note("This is a test note with range context", SourceLocation{0, 49, 55}); + logger.note("This is a test note with multiline context", SourceLocation{0, 49, 150}); + logger.warning("This is a test warning"); + logger.error("This is a test error"); + logger.fatalError("This is a test fatal error!"); + + logger.error("This is a test error with context"); + + try { + throw LoggableException{"An exception"}; + } + catch (const LoggableException &ex) { + logger.log(ex); + } +} + +TEST(TerminalLogger, fork) +{ + // Test for manual visual expection only -- no assertions + TerminalLogger logger{std::cerr, true}; + + logger.setSourceContextCallback(contextCallback); + + LoggerFork fork = logger.fork(); + + fork.error("This is a test error with context"); + + // Print all error messages + fork.commit(); +} +} diff --git a/test/core/model/DocumentTest.cpp b/test/core/model/DocumentTest.cpp index a9c0dcc..e07deb8 100644 --- a/test/core/model/DocumentTest.cpp +++ b/test/core/model/DocumentTest.cpp @@ -21,7 +21,7 @@ #include <iostream> #include <core/common/Rtti.hpp> - +#include <core/frontend/TerminalLogger.hpp> #include <core/model/Document.hpp> #include <core/model/Domain.hpp> diff --git a/test/core/model/DomainTest.cpp b/test/core/model/DomainTest.cpp index 2b63aeb..c00b122 100644 --- a/test/core/model/DomainTest.cpp +++ b/test/core/model/DomainTest.cpp @@ -21,6 +21,7 @@ #include <iostream> #include <core/common/Rtti.hpp> +#include <core/frontend/TerminalLogger.hpp> #include <core/model/Domain.hpp> #include "TestDomain.hpp" diff --git a/test/core/model/TypesystemTest.cpp b/test/core/model/TypesystemTest.cpp index e6655c1..4d1d2c9 100644 --- a/test/core/model/TypesystemTest.cpp +++ b/test/core/model/TypesystemTest.cpp @@ -21,6 +21,7 @@ #include <iostream> #include <core/common/Rtti.hpp> +#include <core/frontend/TerminalLogger.hpp> #include <core/model/Typesystem.hpp> namespace ousia { diff --git a/test/plugins/css/CSSParserTest.cpp b/test/plugins/css/CSSParserTest.cpp index 420241e..5132e51 100644 --- a/test/plugins/css/CSSParserTest.cpp +++ b/test/plugins/css/CSSParserTest.cpp @@ -21,9 +21,9 @@ #include <iostream> #include <sstream> -#include <plugins/css/CSSParser.hpp> - +#include <core/frontend/TerminalLogger.hpp> #include <core/parser/StandaloneParserContext.hpp> +#include <plugins/css/CSSParser.hpp> namespace ousia { TEST(CSSParser, testParseSelectors) @@ -266,7 +266,7 @@ void assertException(std::string css) CharReader reader(css); TerminalLogger logger(std::cerr, true); { - ScopedLogger sl(logger); + GuardedLogger sl(logger); StandaloneParserContext ctx(sl); CSSParser instance; diff --git a/test/plugins/html/DemoOutputTest.cpp b/test/plugins/html/DemoOutputTest.cpp index 5668ddc..11e5fa6 100644 --- a/test/plugins/html/DemoOutputTest.cpp +++ b/test/plugins/html/DemoOutputTest.cpp @@ -24,7 +24,7 @@ #include <plugins/html/DemoOutput.hpp> #include <core/common/Rtti.hpp> - +#include <core/frontend/TerminalLogger.hpp> #include <core/model/Document.hpp> #include <core/model/Domain.hpp> diff --git a/test/plugins/xml/XmlParserTest.cpp b/test/plugins/xml/XmlParserTest.cpp index 52b64e5..37b9cab 100644 --- a/test/plugins/xml/XmlParserTest.cpp +++ b/test/plugins/xml/XmlParserTest.cpp @@ -22,6 +22,7 @@ #include <core/common/CharReader.hpp> #include <core/common/Logger.hpp> +#include <core/frontend/TerminalLogger.hpp> #include <core/parser/StandaloneParserContext.hpp> #include <plugins/xml/XmlParser.hpp> |