dplayx: Tests for CreateGroup.
This commit is contained in:
parent
e375b0c4a2
commit
58837a6ceb
|
@ -1016,6 +1016,11 @@ static HRESULT WINAPI DP_IF_CreateGroup
|
||||||
This, lpMsgHdr, lpidGroup, lpGroupName, lpData, dwDataSize,
|
This, lpMsgHdr, lpidGroup, lpGroupName, lpData, dwDataSize,
|
||||||
dwFlags, bAnsi );
|
dwFlags, bAnsi );
|
||||||
|
|
||||||
|
if( This->dp2->connectionInitialized == NO_PROVIDER )
|
||||||
|
{
|
||||||
|
return DPERR_UNINITIALIZED;
|
||||||
|
}
|
||||||
|
|
||||||
/* If the name is not specified, we must provide one */
|
/* If the name is not specified, we must provide one */
|
||||||
if( DPID_UNKNOWN == *lpidGroup )
|
if( DPID_UNKNOWN == *lpidGroup )
|
||||||
{
|
{
|
||||||
|
@ -3506,6 +3511,11 @@ static HRESULT WINAPI DP_IF_CreateGroupInGroup
|
||||||
This, idParentGroup, lpidGroup, lpGroupName, lpData,
|
This, idParentGroup, lpidGroup, lpGroupName, lpData,
|
||||||
dwDataSize, dwFlags, bAnsi );
|
dwDataSize, dwFlags, bAnsi );
|
||||||
|
|
||||||
|
if( This->dp2->connectionInitialized == NO_PROVIDER )
|
||||||
|
{
|
||||||
|
return DPERR_UNINITIALIZED;
|
||||||
|
}
|
||||||
|
|
||||||
/* Verify that the specified parent is valid */
|
/* Verify that the specified parent is valid */
|
||||||
if( ( lpGParentData = DP_FindAnyGroup( (IDirectPlay2AImpl*)This,
|
if( ( lpGParentData = DP_FindAnyGroup( (IDirectPlay2AImpl*)This,
|
||||||
idParentGroup ) ) == NULL
|
idParentGroup ) ) == NULL
|
||||||
|
|
|
@ -49,6 +49,11 @@
|
||||||
ok( IsEqualGUID(expected, result), \
|
ok( IsEqualGUID(expected, result), \
|
||||||
"expected=%s got=%s\n", \
|
"expected=%s got=%s\n", \
|
||||||
Guid2str(expected), Guid2str(result) );
|
Guid2str(expected), Guid2str(result) );
|
||||||
|
#define checkConv(expected, result, function) \
|
||||||
|
ok( (expected) == (result), \
|
||||||
|
"expected=0x%08x(%s) got=0x%08x(%s)\n", \
|
||||||
|
expected, function(expected), \
|
||||||
|
result, function(result) );
|
||||||
|
|
||||||
|
|
||||||
DEFINE_GUID(appGuid, 0xbdcfe03e, 0xf0ec, 0x415b, 0x82, 0x11, 0x6f, 0x86, 0xd8, 0x19, 0x7f, 0xe1);
|
DEFINE_GUID(appGuid, 0xbdcfe03e, 0xf0ec, 0x415b, 0x82, 0x11, 0x6f, 0x86, 0xd8, 0x19, 0x7f, 0xe1);
|
||||||
|
@ -209,6 +214,31 @@ static LPCSTR dpResult2str(HRESULT hr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LPCSTR dpMsgType2str(DWORD dwType)
|
||||||
|
{
|
||||||
|
switch(dwType)
|
||||||
|
{
|
||||||
|
case DPSYS_CREATEPLAYERORGROUP: return "DPSYS_CREATEPLAYERORGROUP";
|
||||||
|
case DPSYS_DESTROYPLAYERORGROUP: return "DPSYS_DESTROYPLAYERORGROUP";
|
||||||
|
case DPSYS_ADDPLAYERTOGROUP: return "DPSYS_ADDPLAYERTOGROUP";
|
||||||
|
case DPSYS_DELETEPLAYERFROMGROUP: return "DPSYS_DELETEPLAYERFROMGROUP";
|
||||||
|
case DPSYS_SESSIONLOST: return "DPSYS_SESSIONLOST";
|
||||||
|
case DPSYS_HOST: return "DPSYS_HOST";
|
||||||
|
case DPSYS_SETPLAYERORGROUPDATA: return "DPSYS_SETPLAYERORGROUPDATA";
|
||||||
|
case DPSYS_SETPLAYERORGROUPNAME: return "DPSYS_SETPLAYERORGROUPNAME";
|
||||||
|
case DPSYS_SETSESSIONDESC: return "DPSYS_SETSESSIONDESC";
|
||||||
|
case DPSYS_ADDGROUPTOGROUP: return "DPSYS_ADDGROUPTOGROUP";
|
||||||
|
case DPSYS_DELETEGROUPFROMGROUP: return "DPSYS_DELETEGROUPFROMGROUP";
|
||||||
|
case DPSYS_SECUREMESSAGE: return "DPSYS_SECUREMESSAGE";
|
||||||
|
case DPSYS_STARTSESSION: return "DPSYS_STARTSESSION";
|
||||||
|
case DPSYS_CHAT: return "DPSYS_DPSYS_CHAT";
|
||||||
|
case DPSYS_SETGROUPOWNER: return "DPSYS_SETGROUPOWNER";
|
||||||
|
case DPSYS_SENDCOMPLETE: return "DPSYS_SENDCOMPLETE";
|
||||||
|
|
||||||
|
default: return "UNKNOWN";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static LPCSTR dwFlags2str(DWORD dwFlags, DWORD flagType)
|
static LPCSTR dwFlags2str(DWORD dwFlags, DWORD flagType)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -3060,6 +3090,314 @@ static void test_GetPlayerFlags(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* CreateGroup
|
||||||
|
CreateGroupInGroup */
|
||||||
|
|
||||||
|
static void test_CreateGroup(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
LPDIRECTPLAY4 pDP;
|
||||||
|
DPSESSIONDESC2 dpsd;
|
||||||
|
DPID idFrom, idTo, dpid, idGroup, idGroupParent;
|
||||||
|
DPNAME groupName;
|
||||||
|
HRESULT hr;
|
||||||
|
UINT i;
|
||||||
|
|
||||||
|
LPCSTR lpData = "data";
|
||||||
|
DWORD dwDataSize = strlen(lpData)+1;
|
||||||
|
LPDPMSG_CREATEPLAYERORGROUP lpDataGet = HeapAlloc( GetProcessHeap(),
|
||||||
|
HEAP_ZERO_MEMORY,
|
||||||
|
1024 );
|
||||||
|
DWORD dwDataSizeGet = 1024;
|
||||||
|
CallbackData callbackData;
|
||||||
|
|
||||||
|
|
||||||
|
CoCreateInstance( &CLSID_DirectPlay, NULL, CLSCTX_ALL,
|
||||||
|
&IID_IDirectPlay4A, (LPVOID*) &pDP );
|
||||||
|
ZeroMemory( &dpsd, sizeof(DPSESSIONDESC2) );
|
||||||
|
dpsd.dwSize = sizeof(DPSESSIONDESC2);
|
||||||
|
dpsd.guidApplication = appGuid;
|
||||||
|
dpsd.dwMaxPlayers = 10;
|
||||||
|
ZeroMemory( &groupName, sizeof(DPNAME) );
|
||||||
|
|
||||||
|
|
||||||
|
/* No service provider */
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup, NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DPERR_UNINITIALIZED, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, 0, &idGroup, NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DPERR_UNINITIALIZED, hr );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
init_TCPIP_provider( pDP, "127.0.0.1", 0 );
|
||||||
|
|
||||||
|
|
||||||
|
/* No session */
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
todo_wine checkHR( DPERR_INVALIDPARAMS, hr );
|
||||||
|
|
||||||
|
if ( hr == DPERR_UNINITIALIZED )
|
||||||
|
{
|
||||||
|
skip( "CreateGroup not implemented\n" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, 0, &idGroup,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DPERR_INVALIDGROUP, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, 2, &idGroup,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DPERR_INVALIDGROUP, hr );
|
||||||
|
|
||||||
|
|
||||||
|
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_CREATE );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
IDirectPlayX_CreatePlayer( pDP, &dpid,
|
||||||
|
NULL, NULL, NULL, 0, 0 );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* With name */
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
&groupName, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
|
||||||
|
&groupName, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
|
||||||
|
groupName.dwSize = sizeof(DPNAME);
|
||||||
|
groupName.lpszShortNameA = (LPSTR) lpData;
|
||||||
|
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
&groupName, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
|
||||||
|
&groupName, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
|
||||||
|
/* Message checking */
|
||||||
|
for (i=0; i<6; i++)
|
||||||
|
{
|
||||||
|
dwDataSizeGet = 1024;
|
||||||
|
hr = IDirectPlayX_Receive( pDP, &idFrom, &idTo, 0,
|
||||||
|
(LPVOID) lpDataGet, &dwDataSizeGet );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
if ( NULL == lpDataGet->dpnName.lpszShortNameA )
|
||||||
|
{
|
||||||
|
check( 48, dwDataSizeGet );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
check( 48 + dwDataSize, dwDataSizeGet );
|
||||||
|
checkStr( lpData, lpDataGet->dpnName.lpszShortNameA );
|
||||||
|
}
|
||||||
|
check( DPID_SYSMSG, idFrom );
|
||||||
|
checkConv( DPSYS_CREATEPLAYERORGROUP, lpDataGet->dwType, dpMsgType2str );
|
||||||
|
check( DPPLAYERTYPE_GROUP, lpDataGet->dwPlayerType );
|
||||||
|
checkFlags( DPGROUP_LOCAL, lpDataGet->dwFlags, FLAGS_DPGROUP );
|
||||||
|
}
|
||||||
|
check_messages( pDP, &dpid, 1, &callbackData );
|
||||||
|
checkStr( "", callbackData.szTrace1 );
|
||||||
|
|
||||||
|
|
||||||
|
/* With data */
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, (LPVOID) lpData, -1, 0 );
|
||||||
|
checkHR( DPERR_INVALIDPARAMS, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, (LPVOID) lpData, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, NULL, dwDataSize, 0 );
|
||||||
|
checkHR( DPERR_INVALIDPARAMS, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, (LPVOID) lpData, dwDataSize, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
|
||||||
|
NULL, (LPVOID) lpData, -1, 0 );
|
||||||
|
checkHR( DPERR_INVALIDPARAMS, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
|
||||||
|
NULL, (LPVOID) lpData, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
|
||||||
|
NULL, NULL, dwDataSize, 0 );
|
||||||
|
checkHR( DPERR_INVALIDPARAMS, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroup, &idGroup,
|
||||||
|
NULL, (LPVOID)lpData, dwDataSize, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroupParent,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
|
||||||
|
/* Message checking */
|
||||||
|
for (i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
dwDataSizeGet = 1024;
|
||||||
|
hr = IDirectPlayX_Receive( pDP, &idFrom, &idTo, 0,
|
||||||
|
(LPVOID) lpDataGet, &dwDataSizeGet );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
check( 48 + lpDataGet->dwDataSize, dwDataSizeGet );
|
||||||
|
check( DPID_SYSMSG, idFrom );
|
||||||
|
checkConv( DPSYS_CREATEPLAYERORGROUP, lpDataGet->dwType, dpMsgType2str );
|
||||||
|
check( DPPLAYERTYPE_GROUP, lpDataGet->dwPlayerType );
|
||||||
|
checkFlags( DPGROUP_LOCAL, lpDataGet->dwFlags, FLAGS_DPGROUP );
|
||||||
|
}
|
||||||
|
check_messages( pDP, &dpid, 1, &callbackData );
|
||||||
|
checkStr( "", callbackData.szTrace1 );
|
||||||
|
|
||||||
|
|
||||||
|
/* Flags and idGroupParent */
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, NULL, 0, DPGROUP_HIDDEN );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, NULL, 0, DPGROUP_STAGINGAREA );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, NULL, 0,
|
||||||
|
DPGROUP_HIDDEN | DPGROUP_STAGINGAREA );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroupParent, &idGroup,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroupParent, &idGroup,
|
||||||
|
NULL, NULL, 0, DPGROUP_HIDDEN );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroupParent, &idGroup,
|
||||||
|
NULL, NULL, 0, DPGROUP_STAGINGAREA );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroupInGroup( pDP, idGroupParent, &idGroup,
|
||||||
|
NULL, NULL, 0,
|
||||||
|
DPGROUP_HIDDEN |
|
||||||
|
DPGROUP_STAGINGAREA );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
|
||||||
|
/* Message checking */
|
||||||
|
for (i=0; i<8; i++)
|
||||||
|
{
|
||||||
|
dwDataSizeGet = 1024;
|
||||||
|
hr = IDirectPlayX_Receive( pDP, &idFrom, &idTo, 0,
|
||||||
|
(LPVOID) lpDataGet, &dwDataSizeGet );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
check( 48, dwDataSizeGet );
|
||||||
|
check( DPID_SYSMSG, idFrom );
|
||||||
|
checkConv( DPSYS_CREATEPLAYERORGROUP, lpDataGet->dwType, dpMsgType2str );
|
||||||
|
check( DPPLAYERTYPE_GROUP, lpDataGet->dwPlayerType );
|
||||||
|
|
||||||
|
if ( lpDataGet->dpIdParent != 0 )
|
||||||
|
{
|
||||||
|
check( idGroupParent, lpDataGet->dpIdParent );
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (i%4)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
checkFlags( DPGROUP_LOCAL,
|
||||||
|
lpDataGet->dwFlags, FLAGS_DPGROUP );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
checkFlags( DPGROUP_LOCAL | DPGROUP_HIDDEN,
|
||||||
|
lpDataGet->dwFlags, FLAGS_DPGROUP );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
checkFlags( DPGROUP_STAGINGAREA | DPGROUP_LOCAL,
|
||||||
|
lpDataGet->dwFlags, FLAGS_DPGROUP );
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
checkFlags( DPGROUP_STAGINGAREA | DPGROUP_LOCAL | DPGROUP_HIDDEN,
|
||||||
|
lpDataGet->dwFlags, FLAGS_DPGROUP );
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
check_messages( pDP, &dpid, 1, &callbackData );
|
||||||
|
checkStr( "", callbackData.szTrace1 );
|
||||||
|
|
||||||
|
|
||||||
|
/* If a group is created in C/S mode, no messages are sent */
|
||||||
|
|
||||||
|
/* - Peer 2 peer */
|
||||||
|
IDirectPlayX_Close( pDP );
|
||||||
|
|
||||||
|
dpsd.dwFlags = 0;
|
||||||
|
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_CREATE );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
hr = IDirectPlayX_CreatePlayer( pDP, &dpid, NULL, NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup, NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
/* Messages are received */
|
||||||
|
check_messages( pDP, &dpid, 1, &callbackData );
|
||||||
|
checkStr( "S0,", callbackData.szTrace1 );
|
||||||
|
|
||||||
|
|
||||||
|
/* - Client/Server */
|
||||||
|
IDirectPlayX_Close( pDP );
|
||||||
|
|
||||||
|
dpsd.dwFlags = DPSESSION_CLIENTSERVER;
|
||||||
|
hr = IDirectPlayX_Open( pDP, &dpsd, DPOPEN_CREATE );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
hr = IDirectPlayX_CreatePlayer( pDP, &dpid,
|
||||||
|
NULL, NULL, NULL, 0,
|
||||||
|
DPPLAYER_SERVERPLAYER );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
hr = IDirectPlayX_CreateGroup( pDP, &idGroup,
|
||||||
|
NULL, NULL, 0, 0 );
|
||||||
|
checkHR( DP_OK, hr );
|
||||||
|
|
||||||
|
/* No messages */
|
||||||
|
check_messages( pDP, &dpid, 1, &callbackData );
|
||||||
|
checkStr( "S0,", callbackData.szTrace1 ); /* Or at least there
|
||||||
|
shouldn't be messages... */
|
||||||
|
|
||||||
|
|
||||||
|
HeapFree( GetProcessHeap(), 0, lpDataGet );
|
||||||
|
IDirectPlayX_Release( pDP );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
START_TEST(dplayx)
|
START_TEST(dplayx)
|
||||||
{
|
{
|
||||||
|
@ -3082,5 +3420,7 @@ START_TEST(dplayx)
|
||||||
test_GetPlayerAddress();
|
test_GetPlayerAddress();
|
||||||
test_GetPlayerFlags();
|
test_GetPlayerFlags();
|
||||||
|
|
||||||
|
test_CreateGroup();
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue