Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 9539


Ignore:
Timestamp:
Mar 9, 2013, 9:33:48 PM (11 years ago)
Author:
landauf
Message:

added tests for BaseWriter

Location:
code/branches/testing
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • code/branches/testing/src/libraries/util/output/OutputManager.cc

    r9537 r9539  
    307307    {
    308308        // "undefined" context is ignored because it's used implicitly if no explicit context is defined
    309         static OutputContextMask undefined_mask = context::undefined().mask;
     309        OutputContextMask undefined_mask = context::undefined().mask;
    310310
    311311        std::string prefix = this->getLevelName(level) + ": ";
  • code/branches/testing/src/libraries/util/output/SubcontextOutputListener.h

    r9534 r9539  
    7878            virtual bool acceptsOutput(OutputLevel level, const OutputContextContainer& context) const;
    7979
     80            inline const std::set<OutputContextSubID>& getSubcontexts() const
     81                { return this->subcontexts_; }
     82
    8083        private:
    8184            OutputContextMask subcontextsCheckMask_;    ///< All contexts defined by this mask need to be checked whether they are accepted by the set of sub-contexts
  • code/branches/testing/test/util/output/BaseWriterTest.cc

    r9529 r9539  
    11#include <gtest/gtest.h>
     2#include <gmock/gmock.h>
    23#include "util/Output.h"
     4#include "util/output/BaseWriter.h"
     5#include "util/output/OutputManager.h"
    36
    47namespace orxonox
    58{
     9    namespace context
     10    {
     11        namespace
     12        {
     13            REGISTER_OUTPUT_CONTEXT(unittest1);
     14            REGISTER_OUTPUT_CONTEXT(unittest2);
     15            REGISTER_OUTPUT_CONTEXT(unittest3);
     16
     17            REGISTER_OUTPUT_SUBCONTEXT(unittest3, sub1);
     18            REGISTER_OUTPUT_SUBCONTEXT(unittest3, sub2);
     19            REGISTER_OUTPUT_SUBCONTEXT(unittest3, sub3);
     20        }
     21    }
     22
     23    namespace
     24    {
     25        class MockBaseWriter : public BaseWriter
     26        {
     27            public:
     28                MockBaseWriter(const std::string& name, bool bRegister = true) : BaseWriter(name, bRegister) {}
     29
     30                MOCK_METHOD2(printLine, void(const std::string&, OutputLevel));
     31
     32                virtual void output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines)
     33                    { this->BaseWriter::output(level, context, lines); }
     34        };
     35    }
     36
     37    // test getName
     38    TEST(BaseWriterTest, GetName)
     39    {
     40        MockBaseWriter writer("mytestname");
     41        EXPECT_EQ("mytestname", writer.getName());
     42    }
     43
     44    // test configurable names contain name
     45    TEST(BaseWriterTest, ConfigurableNamesContainName)
     46    {
     47        MockBaseWriter writer("mytestname");
     48        EXPECT_NE(writer.getConfigurableMaxLevelName().find(writer.getName()), std::string::npos);
     49        EXPECT_NE(writer.getConfigurableAdditionalContextsMaxLevelName().find(writer.getName()), std::string::npos);
     50        EXPECT_NE(writer.getConfigurableAdditionalContextsName().find(writer.getName()), std::string::npos);
     51
     52        // but the section name is 'static' (does not contain the name)
     53        EXPECT_EQ(writer.getConfigurableSectionName().find(writer.getName()), std::string::npos);
     54    }
     55
     56    // output calls printLine for each line
     57    TEST(BaseWriterTest, OutputCallsPrintLine)
     58    {
     59        MockBaseWriter writer("mytestname");
     60
     61        std::vector<std::string> lines;
     62        lines.push_back("line1");
     63        lines.push_back("line2");
     64
     65        EXPECT_CALL(writer, printLine(::testing::_, level::debug_output)).Times(2);
     66
     67        writer.output(level::debug_output, context::undefined(), lines);
     68    }
     69
     70    // output adds prefix to first line
     71    TEST(BaseWriterTest, OutputAddsPrefixToFirstLine)
     72    {
     73        MockBaseWriter writer("mytestname");
     74
     75        std::vector<std::string> lines;
     76        lines.push_back("line1");
     77
     78        std::string prefix = OutputManager::getInstance().getDefaultPrefix(level::debug_output, context::undefined());
     79        EXPECT_CALL(writer, printLine(prefix + "line1", level::debug_output));
     80
     81        writer.output(level::debug_output, context::undefined(), lines);
     82    }
     83
     84    // setLevelMax sets level max
     85    void testLevelMaxUserWarning(OutputLevel mask)
     86    {
     87        EXPECT_FALSE(mask & level::none);
     88        EXPECT_TRUE(mask & level::message);
     89        EXPECT_TRUE(mask & level::debug_output);
     90        EXPECT_TRUE(mask & level::user_error);
     91        EXPECT_TRUE(mask & level::user_warning);
     92        EXPECT_FALSE(mask & level::user_status);
     93        EXPECT_FALSE(mask & level::verbose);
     94    }
     95
     96    TEST(BaseWriterTest, SetLevelMax)
     97    {
     98        MockBaseWriter writer("mytestname");
     99
     100        writer.setLevelMax(level::user_warning);
     101        testLevelMaxUserWarning(writer.getLevelMask());
     102    }
     103
     104    // setAdditionalContextsLevelMax sets additional contexts level max
     105    TEST(BaseWriterTest, SetAdditionalContextsLevelMax)
     106    {
     107        MockBaseWriter writer("mytestname");
     108
     109        writer.setAdditionalContextsLevelMax(level::user_warning);
     110        testLevelMaxUserWarning(writer.getAdditionalContextsLevelMask());
     111    }
     112
     113    // changedConfigurableLevel sets max level to configurableMaxLevel_
     114    TEST(BaseWriterTest, ChangedConfigurableLevel)
     115    {
     116        MockBaseWriter writer("mytestname");
     117
     118        writer.configurableMaxLevel_ = level::user_warning;
     119        writer.changedConfigurableLevel();
     120
     121        testLevelMaxUserWarning(writer.getLevelMask());
     122    }
     123
     124    // changedConfigurableAdditionalContextsLevel sets additional contexts level max to configurableAdditionalContextsMaxLevel_
     125    TEST(BaseWriterTest, ChangedConfigurableAdditionalContextsLevel)
     126    {
     127        MockBaseWriter writer("mytestname");
     128
     129        writer.configurableAdditionalContextsMaxLevel_ = level::user_warning;
     130        writer.changedConfigurableAdditionalContextsLevel();
     131
     132        testLevelMaxUserWarning(writer.getAdditionalContextsLevelMask());
     133    }
     134
     135    // changedConfigurableAdditionalContexts sets additional contexts to configurableAdditionalContexts_
     136    TEST(BaseWriterTest, ChangedConfigurableAdditionalContexts)
     137    {
     138        MockBaseWriter writer("mytestname");
     139
     140        writer.configurableAdditionalContexts_.push_back("unittest1");
     141        writer.changedConfigurableAdditionalContexts();
     142
     143        EXPECT_TRUE(writer.getAdditionalContextsMask() & context::unittest1().mask);
     144    }
     145
     146    // contexts added by name
     147    TEST(BaseWriterTest, DefineContextsByName)
     148    {
     149        MockBaseWriter writer("mytestname");
     150
     151        writer.configurableAdditionalContexts_.push_back("unittest1");
     152        writer.configurableAdditionalContexts_.push_back("unittest2");
     153        writer.changedConfigurableAdditionalContexts();
     154
     155        EXPECT_TRUE(writer.acceptsOutput(level::message, context::unittest1()));
     156        EXPECT_TRUE(writer.acceptsOutput(level::message, context::unittest2()));
     157        EXPECT_FALSE(writer.acceptsOutput(level::message, context::unittest3()));
     158    }
     159
     160    // subcontexts added by name, separated from base context with "::"
     161    TEST(BaseWriterTest, DefineSubcontextsByName)
     162    {
     163        MockBaseWriter writer("mytestname");
     164
     165        writer.configurableAdditionalContexts_.push_back("unittest3::sub1");
     166        writer.configurableAdditionalContexts_.push_back("unittest3::sub3");
     167        writer.changedConfigurableAdditionalContexts();
     168
     169        EXPECT_FALSE(writer.acceptsOutput(level::message, context::unittest3()));
     170        EXPECT_FALSE(writer.acceptsOutput(level::message, context::unittest3()));
     171        EXPECT_FALSE(writer.acceptsOutput(level::message, context::unittest3()));
     172        EXPECT_TRUE(writer.acceptsOutput(level::message, context::sub1()));
     173        EXPECT_FALSE(writer.acceptsOutput(level::message, context::sub2()));
     174        EXPECT_TRUE(writer.acceptsOutput(level::message, context::sub3()));
     175    }
    6176}
Note: See TracChangeset for help on using the changeset viewer.