Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/cpp11_v2/test/core/command/FunctorPtrTest.cc @ 10865

Last change on this file since 10865 was 10865, checked in by muemart, 10 years ago

Add some more tests for Functor(Ptr)

  • Property svn:eol-style set to native
File size: 4.7 KB
Line 
1#include <gtest/gtest.h>
2#include "core/command/Functor.h"
3
4namespace orxonox
5{
6    namespace
7    {
8        class Testclass : public Destroyable
9        {
10            public:
11                void testMember() {}
12                static void testStatic() {}
13        };
14
15        class Subclass : public Testclass
16        {
17        };
18
19        // Fixture
20        class FunctorPtrTest : public ::testing::Test
21        {
22            public:
23                virtual void SetUp() override
24                {
25                }
26
27                virtual void TearDown() override
28                {
29                }
30        };
31
32        void f1(int, double)
33        {
34        }
35
36        void f2(int, double, double)
37        {
38        }
39
40        int f3(int, double, double)
41        {
42            return 0;
43        }
44    }
45
46    TEST_F(FunctorPtrTest, emptyPtr)
47    {
48        FunctorMemberPtr<Testclass> ptr1;
49        FunctorStaticPtr ptr2;
50        FunctorPtr ptr3;
51
52        ASSERT_FALSE(static_cast<bool>(ptr1));
53        ASSERT_FALSE(static_cast<bool>(ptr2));
54        ASSERT_FALSE(static_cast<bool>(ptr3));
55    }
56
57    TEST_F(FunctorPtrTest, canAssignToFunctorMemberPtr)
58    {
59        FunctorMemberPtr<Testclass> ptr = createFunctor(&Testclass::testMember);
60        ASSERT_TRUE(static_cast<bool>(ptr));
61    }
62
63    TEST_F(FunctorPtrTest, canAssignToFunctorStaticPtr)
64    {
65        FunctorStaticPtr ptr = createFunctor(&Testclass::testStatic);
66        ASSERT_TRUE(static_cast<bool>(ptr));
67    }
68
69    TEST_F(FunctorPtrTest, canAssignToFunctorPtr)
70    {
71        FunctorPtr ptr1 = createFunctor(&Testclass::testMember);
72        ASSERT_TRUE(static_cast<bool>(ptr1));
73        FunctorPtr ptr2 = createFunctor(&Testclass::testStatic);
74        ASSERT_TRUE(static_cast<bool>(ptr2));
75    }
76
77    TEST_F(FunctorPtrTest, canCastFromFunctorMemberPtr)
78    {
79        FunctorMemberPtr<Testclass> ptr1 = createFunctor(&Testclass::testMember);
80        FunctorPtr ptr2 = ptr1;
81        ASSERT_TRUE(static_cast<bool>(ptr2));
82    }
83
84    TEST_F(FunctorPtrTest, canCastFromFunctorStaticPtr)
85    {
86        FunctorStaticPtr ptr1 = createFunctor(&Testclass::testStatic);
87        FunctorPtr ptr2 = ptr1;
88        ASSERT_TRUE(static_cast<bool>(ptr2));
89    }
90
91    TEST_F(FunctorPtrTest, canCastToFunctorMemberOfSubclass)
92    {
93        FunctorPtr ptr1 = createFunctor(&Subclass::testMember);
94        FunctorMemberPtr<Subclass> ptr2 = std::static_pointer_cast<FunctorMember<Subclass>>(ptr1);
95        ASSERT_TRUE(static_cast<bool>(ptr2));
96    }
97
98    TEST_F(FunctorPtrTest, canCompareHeaderIdentifiers)
99    {
100        FunctorPtr fp1 = createFunctor(&f1);
101        FunctorPtr fp2 = createFunctor(&f2);
102        FunctorPtr fp3 = createFunctor(&f3);
103        ASSERT_TRUE(fp1->getHeaderIdentifier(1) == fp2->getHeaderIdentifier(1));
104        ASSERT_TRUE(fp1->getHeaderIdentifier(2) == fp2->getHeaderIdentifier(2));
105        ASSERT_FALSE(fp1->getHeaderIdentifier(1) == fp2->getHeaderIdentifier(2));
106        ASSERT_FALSE(fp1->getHeaderIdentifier(10) == fp2->getHeaderIdentifier(10));
107        ASSERT_FALSE(fp2->getHeaderIdentifier(2) == fp3->getHeaderIdentifier(2));
108        ASSERT_FALSE(fp1->getHeaderIdentifier() == fp2->getHeaderIdentifier());
109        ASSERT_FALSE(fp2->getHeaderIdentifier() == fp3->getHeaderIdentifier());
110    }
111
112    TEST_F(FunctorPtrTest, canCompareTypenames)
113    {
114        FunctorPtr fp1 = createFunctor(&f1);
115        FunctorPtr fp2 = createFunctor(&f2);
116        FunctorPtr fp3 = createFunctor(&f3);
117        ASSERT_TRUE(fp1->getTypenameReturnvalue() == fp2->getTypenameReturnvalue());
118        ASSERT_TRUE(fp1->getTypenameParam(0) == fp3->getTypenameParam(0));
119        ASSERT_EQ("void", fp1->getTypenameReturnvalue());
120        ASSERT_EQ("int", fp3->getTypenameReturnvalue());
121        ASSERT_EQ("int", fp2->getTypenameParam(0));
122        ASSERT_EQ("double", fp3->getTypenameParam(2));
123        ASSERT_EQ("", fp3->getTypenameParam(6));
124    }
125
126    TEST_F(FunctorPtrTest, testGetParamCountAndHasReturnValue)
127    {
128        FunctorPtr fp1 = createFunctor(&f1);
129        FunctorPtr fp2 = createFunctor(&f2);
130        FunctorPtr fp3 = createFunctor(&f3);
131        ASSERT_EQ(3, fp2->getParamCount());
132        ASSERT_FALSE(fp1->getParamCount() == fp3->getParamCount());
133        ASSERT_FALSE(fp2->hasReturnvalue());
134        ASSERT_TRUE(fp3->hasReturnvalue());
135    }
136
137    TEST_F(FunctorPtrTest, canEvaluateArgument)
138    {
139        FunctorPtr fp1 = createFunctor(&f1);
140        MultiType mttype = "2";
141        fp1->evaluateArgument(0, mttype);
142        ASSERT_TRUE(mttype.isType<int>());
143        ASSERT_EQ(2, mttype.get<int>());
144        fp1->evaluateArgument(1, mttype);
145        ASSERT_TRUE(mttype.isType<double>());
146        ASSERT_EQ(2.0, mttype.get<double>());
147        mttype.reset();
148        fp1->evaluateArgument(5, mttype);
149        ASSERT_TRUE(mttype.null());
150    }
151}
Note: See TracBrowser for help on using the repository browser.