JD2022-TU1/main/unittests/core/async/Delegate.cpp

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);
}
}
}