[Orxonox-commit 4865] r9534 - in code/branches/testing: . src/libraries/util/output test/util/output

landauf at orxonox.net landauf at orxonox.net
Sun Mar 3 20:25:53 CET 2013


Author: landauf
Date: 2013-03-03 20:25:53 +0100 (Sun, 03 Mar 2013)
New Revision: 9534

Modified:
   code/branches/testing/
   code/branches/testing/src/libraries/util/output/AdditionalContextListener.h
   code/branches/testing/src/libraries/util/output/OutputListener.h
   code/branches/testing/src/libraries/util/output/SubcontextOutputListener.h
   code/branches/testing/test/util/output/OutputListenerTest.cc
   code/branches/testing/test/util/output/SubcontextOutputListenerTest.cc
Log:
added more tests


Property changes on: code/branches/testing
___________________________________________________________________
Modified: svn:ignore
   - build
codeblocks
vs
dependencies

   + build
codeblocks
vs
dependencies
.metadata
eclipse


Modified: code/branches/testing/src/libraries/util/output/AdditionalContextListener.h
===================================================================
--- code/branches/testing/src/libraries/util/output/AdditionalContextListener.h	2013-03-02 18:15:37 UTC (rev 9533)
+++ code/branches/testing/src/libraries/util/output/AdditionalContextListener.h	2013-03-03 19:25:53 UTC (rev 9534)
@@ -49,6 +49,8 @@
     class _UtilExport AdditionalContextListener
     {
         public:
+            virtual ~AdditionalContextListener() {}
+
             virtual void updatedLevelMask(const OutputListener* listener) = 0;
             virtual void updatedAdditionalContextsLevelMask(const OutputListener* listener) = 0;
             virtual void updatedAdditionalContextsMask(const OutputListener* listener) = 0;

Modified: code/branches/testing/src/libraries/util/output/OutputListener.h
===================================================================
--- code/branches/testing/src/libraries/util/output/OutputListener.h	2013-03-02 18:15:37 UTC (rev 9533)
+++ code/branches/testing/src/libraries/util/output/OutputListener.h	2013-03-03 19:25:53 UTC (rev 9534)
@@ -65,7 +65,7 @@
             void setAdditionalContextsLevelRange(OutputLevel min, OutputLevel max);
             void setAdditionalContextsLevelMask(OutputLevel mask);
 
-            void setAdditionalContextsMask(OutputContextMask mask);
+            virtual void setAdditionalContextsMask(OutputContextMask mask);
 
             /// @brief Returns the level mask.
             inline OutputLevel getLevelMask() const

Modified: code/branches/testing/src/libraries/util/output/SubcontextOutputListener.h
===================================================================
--- code/branches/testing/src/libraries/util/output/SubcontextOutputListener.h	2013-03-02 18:15:37 UTC (rev 9533)
+++ code/branches/testing/src/libraries/util/output/SubcontextOutputListener.h	2013-03-03 19:25:53 UTC (rev 9534)
@@ -72,7 +72,7 @@
             SubcontextOutputListener(bool bRegister = true);
             virtual ~SubcontextOutputListener();
 
-            void setAdditionalContextsMask(OutputContextMask mask);
+            virtual void setAdditionalContextsMask(OutputContextMask mask);
             void setAdditionalSubcontexts(const std::set<const OutputContextContainer*>& subcontexts);
 
             virtual bool acceptsOutput(OutputLevel level, const OutputContextContainer& context) const;

Modified: code/branches/testing/test/util/output/OutputListenerTest.cc
===================================================================
--- code/branches/testing/test/util/output/OutputListenerTest.cc	2013-03-02 18:15:37 UTC (rev 9533)
+++ code/branches/testing/test/util/output/OutputListenerTest.cc	2013-03-03 19:25:53 UTC (rev 9534)
@@ -234,8 +234,106 @@
     }
 
     // test acceptsOutput
