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

More DirectPlay8Address tests, fixed ANSI string components.

This commit is contained in:
Daniel Collins 2018-08-28 22:34:56 +01:00
parent 1405a9f127
commit 45a9f1b268
2 changed files with 260 additions and 4 deletions

View File

@ -370,14 +370,14 @@ HRESULT DirectPlay8Address::StringComponentA::get_component(LPVOID pvBuffer, PDW
{
*pdwDataType = DPNA_DATATYPE_STRING_ANSI;
if(*pdwBufferSize > value.length() && pvBuffer != NULL)
if(*pdwBufferSize >= value.length() && pvBuffer != NULL)
{
strcpy((char*)(pvBuffer), value.c_str());
*pdwBufferSize = value.length() + 1;
memcpy(pvBuffer, value.data(), value.length());
*pdwBufferSize = value.length();
return S_OK;
}
else{
*pdwBufferSize = value.length() + 1;
*pdwBufferSize = value.length();
return DPNERR_BUFFERTOOSMALL;
}
}

View File

@ -152,6 +152,15 @@ TEST_F(DirectPlay8AddressWithWStringComponent, ComponentByIndexSizeBig)
std::wstring(REFVAL, (REFVSIZE / sizeof(wchar_t))));
}
TEST_F(DirectPlay8AddressWithWStringComponent, ComponentByIndexWrongIndex)
{
DWORD ksize = sizeof(kbuf);
DWORD vsize = sizeof(vbuf);
DWORD type;
ASSERT_EQ(idp8->GetComponentByIndex(1, (wchar_t*)(kbuf), &ksize, (void*)(vbuf), &vsize, &type), DPNERR_DOESNOTEXIST);
}
TEST_F(DirectPlay8AddressWithWStringComponent, ComponentByNameBufferSizeZero)
{
DWORD vsize = 0;
@ -199,3 +208,250 @@ TEST_F(DirectPlay8AddressWithWStringComponent, ComponentByNameBufferSizeBig)
EXPECT_EQ(std::wstring((const wchar_t*)(vbuf), (vsize / sizeof(wchar_t))),
std::wstring(REFVAL, (REFVSIZE / sizeof(wchar_t))));
}
TEST_F(DirectPlay8AddressWithWStringComponent, ComponentByNameWrongName)
{
DWORD vsize = sizeof(vbuf);
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(L"wrongkey", (void*)(vbuf), &vsize, &type), DPNERR_DOESNOTEXIST);
}
TEST_F(DirectPlay8AddressWithWStringComponent, Clear)
{
ASSERT_EQ(idp8->Clear(), S_OK);
{
DWORD num;
ASSERT_EQ(idp8->GetNumComponents(&num), S_OK);
ASSERT_EQ(num, (DWORD)(0));
}
{
DWORD vsize = sizeof(vbuf);
DWORD type;
EXPECT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), DPNERR_DOESNOTEXIST);
}
{
DWORD ksize = sizeof(kbuf);
DWORD vsize = sizeof(vbuf);
DWORD type;
ASSERT_EQ(idp8->GetComponentByIndex(0, (wchar_t*)(kbuf), &ksize, (void*)(vbuf), &vsize, &type), DPNERR_DOESNOTEXIST);
}
}
class DirectPlay8AddressWithAStringComponent: public DirectPlay8AddressInitial
{
protected:
const wchar_t *REFKEY = L"key";
const char *REFVAL = "ASCII string value";
const DWORD REFVSIZE = 19;
unsigned char vbuf[256];
virtual void SetUp() override
{
memset(vbuf, 0xFF, sizeof(vbuf));
ASSERT_EQ(idp8->AddComponent(REFKEY, REFVAL, REFVSIZE, DPNA_DATATYPE_STRING_ANSI), S_OK);
}
};
TEST_F(DirectPlay8AddressWithAStringComponent, HasOneComponent)
{
DWORD num;
ASSERT_EQ(idp8->GetNumComponents(&num), S_OK);
EXPECT_EQ(num, (DWORD)(1));
}
TEST_F(DirectPlay8AddressWithAStringComponent, ComponentByNameBufferSizeZero)
{
DWORD vsize = 0;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, NULL, &vsize, &type), DPNERR_BUFFERTOOSMALL);
EXPECT_EQ(vsize, REFVSIZE);
}
TEST_F(DirectPlay8AddressWithAStringComponent, ComponentByNameBufferSizeSmall)
{
DWORD vsize = REFVSIZE - 1;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), DPNERR_BUFFERTOOSMALL);
EXPECT_EQ(vsize, REFVSIZE);
}
TEST_F(DirectPlay8AddressWithAStringComponent, ComponentByNameBufferSizeExact)
{
DWORD vsize = REFVSIZE;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), S_OK);
EXPECT_EQ(vsize, REFVSIZE);
EXPECT_EQ(type, (DWORD)(DPNA_DATATYPE_STRING_ANSI));
EXPECT_EQ(std::string((const char*)(vbuf), vsize), std::string(REFVAL, REFVSIZE));
}
TEST_F(DirectPlay8AddressWithAStringComponent, ComponentByNameBufferSizeBig)
{
DWORD vsize = REFVSIZE * 2;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), S_OK);
EXPECT_EQ(vsize, REFVSIZE);
EXPECT_EQ(type, (DWORD)(DPNA_DATATYPE_STRING_ANSI));
EXPECT_EQ(std::string((const char*)(vbuf), vsize), std::string(REFVAL, REFVSIZE));
}
class DirectPlay8AddressWithDWORDComponent: public DirectPlay8AddressInitial
{
protected:
const wchar_t *REFKEY = L"key";
const DWORD REFVAL = 0x0EA7BEEF;
const DWORD REFVSIZE = sizeof(REFVAL);
unsigned char vbuf[256];
virtual void SetUp() override
{
memset(vbuf, 0xFF, sizeof(vbuf));
ASSERT_EQ(idp8->AddComponent(REFKEY, &REFVAL, REFVSIZE, DPNA_DATATYPE_DWORD), S_OK);
}
};
TEST_F(DirectPlay8AddressWithDWORDComponent, HasOneComponent)
{
DWORD num;
ASSERT_EQ(idp8->GetNumComponents(&num), S_OK);
EXPECT_EQ(num, (DWORD)(1));
}
TEST_F(DirectPlay8AddressWithDWORDComponent, ComponentByNameBufferSizeZero)
{
DWORD vsize = 0;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, NULL, &vsize, &type), DPNERR_BUFFERTOOSMALL);
EXPECT_EQ(vsize, REFVSIZE);
}
TEST_F(DirectPlay8AddressWithDWORDComponent, ComponentByNameBufferSizeSmall)
{
DWORD vsize = REFVSIZE - 1;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), DPNERR_BUFFERTOOSMALL);
EXPECT_EQ(vsize, REFVSIZE);
}
TEST_F(DirectPlay8AddressWithDWORDComponent, ComponentByNameBufferSizeExact)
{
DWORD vsize = REFVSIZE;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), S_OK);
EXPECT_EQ(vsize, REFVSIZE);
EXPECT_EQ(type, (DWORD)(DPNA_DATATYPE_DWORD));
EXPECT_EQ(*(DWORD*)(vbuf), REFVAL);
}
TEST_F(DirectPlay8AddressWithDWORDComponent, ComponentByNameBufferSizeBig)
{
DWORD vsize = REFVSIZE * 2;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), S_OK);
EXPECT_EQ(vsize, REFVSIZE);
EXPECT_EQ(type, (DWORD)(DPNA_DATATYPE_DWORD));
EXPECT_EQ(*(DWORD*)(vbuf), REFVAL);
}
class DirectPlay8AddressWithGUIDComponent: public DirectPlay8AddressInitial
{
protected:
const wchar_t *REFKEY = L"key";
const GUID REFVAL = CLSID_DirectPlay8Address;
const DWORD REFVSIZE = sizeof(REFVAL);
unsigned char vbuf[256];
virtual void SetUp() override
{
memset(vbuf, 0xFF, sizeof(vbuf));
ASSERT_EQ(idp8->AddComponent(REFKEY, &REFVAL, REFVSIZE, DPNA_DATATYPE_GUID), S_OK);
}
};
TEST_F(DirectPlay8AddressWithGUIDComponent, HasOneComponent)
{
DWORD num;
ASSERT_EQ(idp8->GetNumComponents(&num), S_OK);
EXPECT_EQ(num, (DWORD)(1));
}
TEST_F(DirectPlay8AddressWithGUIDComponent, ComponentByNameBufferSizeZero)
{
DWORD vsize = 0;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, NULL, &vsize, &type), DPNERR_BUFFERTOOSMALL);
EXPECT_EQ(vsize, REFVSIZE);
}
TEST_F(DirectPlay8AddressWithGUIDComponent, ComponentByNameBufferSizeSmall)
{
DWORD vsize = REFVSIZE - 1;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), DPNERR_BUFFERTOOSMALL);
EXPECT_EQ(vsize, REFVSIZE);
}
TEST_F(DirectPlay8AddressWithGUIDComponent, ComponentByNameBufferSizeExact)
{
DWORD vsize = REFVSIZE;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), S_OK);
EXPECT_EQ(vsize, REFVSIZE);
EXPECT_EQ(type, (DWORD)(DPNA_DATATYPE_GUID));
EXPECT_EQ(*(GUID*)(vbuf), REFVAL);
}
TEST_F(DirectPlay8AddressWithGUIDComponent, ComponentByNameBufferSizeBig)
{
DWORD vsize = REFVSIZE * 2;
DWORD type;
ASSERT_EQ(idp8->GetComponentByName(REFKEY, (void*)(vbuf), &vsize, &type), S_OK);
EXPECT_EQ(vsize, REFVSIZE);
EXPECT_EQ(type, (DWORD)(DPNA_DATATYPE_GUID));
EXPECT_EQ(*(GUID*)(vbuf), REFVAL);
}