1
0
mirror of https://github.com/solemnwarning/directplay-lite synced 2024-12-30 16:45:37 +01:00

More DirectPlay8Address tests, "fix" GetUserData() behaviour

This commit is contained in:
Daniel Collins 2018-08-28 23:19:47 +01:00
parent 45a9f1b268
commit 5550c78658
2 changed files with 207 additions and 1 deletions

View File

@ -175,7 +175,12 @@ HRESULT DirectPlay8Address::GetUserData(LPVOID pvUserData, PDWORD pdwBufferSize)
if(pvUserData != NULL && *pdwBufferSize >= user_data.size())
{
memcpy(pvUserData, user_data.data(), user_data.size());
*pdwBufferSize = user_data.size();
/* BUG: DirectPlay is supposed to set pdwBufferSize to the size of the data passed to
* SetUserData(), the DirectX implementation doesn't, so we don't.
*/
// *pdwBufferSize = user_data.size();
return S_OK;
}
else{

View File

@ -40,6 +40,26 @@ TEST_F(DirectPlay8AddressInitial, HasNoComponents)
EXPECT_EQ(num, (DWORD)(0));
}
TEST_F(DirectPlay8AddressInitial, GetSP)
{
GUID vbuf;
ASSERT_EQ(idp8->GetSP(&vbuf), DPNERR_DOESNOTEXIST);
}
TEST_F(DirectPlay8AddressInitial, GetDevice)
{
GUID vbuf;
ASSERT_EQ(idp8->GetDevice(&vbuf), DPNERR_DOESNOTEXIST);
}
TEST_F(DirectPlay8AddressInitial, GetUserData)
{
unsigned char buf[256];
DWORD size = sizeof(buf);
ASSERT_EQ(idp8->GetUserData(buf, &size), DPNERR_DOESNOTEXIST);
}
class DirectPlay8AddressWithWStringComponent: public DirectPlay8AddressInitial
{
protected:
@ -455,3 +475,184 @@ TEST_F(DirectPlay8AddressWithGUIDComponent, ComponentByNameBufferSizeBig)
EXPECT_EQ(*(GUID*)(vbuf), REFVAL);
}
class DirectPlay8AddressSetSP: public DirectPlay8AddressInitial
{
protected:
virtual void SetUp() override
{
ASSERT_EQ(idp8->SetSP(&CLSID_DP8SP_TCPIP), S_OK);
}
};
TEST_F(DirectPlay8AddressSetSP, GetSP)
{
GUID vbuf;
ASSERT_EQ(idp8->GetSP(&vbuf), S_OK);
EXPECT_EQ(vbuf, CLSID_DP8SP_TCPIP);
}
TEST_F(DirectPlay8AddressSetSP, GetNumComponents)
{
DWORD num;
ASSERT_EQ(idp8->GetNumComponents(&num), S_OK);
EXPECT_EQ(num, (DWORD)(1));
}
TEST_F(DirectPlay8AddressSetSP, GetComponentByName)
{
GUID vbuf;
DWORD vsize = sizeof(vbuf);
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(DPNA_KEY_PROVIDER, (void*)(&vbuf), &vsize, &type), S_OK);
ASSERT_EQ(vsize, sizeof(vbuf));
EXPECT_EQ(vbuf, CLSID_DP8SP_TCPIP);
}
class DirectPlay8AddressSetSPTwice: public DirectPlay8AddressInitial
{
protected:
virtual void SetUp() override
{
ASSERT_EQ(idp8->SetSP(&CLSID_DP8SP_TCPIP), S_OK);
ASSERT_EQ(idp8->SetSP(&CLSID_DP8SP_SERIAL), S_OK);
}
};
TEST_F(DirectPlay8AddressSetSPTwice, GetSP)
{
GUID vbuf;
ASSERT_EQ(idp8->GetSP(&vbuf), S_OK);
EXPECT_EQ(vbuf, CLSID_DP8SP_SERIAL);
}
TEST_F(DirectPlay8AddressSetSPTwice, GetNumComponents)
{
DWORD num;
ASSERT_EQ(idp8->GetNumComponents(&num), S_OK);
EXPECT_EQ(num, (DWORD)(1));
}
TEST_F(DirectPlay8AddressSetSPTwice, GetComponentByName)
{
GUID vbuf;
DWORD vsize = sizeof(vbuf);
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(DPNA_KEY_PROVIDER, (void*)(&vbuf), &vsize, &type), S_OK);
ASSERT_EQ(vsize, sizeof(vbuf));
EXPECT_EQ(vbuf, CLSID_DP8SP_SERIAL);
}
class DirectPlay8AddressSetDevice: public DirectPlay8AddressInitial
{
protected:
virtual void SetUp() override
{
/* Interface GUIDs are system-dependant, but it doesn't need to be real. */
ASSERT_EQ(idp8->SetDevice(&CLSID_DP8SP_BLUETOOTH), S_OK);
}
};
TEST_F(DirectPlay8AddressSetDevice, GetDevice)
{
GUID vbuf;
ASSERT_EQ(idp8->GetDevice(&vbuf), S_OK);
EXPECT_EQ(vbuf, CLSID_DP8SP_BLUETOOTH);
}
TEST_F(DirectPlay8AddressSetDevice, GetNumComponents)
{
DWORD num;
ASSERT_EQ(idp8->GetNumComponents(&num), S_OK);
EXPECT_EQ(num, (DWORD)(1));
}
TEST_F(DirectPlay8AddressSetDevice, GetComponentByName)
{
GUID vbuf;
DWORD vsize = sizeof(vbuf);
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(DPNA_KEY_DEVICE, (void*)(&vbuf), &vsize, &type), S_OK);
ASSERT_EQ(vsize, sizeof(vbuf));
EXPECT_EQ(vbuf, CLSID_DP8SP_BLUETOOTH);
}
class DirectPlay8AddressSetUserData: public DirectPlay8AddressInitial
{
protected:
const unsigned char REFDATA[22] = { 0x00, 0x01, 0x02, 0x03, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 0xFF, 0xFE };
const DWORD REFSIZE = 22;
virtual void SetUp() override
{
/* Interface GUIDs are system-dependant, but it doesn't need to be real. */
ASSERT_EQ(idp8->SetUserData(REFDATA, REFSIZE), S_OK);
}
};
TEST_F(DirectPlay8AddressSetUserData, GetUserDataSizeZero)
{
DWORD size = 0;
ASSERT_EQ(idp8->GetUserData(NULL, &size), DPNERR_BUFFERTOOSMALL);
ASSERT_EQ(size, REFSIZE);
}
TEST_F(DirectPlay8AddressSetUserData, GetUserDataSizeSmall)
{
unsigned char buf[REFSIZE - 1];
DWORD size = sizeof(buf);
ASSERT_EQ(idp8->GetUserData(buf, &size), DPNERR_BUFFERTOOSMALL);
ASSERT_EQ(size, REFSIZE);
}
TEST_F(DirectPlay8AddressSetUserData, GetUserDataSizeExact)
{
unsigned char buf[REFSIZE];
DWORD size = sizeof(buf);
ASSERT_EQ(idp8->GetUserData(buf, &size), S_OK);
ASSERT_EQ(size, REFSIZE);
EXPECT_EQ(std::string((char*)(buf), REFSIZE), std::string((char*)(REFDATA), REFSIZE));
}
TEST_F(DirectPlay8AddressSetUserData, GetUserDataSizeBig)
{
unsigned char buf[256];
DWORD size = sizeof(buf);
ASSERT_EQ(idp8->GetUserData(buf, &size), S_OK);
/* BUG: DirectPlay is supposed to set pdwBufferSize to the size of the data passed to
* SetUserData(), the DirectX implementation doesn't, so we don't.
*/
// ASSERT_EQ(size, REFSIZE);
EXPECT_EQ(size, sizeof(buf));
EXPECT_EQ(std::string((char*)(buf), REFSIZE), std::string((char*)(REFDATA), REFSIZE));
}
TEST_F(DirectPlay8AddressSetUserData, GetNumComponents)
{
DWORD num;
ASSERT_EQ(idp8->GetNumComponents(&num), S_OK);
EXPECT_EQ(num, (DWORD)(0));
}
TEST_F(DirectPlay8AddressSetUserData, Clear)
{
ASSERT_EQ(idp8->Clear(), S_OK);
unsigned char buf[256];
DWORD size = sizeof(buf);
ASSERT_EQ(idp8->GetUserData(buf, &size), DPNERR_DOESNOTEXIST);
}