+    namespace
+    {
+        void testContext(const OutputListener& listener, const OutputContextContainer& context, bool accepted)
+        {
+            EXPECT_TRUE(listener.acceptsOutput(level::message, context));
+            EXPECT_TRUE(listener.acceptsOutput(level::user_error, context));
+            EXPECT_TRUE(listener.acceptsOutput(level::user_warning, context));
+
+            if (accepted)
+            {
+                EXPECT_TRUE(listener.acceptsOutput(level::user_status, context));
+                EXPECT_TRUE(listener.acceptsOutput(level::internal_error, context));
+                EXPECT_TRUE(listener.acceptsOutput(level::internal_info, context));
+            }
+            else
+            {
+                EXPECT_FALSE(listener.acceptsOutput(level::user_status, context));
+                EXPECT_FALSE(listener.acceptsOutput(level::internal_error, context));
+                EXPECT_FALSE(listener.acceptsOutput(level::internal_info, context));
+            }
+
+            EXPECT_FALSE(listener.acceptsOutput(level::verbose, context));
+            EXPECT_FALSE(listener.acceptsOutput(level::verbose_ultra, context));
+        }
+    }
+
+    TEST(OutputListenerTest, AcceptsOutputNoAdditionalContext)
+    {
+        MockOutputListener listener;
+
+        listener.setLevelMax(level::user_warning);
+
+        testContext(listener, context::undefined(), false);
+        testContext(listener, context::unittest1(), false);
+        testContext(listener, context::unittest2(), false);
+    }
+
+    TEST(OutputListenerTest, AcceptsOutputWithAdditionalContext)
+    {
+        MockOutputListener listener;
+
+        listener.setLevelMax(level::user_warning);
+        listener.setAdditionalContextsMask(context::unittest1().mask);
+        listener.setAdditionalContextsLevelMax(level::internal_info);
+
+        testContext(listener, context::undefined(), false);
+        testContext(listener, context::unittest1(), true);
+        testContext(listener, context::unittest2(), false);
+    }
+
+    TEST(OutputListenerTest, AcceptsOutputWithTwoAdditionalContexts)
+    {
+        MockOutputListener listener;
+
+        listener.setLevelMax(level::user_warning);
+
+        listener.setLevelMax(level::user_warning);
+        listener.setAdditionalContextsMask(context::unittest1().mask | context::unittest2().mask);
+        listener.setAdditionalContextsLevelMax(level::internal_info);
+
+        testContext(listener, context::undefined(), false);
+        testContext(listener, context::unittest1(), true);
+        testContext(listener, context::unittest2(), true);
+    }
+
     // test unfilteredOutput
