Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/testing/test/util/output/OutputListenerTest.cc @ 9533

Last change on this file since 9533 was 9533, checked in by landauf, 12 years ago

added more tests

File size: 9.7 KB
RevLine 
[9529]1#include <gtest/gtest.h>
2#include <gmock/gmock.h>
3#include "util/output/OutputListener.h"
[9533]4#include "util/output/OutputManager.h"
5#include "util/SharedPtr.h"
[9529]6
7namespace orxonox
8{
9    namespace context
10    {
11        namespace
12        {
13            REGISTER_OUTPUT_CONTEXT(unittest1);
14            REGISTER_OUTPUT_CONTEXT(unittest2);
15            REGISTER_OUTPUT_CONTEXT(unittest3);
16        }
17    }
18
19    namespace
20    {
21        class MockOutputListener : public OutputListener
22        {
23            public:
[9533]24                MockOutputListener(bool bRegister = true) : OutputListener(bRegister) {}
25
[9529]26                MOCK_METHOD3(output, void(OutputLevel, const OutputContextContainer&, const std::vector<std::string>&));
[9533]27
28                inline const std::vector<AdditionalContextListener*>& getListeners() const
29                    { return OutputListener::getListeners(); }
[9529]30        };
[9533]31
32        class MockAdditionalContextListener : public AdditionalContextListener
33        {
34            public:
35                MOCK_METHOD1(updatedLevelMask, void(const OutputListener*));
36                MOCK_METHOD1(updatedAdditionalContextsLevelMask, void(const OutputListener*));
37                MOCK_METHOD1(updatedAdditionalContextsMask, void(const OutputListener*));
38        };
39
40        class MockOutputManager : public OutputManager
41        {
42            public:
43                MOCK_METHOD1(registerListener, void(OutputListener*));
44                MOCK_METHOD1(unregisterListener, void(OutputListener*));
45        };
[9529]46    }
47
48    // test default settings
[9533]49    TEST(OutputListenerTest, DefaultConstructorAcceptsNothing)
[9529]50    {
51        MockOutputListener listener;
52
53        EXPECT_EQ(level::none, listener.getLevelMask());
54        EXPECT_EQ(level::none, listener.getAdditionalContextsLevelMask());
55        EXPECT_EQ(context::none, listener.getAdditionalContextsMask());
56    }
57
58    // test setLevelMax
[9533]59    TEST(OutputListenerTest, SetLevelMax)
[9529]60    {
61        MockOutputListener listener;
62
63        listener.setLevelMax(level::user_warning);
64
65        OutputLevel mask = listener.getLevelMask();
66
67        EXPECT_FALSE(mask & level::none);
68        EXPECT_TRUE(mask & level::message);
69        EXPECT_TRUE(mask & level::debug_output);
70        EXPECT_TRUE(mask & level::user_error);
71        EXPECT_TRUE(mask & level::user_warning);
72        EXPECT_FALSE(mask & level::user_status);
73    }
74
75    // test setLevelRange
[9533]76    TEST(OutputListenerTest, SetLevelRange)
[9529]77    {
78        MockOutputListener listener;
79
80        listener.setLevelRange(level::debug_output, level::user_warning);
81
82        OutputLevel mask = listener.getLevelMask();
83
84        EXPECT_FALSE(mask & level::none);
85        EXPECT_FALSE(mask & level::message);
86        EXPECT_TRUE(mask & level::debug_output);
87        EXPECT_TRUE(mask & level::user_error);
88        EXPECT_TRUE(mask & level::user_warning);
89        EXPECT_FALSE(mask & level::user_status);
90    }
91
92    // test setLevelMask
[9533]93    TEST(OutputListenerTest, SetLevelMask)
[9529]94    {
95        MockOutputListener listener;
96
97        listener.setLevelMask(static_cast<OutputLevel>(level::debug_output | level::user_warning));
98
99        OutputLevel mask = listener.getLevelMask();
100
101        EXPECT_FALSE(mask & level::none);
102        EXPECT_FALSE(mask & level::message);
103        EXPECT_TRUE(mask & level::debug_output);
104        EXPECT_FALSE(mask & level::user_error);
105        EXPECT_TRUE(mask & level::user_warning);
106        EXPECT_FALSE(mask & level::user_status);
107    }
108
109    // test setAdditionalContextsLevelMax
[9533]110    TEST(OutputListenerTest, SetAdditionalContextsLevelMax)
[9529]111    {
112        MockOutputListener listener;
113
114        listener.setAdditionalContextsLevelMax(level::user_warning);
115
116        OutputLevel mask = listener.getAdditionalContextsLevelMask();
117
118        EXPECT_FALSE(mask & level::none);
119        EXPECT_TRUE(mask & level::message);
120        EXPECT_TRUE(mask & level::debug_output);
121        EXPECT_TRUE(mask & level::user_error);
122        EXPECT_TRUE(mask & level::user_warning);
123        EXPECT_FALSE(mask & level::user_status);
124    }
125
126    // test setAdditionalContextsLevelRange
[9533]127    TEST(OutputListenerTest, SetAdditionalContextsLevelRange)
[9529]128    {
129        MockOutputListener listener;
130
131        listener.setAdditionalContextsLevelRange(level::debug_output, level::user_warning);
132
133        OutputLevel mask = listener.getAdditionalContextsLevelMask();
134
135        EXPECT_FALSE(mask & level::none);
136        EXPECT_FALSE(mask & level::message);
137        EXPECT_TRUE(mask & level::debug_output);
138        EXPECT_TRUE(mask & level::user_error);
139        EXPECT_TRUE(mask & level::user_warning);
140        EXPECT_FALSE(mask & level::user_status);
141    }
142
143    // test setAdditionalContextsLevelMask
[9533]144    TEST(OutputListenerTest, SetAdditionalContextsLevelMask)
[9529]145    {
146        MockOutputListener listener;
147
148        listener.setAdditionalContextsLevelMask(static_cast<OutputLevel>(level::debug_output | level::user_warning));
149
150        OutputLevel mask = listener.getAdditionalContextsLevelMask();
151
152        EXPECT_FALSE(mask & level::none);
153        EXPECT_FALSE(mask & level::message);
154        EXPECT_TRUE(mask & level::debug_output);
155        EXPECT_FALSE(mask & level::user_error);
156        EXPECT_TRUE(mask & level::user_warning);
157        EXPECT_FALSE(mask & level::user_status);
158    }
159
160    // test setAdditionalContextsMask
[9533]161    TEST(OutputListenerTest, SetAdditionalContextsMask)
[9529]162    {
163        MockOutputListener listener;
164
165        listener.setAdditionalContextsMask(context::unittest1().mask | context::unittest3().mask);
166
167        OutputContextMask mask = listener.getAdditionalContextsMask();
168
169        EXPECT_TRUE(mask & context::unittest1().mask);
170        EXPECT_FALSE(mask & context::unittest2().mask);
171        EXPECT_TRUE(mask & context::unittest3().mask);
172    }
173
[9533]174    // test registerListener
175    TEST(OutputListenerTest, RegisterListener)
176    {
177        MockOutputListener outputListener(false);
178        MockAdditionalContextListener additionalContextListener;
[9529]179
[9533]180        EXPECT_EQ(0u, outputListener.getListeners().size());
181        outputListener.registerListener(&additionalContextListener);
182        EXPECT_EQ(1u, outputListener.getListeners().size());
183        EXPECT_EQ(&additionalContextListener, outputListener.getListeners()[0]);
184    }
185
186    // test unregisterListener
187    TEST(OutputListenerTest, UnregisterListener)
188    {
189        MockOutputListener outputListener(false);
190        MockAdditionalContextListener additionalContextListener;
191
192        outputListener.registerListener(&additionalContextListener);
193        EXPECT_EQ(1u, outputListener.getListeners().size());
194        EXPECT_EQ(&additionalContextListener, outputListener.getListeners()[0]);
195
196        outputListener.unregisterListener(&additionalContextListener);
197        EXPECT_EQ(0u, outputListener.getListeners().size());
198    }
199
200    // test setLevelMask calls OutputManager::updatedLevelMask
201    TEST(OutputListenerTest, SetLevelMaskCallsListeners)
202    {
203        MockOutputListener listener;
204        MockAdditionalContextListener additionalContextListener;
205        listener.registerListener(&additionalContextListener);
206
207        EXPECT_CALL(additionalContextListener, updatedLevelMask(&listener)).Times(1);
208
209        listener.setLevelMask(level::debug_output);
210    }
211
212    // test setAdditionalContextsLevelMask calls OutputManager::updatedAdditionalContextsLevelMask
213    TEST(OutputListenerTest, SetAdditionalContextsLevelMaskCallsListeners)
214    {
215        MockOutputListener listener;
216        MockAdditionalContextListener additionalContextListener;
217        listener.registerListener(&additionalContextListener);
218
219        EXPECT_CALL(additionalContextListener, updatedAdditionalContextsLevelMask(&listener)).Times(1);
220
221        listener.setAdditionalContextsLevelMask(level::debug_output);
222    }
223
224    // test setAdditionalContextsMask calls OutputManager::updatedAdditionalContextsMask
225    TEST(OutputListenerTest, SetAdditionalContextsMaskCallsListeners)
226    {
227        MockOutputListener listener;
228        MockAdditionalContextListener additionalContextListener;
229        listener.registerListener(&additionalContextListener);
230
231        EXPECT_CALL(additionalContextListener, updatedAdditionalContextsMask(&listener)).Times(1);
232
233        listener.setAdditionalContextsMask(context::unittest1().mask);
234    }
235
[9529]236    // test acceptsOutput
237    // test unfilteredOutput
[9533]238
239    // Fixture
240    class OutputListenerTestWithMockedOutputManager : public ::testing::Test
241    {
242        public:
243            virtual void SetUp()
244            {
245                this->manager_ = new MockOutputManager();
246                OutputManager::Testing::getInstancePointer() = this->manager_;
247            }
248
249            virtual void TearDown()
250            {
251                OutputManager::Testing::getInstancePointer() = new OutputManager();
252            }
253
254        protected:
255            MockOutputManager* manager_;
256    };
257
258    // test default-constructor calls OutputManager::registerListener
259    TEST_F(OutputListenerTestWithMockedOutputManager, ConstructorRegistersInOutputManager)
260    {
261        EXPECT_CALL(*this->manager_, registerListener(::testing::_)).Times(1);
262        MockOutputListener listener;
263    }
264
265    // test prevent constructor from calling OutputManager::registerListener
266    TEST_F(OutputListenerTestWithMockedOutputManager, PreventRegisteringInOutputManager)
267    {
268        EXPECT_CALL(*this->manager_, registerListener(::testing::_)).Times(0);
269        MockOutputListener listener(false);
270    }
271
272    // test destructor calls OutputManager::unregisterListener
273    TEST_F(OutputListenerTestWithMockedOutputManager, DestructorUnregistersFromOutputManager)
274    {
275        MockOutputListener listener;
276        EXPECT_CALL(*this->manager_, unregisterListener(::testing::_)).Times(1);
277    }
[9529]278}
Note: See TracBrowser for help on using the repository browser.