[Orxonox-commit 4871] r9540 - in code/branches/testing: src/libraries/util/output test/util/output
landauf at orxonox.net
landauf at orxonox.net
Sun Mar 10 11:29:44 CET 2013
Author: landauf
Date: 2013-03-10 11:29:44 +0100 (Sun, 10 Mar 2013)
New Revision: 9540
Modified:
code/branches/testing/src/libraries/util/output/LogWriter.cc
code/branches/testing/src/libraries/util/output/OutputDefinitions.h
code/branches/testing/src/libraries/util/output/OutputManager.cc
code/branches/testing/src/libraries/util/output/OutputManager.h
code/branches/testing/test/util/output/ConsoleWriterTest.cc
Log:
some refactoring in OutputManager - for unittests it is sometimes necessary to create a new instance of OutputManager (or a mock), hence we should avoid storing dead references
Modified: code/branches/testing/src/libraries/util/output/LogWriter.cc
===================================================================
--- code/branches/testing/src/libraries/util/output/LogWriter.cc 2013-03-09 20:33:48 UTC (rev 9539)
+++ code/branches/testing/src/libraries/util/output/LogWriter.cc 2013-03-10 10:29:44 UTC (rev 9540)
@@ -117,7 +117,8 @@
this->openFile();
// request old output from MemoryWriter
- OutputManager::getInstance().getMemoryWriter().resendOutput(this);
+ if (&OutputManager::getInstance().getMemoryWriter())
+ OutputManager::getInstance().getMemoryWriter().resendOutput(this);
}
/**
Modified: code/branches/testing/src/libraries/util/output/OutputDefinitions.h
===================================================================
--- code/branches/testing/src/libraries/util/output/OutputDefinitions.h 2013-03-09 20:33:48 UTC (rev 9539)
+++ code/branches/testing/src/libraries/util/output/OutputDefinitions.h 2013-03-10 10:29:44 UTC (rev 9540)
@@ -47,7 +47,7 @@
context argument.
*/
#define REGISTER_OUTPUT_CONTEXT(name) \
- const OutputContextContainer& name() { static const OutputContextContainer& context = registerContext(#name); return context; }
+ const OutputContextContainer& name() { static OutputContextContainer context = registerContext(#name); return context; }
/**
@brief Defines a sub-context.
Modified: code/branches/testing/src/libraries/util/output/OutputManager.cc
===================================================================
--- code/branches/testing/src/libraries/util/output/OutputManager.cc 2013-03-09 20:33:48 UTC (rev 9539)
+++ code/branches/testing/src/libraries/util/output/OutputManager.cc 2013-03-10 10:29:44 UTC (rev 9540)
@@ -54,6 +54,11 @@
this->combinedAdditionalContextsMask_ = context::none;
this->subcontextCounter_ = 0;
+
+ this->isInitialized_ = false;
+ this->memoryWriterInstance_ = 0;
+ this->consoleWriterInstance_ = 0;
+ this->logWriterInstance_ = 0;
}
/**
@@ -61,6 +66,15 @@
*/
OutputManager::~OutputManager()
{
+ while (!this->listeners_.empty())
+ this->unregisterListener(this->listeners_[0]);
+
+ if (this->memoryWriterInstance_)
+ delete this->memoryWriterInstance_;
+ if (this->consoleWriterInstance_)
+ delete this->consoleWriterInstance_;
+ if (this->logWriterInstance_)
+ delete this->logWriterInstance_;
}
/*static*/ SharedPtr<OutputManager>& OutputManager::Testing::getInstancePointer()
@@ -87,46 +101,19 @@
*/
/*static*/ OutputManager& OutputManager::getInstanceAndCreateListeners()
{
- static OutputManager& instance = OutputManager::getInstance();
+ OutputManager& instance = *OutputManager::Testing::getInstancePointer();
- static MemoryWriter& memoryWriterInstance = OutputManager::getInstance().getMemoryWriter(); (void)memoryWriterInstance;
- static ConsoleWriter& consoleWriterInstance = OutputManager::getInstance().getConsoleWriter(); (void)consoleWriterInstance;
- static LogWriter& logWriterInstance = OutputManager::getInstance().getLogWriter(); (void)logWriterInstance;
+ if (!instance.isInitialized_) {
+ instance.isInitialized_ = true;
+ instance.memoryWriterInstance_ = new MemoryWriter();
+ instance.consoleWriterInstance_ = new ConsoleWriter(std::cout);
+ instance.logWriterInstance_ = new LogWriter();
+ }
return instance;
}
/**
- * @brief Returns the main instance of MemoryWriter which is managed by the OutputManager singleton.
- * @note If OutputManager is ever un-singletonized, this instance must not remain static.
- */
- MemoryWriter& OutputManager::getMemoryWriter()
- {
- static MemoryWriter instance;
- return instance;
- }
-
- /**
- * @brief Returns the main instance of ConsoleWriter which is managed by the OutputManager singleton.
- * @note If OutputManager is ever un-singletonized, this instance must not remain static.
- */
- ConsoleWriter& OutputManager::getConsoleWriter()
- {
- static ConsoleWriter instance(std::cout);
- return instance;
- }
-
- /**
- * @brief Returns the main instance of LogWriter which is managed by the OutputManager singleton.
- * @note If OutputManager is ever un-singletonized, this instance must not remain static.
- */
- LogWriter& OutputManager::getLogWriter()
- {
- static LogWriter instance;
- return instance;
- }
-
- /**
@brief Sends an output message to all output listeners.
@param level The level of the message
@param context The context of the message
Modified: code/branches/testing/src/libraries/util/output/OutputManager.h
===================================================================
--- code/branches/testing/src/libraries/util/output/OutputManager.h 2013-03-09 20:33:48 UTC (rev 9539)
+++ code/branches/testing/src/libraries/util/output/OutputManager.h 2013-03-10 10:29:44 UTC (rev 9540)
@@ -71,11 +71,11 @@
static OutputManager& getInstance();
static OutputManager& getInstanceAndCreateListeners();
- MemoryWriter& getMemoryWriter();
- ConsoleWriter& getConsoleWriter();
- LogWriter& getLogWriter();
+ inline MemoryWriter& getMemoryWriter() { return *this->memoryWriterInstance_; }
+ inline ConsoleWriter& getConsoleWriter() { return *this->consoleWriterInstance_; }
+ inline LogWriter& getLogWriter() { return *this->logWriterInstance_; }
- void pushMessage(OutputLevel level, const OutputContextContainer& context, const std::string& message);
+ virtual void pushMessage(OutputLevel level, const OutputContextContainer& context, const std::string& message);
virtual void registerListener(OutputListener* listener);
virtual void unregisterListener(OutputListener* listener);
@@ -124,6 +124,11 @@
std::map<std::string, OutputContextContainer> contextContainers_; ///< Contains all contexts including sub-contexts and their containers
OutputContextSubID subcontextCounter_; ///< Counts the number of sub-contexts (and generates their IDs)
+ bool isInitialized_; ///< Becomes true once the following instances were created
+ MemoryWriter* memoryWriterInstance_; ///< The main instance of MemoryWriter, managed by OutputManager
+ ConsoleWriter* consoleWriterInstance_; ///< The main instance of ConsoleWriter, managed by OutputManager
+ LogWriter* logWriterInstance_; ///< The main instance of LogWriter, managed by OutputManager
+
public:
struct _UtilExport Testing
{
Modified: code/branches/testing/test/util/output/ConsoleWriterTest.cc
===================================================================
--- code/branches/testing/test/util/output/ConsoleWriterTest.cc 2013-03-09 20:33:48 UTC (rev 9539)
+++ code/branches/testing/test/util/output/ConsoleWriterTest.cc 2013-03-10 10:29:44 UTC (rev 9540)
@@ -64,6 +64,7 @@
TEST(ConsoleWriterTest, DefaultConsoleWriterUsesCout)
{
+ OutputManager::getInstanceAndCreateListeners();
EXPECT_EQ(std::cout, OutputManager::getInstance().getConsoleWriter().getOutputStream());
}
}
More information about the Orxonox-commit
mailing list