+    TEST(OutputListenerTest, UnfilteredOutputCallsOutputIfOutputAccepted)
+    {
+        MockOutputListener listener;
 
+        listener.setLevelMax(level::user_warning);
+
+        const OutputLevel& level = level::message;
+        const OutputContextContainer& context = context::undefined();
+
+        EXPECT_TRUE(listener.acceptsOutput(level, context));
+
+        std::vector<std::string> lines;
+        EXPECT_CALL(listener, output(level, ::testing::_, lines)).Times(1);
+
+        listener.unfilteredOutput(level, context, lines);
+    }
+
+    TEST(OutputListenerTest, UnfilteredOutputDoesNotCallOutputIfOutputNotAccepted)
+    {
+        MockOutputListener listener;
+
+        listener.setLevelMax(level::user_warning);
+
+        const OutputLevel& level = level::verbose;
+        const OutputContextContainer& context = context::undefined();
+
+        EXPECT_FALSE(listener.acceptsOutput(level, context));
+
+        std::vector<std::string> lines;
+        EXPECT_CALL(listener, output(level, ::testing::_, lines)).Times(0);
+
+        listener.unfilteredOutput(level, context, lines);
+    }
+
     // Fixture
     class OutputListenerTestWithMockedOutputManager : public ::testing::Test
     {

Modified: code/branches/testing/test/util/output/SubcontextOutputListenerTest.cc
===================================================================
--- code/branches/testing/test/util/output/SubcontextOutputListenerTest.cc	2013-03-02 18:15:37 UTC (rev 9533)
+++ code/branches/testing/test/util/output/SubcontextOutputListenerTest.cc	2013-03-03 19:25:53 UTC (rev 9534)
@@ -1,6 +1,217 @@
 #include <gtest/gtest.h>
+#include <gmock/gmock.h>
 #include "util/Output.h"
+#include "util/output/SubcontextOutputListener.h"
 
 namespace orxonox
 {
+    namespace context
+    {
+        namespace
+        {
+            REGISTER_OUTPUT_CONTEXT(unittest1);
+            REGISTER_OUTPUT_CONTEXT(unittest2);
+            REGISTER_OUTPUT_CONTEXT(unittest3);
+
+            REGISTER_OUTPUT_SUBCONTEXT(unittest3, sub1);
+            REGISTER_OUTPUT_SUBCONTEXT(unittest3, sub2);
+            REGISTER_OUTPUT_SUBCONTEXT(unittest3, sub3);
+        }
+    }
+
+    namespace
+    {
+        class MockSubcontextOutputListener : public SubcontextOutputListener
+        {
+            public:
+                MockSubcontextOutputListener(bool bRegister = true) : SubcontextOutputListener(bRegister) {}
+                MOCK_METHOD3(output, void(OutputLevel, const OutputContextContainer&, const std::vector<std::string>&));
+        };
+    }
+
+    TEST(SubcontextOutputListenerTest, ContextsDefinedCorrectly)
+    {
+        EXPECT_TRUE(context::unittest1().sub_id == context::no_subcontext);
+        EXPECT_TRUE(context::unittest2().sub_id == context::no_subcontext);
+        EXPECT_TRUE(context::unittest3().sub_id == context::no_subcontext);
+        EXPECT_FALSE(context::sub1().sub_id == context::no_subcontext);
+        EXPECT_FALSE(context::sub2().sub_id == context::no_subcontext);
+        EXPECT_FALSE(context::sub3().sub_id == context::no_subcontext);
+    }
+
+    // test setAdditionalContextsMask
+    TEST(SubcontextOutputListenerTest, SetAdditionalContextsMask)
+    {
+        MockSubcontextOutputListener listener;
+
+        listener.setAdditionalContextsMask(context::unittest1().mask | context::unittest2().mask);
+
+        OutputContextMask mask = listener.getAdditionalContextsMask();
+
+        EXPECT_TRUE(mask & context::unittest1().mask);
+        EXPECT_TRUE(mask & context::unittest2().mask);
+        EXPECT_FALSE(mask & context::unittest3().mask);
+    }
+
+    // test setAdditionalSubcontexts
+    TEST(SubcontextOutputListenerTest, SetAdditionalSubcontexts)
+    {
+        MockSubcontextOutputListener listener;
+
+        std::set<const OutputContextContainer*> subcontexts;
+        subcontexts.insert(&context::sub1());
+        subcontexts.insert(&context::sub3());
+
+        listener.setAdditionalSubcontexts(subcontexts);
+        OutputContextMask mask = listener.getAdditionalContextsMask();
+
+        EXPECT_FALSE(mask & context::unittest1().mask);
+        EXPECT_FALSE(mask & context::unittest2().mask);
+        EXPECT_TRUE(mask & context::unittest3().mask);
+    }
+
+    // test setAdditionalContextsMask and setAdditionalSubcontexts
+    TEST(SubcontextOutputListenerTest, SetAdditionalContextsAndSubcontexts)
+    {
+        MockSubcontextOutputListener listener;
+
+        std::set<const OutputContextContainer*> subcontexts;
+        subcontexts.insert(&context::sub1());
+        subcontexts.insert(&context::sub3());
+
+        listener.setAdditionalSubcontexts(subcontexts);
+        listener.setAdditionalContextsMask(context::unittest1().mask | context::unittest2().mask);
+
+        OutputContextMask mask = listener.getAdditionalContextsMask();
+
+        EXPECT_TRUE(mask & context::unittest1().mask);
+        EXPECT_TRUE(mask & context::unittest2().mask);
+        EXPECT_TRUE(mask & context::unittest3().mask);
+    }
+
+    // test acceptsOutput
+    namespace
+    {
+        void testContext(const OutputListener& listener, const OutputContextContainer& context, bool accepted)
+        {
+            EXPECT_TRUE(accepted == listener.acceptsOutput(level::message, context));
+            EXPECT_TRUE(accepted == listener.acceptsOutput(level::user_error, context));
+            EXPECT_TRUE(accepted == listener.acceptsOutput(level::internal_info, context));
+        }
+    }
+
+    TEST(SubcontextOutputListenerTest, NoContext)
+    {
+        MockSubcontextOutputListener listener;
+        listener.setAdditionalContextsLevelMax(level::verbose);
+
+        testContext(listener, context::unittest1(), false);
+        testContext(listener, context::unittest2(), false);
+        testContext(listener, context::unittest3(), false);
+        testContext(listener, context::sub1(), false);
+        testContext(listener, context::sub2(), false);
+        testContext(listener, context::sub3(), false);
+    }
+
+    TEST(SubcontextOutputListenerTest, OneContext)
+    {
+        MockSubcontextOutputListener listener;
+        listener.setAdditionalContextsLevelMax(level::verbose);
+
+        listener.setAdditionalContextsMask(context::unittest1().mask);
+
+        testContext(listener, context::unittest1(), true);
+        testContext(listener, context::unittest2(), false);
+        testContext(listener, context::unittest3(), false);
+        testContext(listener, context::sub1(), false);
+        testContext(listener, context::sub2(), false);
+        testContext(listener, context::sub3(), false);
+    }
+
+    TEST(SubcontextOutputListenerTest, TwoContexts)
+    {
+        MockSubcontextOutputListener listener;
+        listener.setAdditionalContextsLevelMax(level::verbose);
+
+        listener.setAdditionalContextsMask(context::unittest1().mask | context::unittest2().mask);
+
+        testContext(listener, context::unittest1(), true);
+        testContext(listener, context::unittest2(), true);
+        testContext(listener, context::unittest3(), false);
+        testContext(listener, context::sub1(), false);
+        testContext(listener, context::sub2(), false);
+        testContext(listener, context::sub3(), false);
+    }
+
+    TEST(SubcontextOutputListenerTest, OneSubcontext)
+    {
+        MockSubcontextOutputListener listener;
+        listener.setAdditionalContextsLevelMax(level::verbose);
+
+        std::set<const OutputContextContainer*> subcontexts;
+        subcontexts.insert(&context::sub1());
+
+        listener.setAdditionalSubcontexts(subcontexts);
+
+        testContext(listener, context::unittest1(), false);
+        testContext(listener, context::unittest2(), false);
+        testContext(listener, context::unittest3(), false);
+        testContext(listener, context::sub1(), true);
+        testContext(listener, context::sub2(), false);
+        testContext(listener, context::sub3(), false);
+    }
+
+    TEST(SubcontextOutputListenerTest, TwoSubcontexts)
+    {
+        MockSubcontextOutputListener listener;
+        listener.setAdditionalContextsLevelMax(level::verbose);
+
+        std::set<const OutputContextContainer*> subcontexts;
+        subcontexts.insert(&context::sub1());
+        subcontexts.insert(&context::sub3());
+
+        listener.setAdditionalSubcontexts(subcontexts);
+
+        testContext(listener, context::unittest1(), false);
+        testContext(listener, context::unittest2(), false);
+        testContext(listener, context::unittest3(), false);
+        testContext(listener, context::sub1(), true);
+        testContext(listener, context::sub2(), false);
+        testContext(listener, context::sub3(), true);
+    }
+
+    TEST(SubcontextOutputListenerTest, ContextsAndSubcontexts)
+    {
+        MockSubcontextOutputListener listener;
+        listener.setAdditionalContextsLevelMax(level::verbose);
+
+        std::set<const OutputContextContainer*> subcontexts;
+        subcontexts.insert(&context::sub1());
+        subcontexts.insert(&context::sub3());
+
+        listener.setAdditionalContextsMask(context::unittest1().mask | context::unittest2().mask);
+        listener.setAdditionalSubcontexts(subcontexts);
+
+        testContext(listener, context::unittest1(), true);
+        testContext(listener, context::unittest2(), true);
+        testContext(listener, context::unittest3(), false);
+        testContext(listener, context::sub1(), true);
+        testContext(listener, context::sub2(), false);
+        testContext(listener, context::sub3(), true);
+    }
+
+    TEST(SubcontextOutputListenerTest, BaseContextEnablesAllSubcontexts)
+    {
+        MockSubcontextOutputListener listener;
+        listener.setAdditionalContextsLevelMax(level::verbose);
+
+        listener.setAdditionalContextsMask(context::unittest3().mask);
+
+        testContext(listener, context::unittest1(), false);
+        testContext(listener, context::unittest2(), false);
+        testContext(listener, context::unittest3(), true);
+        testContext(listener, context::sub1(), true);
+        testContext(listener, context::sub2(), true);
+        testContext(listener, context::sub3(), true);
+    }
 }




More information about the Orxonox-commit mailing list