#include "precompiled_unittests_gameplay.h" #include "DataProvider_Testable.h" #include "DataProviderClient_Empty.h" #include "../../../core/AdaptersInterfaces/System_Adapter_Empty.h" #include "../tests/gtest.h" namespace ITF { // gtest & gmock use namespace testing using namespace testing; /////////////////////////////////////////////////////////////////////// TEST(DataProvider, test_addDataDescriptorWithRefreshDurationShouldCallRefreshDataDescriptor) /////////////////////////////////////////////////////////////////////// { // Setup CREATE_CLASS_SINGLETON(SystemAdapter_Empty); // needed for data provider remove client // Arrange f32 dt = 0.1f; u32 nbUpdate = 3; DataProvider_Testable dataProvider; DataProviderClient_Empty client; dataProvider.addDataDescriptor(client.getTestData(), dt * (f32)nbUpdate); // Act - assert EXPECT_BTRUE(dataProvider.addClient(&client)); dataProvider.update(dt); EXPECT_NOT_NULL(dataProvider.m_refreshDataDescForTest); // a refresh is done for the first time dataProvider.m_refreshDataDescForTest = NULL; dataProvider.update(dt); EXPECT_NULL(dataProvider.m_refreshDataDescForTest); // On this update RefreshDataDescriptor should not be called because we don't have enough dt for(u32 u = 0 ; u < nbUpdate ; ++u) { dataProvider.update(dt); } EXPECT_NOT_NULL(dataProvider.m_refreshDataDescForTest); // On this update RefreshDataDescriptor should be called // TearDown dataProvider.removeClient(&client); DESTROY_CLASS_SINGLETON(SystemAdapter_Empty); } /////////////////////////////////////////////////////////////////////// TEST(DataProvider, test_getDataDescriptorWithStringIdShouldSuccess) /////////////////////////////////////////////////////////////////////// { // Arrange DataProvider_Testable dataProvider; StringID dataName("SONGNAME"); // Act DataProvider::DataDesc* setDatadesc = dataProvider.addDataDescriptor(dataName); DataProvider::DataDesc* getDatadesc = dataProvider.getDataDescriptor(dataName); EXPECT_NOT_NULL(getDatadesc); EXPECT_EQ(setDatadesc, getDatadesc); } /////////////////////////////////////////////////////////////////////// TEST(DataProvider, test_getDataDescriptorWithStringShouldSuccess) /////////////////////////////////////////////////////////////////////// { // Arrange DataProvider_Testable dataProvider; const char* dataName = "SONGNAME"; // Act DataProvider::DataDesc* setDatadesc = dataProvider.addDataDescriptor(dataName); DataProvider::DataDesc* getDatadesc = dataProvider.getDataDescriptor(dataName); EXPECT_NOT_NULL(getDatadesc); EXPECT_EQ(setDatadesc, getDatadesc); } /////////////////////////////////////////////////////////////////////// TEST(DataProvider, test_getDataDescriptorWhithUnknownShouldReturnNull) /////////////////////////////////////////////////////////////////////// { // Arrange DataProvider_Testable dataProvider; StringID dataName("SONGNAME"); // Act DataProvider::DataDesc* getDatadesc = dataProvider.getDataDescriptor(dataName); // Assert EXPECT_NULL(getDatadesc); } /////////////////////////////////////////////////////////////////////// TEST(DataProvider, test_addClientWithNullShouldReturnFalse) /////////////////////////////////////////////////////////////////////// { // Arrange DataProvider dataProvider; // Act - assert EXPECT_BFALSE(dataProvider.addClient(NULL)); } /////////////////////////////////////////////////////////////////////// TEST(DataProvider, test_addAndRemoveClientShouldSuccess) /////////////////////////////////////////////////////////////////////// { // Setup CREATE_CLASS_SINGLETON(SystemAdapter_Empty); // needed for data provider remove client // Arrange DataProvider_Testable dataProvider; DataProviderClient_Empty client; dataProvider.addDataDescriptor(client.getTestData()); // Act - assert EXPECT_BTRUE(dataProvider.addClient(&client)); ITF_VECTOR clients; dataProvider.getClients(clients); EXPECT_NE(-1, clients.find(&client)); // Check if the client is properly added dataProvider.removeClient(&client); clients.clear(); dataProvider.getClients(clients); EXPECT_EQ(-1, clients.find(&client)); // Check if the client is properly removed // TearDown DESTROY_CLASS_SINGLETON(SystemAdapter_Empty); } }