58 lines
1.6 KiB
C++
58 lines
1.6 KiB
C++
#include "precompiled_unittests_core.h"
|
|
|
|
#include <core/async/Delegate.h>
|
|
#include <core/String8.h>
|
|
|
|
namespace ITF
|
|
{
|
|
|
|
class AnyClassMock
|
|
{
|
|
public:
|
|
MOCK_METHOD1(methodInt, void(const int &_param));
|
|
MOCK_METHOD1(methodString, void(const String8 &_param));
|
|
};
|
|
|
|
class AnotherClassMock
|
|
{
|
|
public:
|
|
MOCK_METHOD1(methodInt, void(const int &_param));
|
|
};
|
|
|
|
TEST(Delegate, ConcreteInvokation)
|
|
{
|
|
testing::StrictMock<AnyClassMock> obj;
|
|
|
|
Delegate<AnyClassMock, int> delegate1(&obj, &AnyClassMock::methodInt);
|
|
Delegate<AnyClassMock, int> delegate2(&obj, &AnyClassMock::methodInt);
|
|
Delegate<AnyClassMock, String8> delegate3(&obj, &AnyClassMock::methodString);
|
|
|
|
EXPECT_CALL(obj, methodInt(42)).Times(1);
|
|
EXPECT_CALL(obj, methodInt(12)).Times(1);
|
|
EXPECT_CALL(obj, methodString(String8("Plop"))).Times(1);
|
|
delegate1.invokeHandler(42);
|
|
delegate2.invokeHandler(12);
|
|
delegate3.invokeHandler("Plop");
|
|
}
|
|
|
|
TEST(Delegate, AbstractInvokation)
|
|
{
|
|
testing::StrictMock<AnyClassMock> obj1;
|
|
testing::StrictMock<AnotherClassMock> obj2;
|
|
|
|
ITF_VECTOR<AbstractDelegate<int> *> delegates;
|
|
delegates.push_back(newAlloc(mId_Misc, (Delegate<AnyClassMock, int>)(&obj1, &AnyClassMock::methodInt)));
|
|
delegates.push_back(newAlloc(mId_Misc, (Delegate<AnotherClassMock, int>)(&obj2, &AnotherClassMock::methodInt)));
|
|
|
|
EXPECT_CALL(obj1, methodInt(42)).Times(1);
|
|
EXPECT_CALL(obj2, methodInt(42)).Times(1);
|
|
|
|
ITF_VECTOR<AbstractDelegate<int> *>::iterator it;
|
|
for (it = delegates.begin(); it != delegates.end(); ++it)
|
|
{
|
|
(*it)->invokeHandler(42);
|
|
delete (*it);
|
|
}
|
|
}
|
|
|
|
}
|