Module: wine Branch: master Commit: 724f0ea4d6bab954b9840a19e55eaa790028ab89 URL: http://source.winehq.org/git/wine.git/?a=commit;h=724f0ea4d6bab954b9840a19e5...
Author: Ismael Barros razielmine@gmail.com Date: Sun Aug 3 13:22:40 2008 +0200
dplayx: Tests for CreatePlayer.
---
dlls/dplayx/dplay.c | 10 +++ dlls/dplayx/tests/dplayx.c | 169 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+), 0 deletions(-)
diff --git a/dlls/dplayx/dplay.c b/dlls/dplayx/dplay.c index 468b439..b5f94d3 100644 --- a/dlls/dplayx/dplay.c +++ b/dlls/dplayx/dplay.c @@ -1611,6 +1611,11 @@ static HRESULT WINAPI DirectPlay2AImpl_CreatePlayer { IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
+ if( lpidPlayer == NULL ) + { + return DPERR_INVALIDPARAMS; + } + if( dwFlags & DPPLAYER_SERVERPLAYER ) { *lpidPlayer = DPID_SERVERPLAYER; @@ -1630,6 +1635,11 @@ static HRESULT WINAPI DirectPlay2WImpl_CreatePlayer { IDirectPlay2Impl *This = (IDirectPlay2Impl *)iface;
+ if( lpidPlayer == NULL ) + { + return DPERR_INVALIDPARAMS; + } + if( dwFlags & DPPLAYER_SERVERPLAYER ) { *lpidPlayer = DPID_SERVERPLAYER; diff --git a/dlls/dplayx/tests/dplayx.c b/dlls/dplayx/tests/dplayx.c index ac9da5d..7cac4b5 100644 --- a/dlls/dplayx/tests/dplayx.c +++ b/dlls/dplayx/tests/dplayx.c @@ -1759,6 +1759,173 @@ static void test_SessionDesc(void)
}
+/* CreatePlayer */ + +static void test_CreatePlayer(void) +{ + + LPDIRECTPLAY4 pDP[2]; + DPSESSIONDESC2 dpsd; + DPNAME name; + DPID dpid; + HRESULT hr; + + + CoCreateInstance( &CLSID_DirectPlay, NULL, CLSCTX_ALL, + &IID_IDirectPlay4A, (LPVOID*) &pDP[0] ); + CoCreateInstance( &CLSID_DirectPlay, NULL, CLSCTX_ALL, + &IID_IDirectPlay4A, (LPVOID*) &pDP[1] ); + ZeroMemory( &dpsd, sizeof(DPSESSIONDESC2) ); + ZeroMemory( &name, sizeof(DPNAME) ); + + + /* Connection not initialized */ + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, 0, 0 ); + checkHR( DPERR_UNINITIALIZED, hr ); + + + init_TCPIP_provider( pDP[0], "127.0.0.1", 0 ); + init_TCPIP_provider( pDP[1], "127.0.0.1", 0 ); + + + /* Session not open */ + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, 0, 0 ); + todo_wine checkHR( DPERR_INVALIDPARAMS, hr ); + + if ( hr == DPERR_UNINITIALIZED ) + { + skip( "CreatePlayer not implemented\n" ); + return; + } + + dpsd.dwSize = sizeof(DPSESSIONDESC2); + dpsd.guidApplication = appGuid; + IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE ); + + + /* Player name */ + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, 0, 0 ); + checkHR( DP_OK, hr ); + + + name.dwSize = -1; + + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, &name, NULL, NULL, 0, 0 ); + checkHR( DP_OK, hr ); + + + name.dwSize = sizeof(DPNAME); + name.lpszShortNameA = (LPSTR) "test"; + name.lpszLongNameA = NULL; + + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, &name, NULL, NULL, + 0, 0 ); + checkHR( DP_OK, hr ); + + + /* Null dpid */ + hr = IDirectPlayX_CreatePlayer( pDP[0], NULL, NULL, NULL, NULL, + 0, 0 ); + checkHR( DPERR_INVALIDPARAMS, hr ); + + + /* There can only be one server player */ + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SERVERPLAYER ); + checkHR( DP_OK, hr ); + check( DPID_SERVERPLAYER, dpid ); + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SERVERPLAYER ); + checkHR( DPERR_CANTCREATEPLAYER, hr ); + + IDirectPlayX_DestroyPlayer( pDP[0], dpid ); + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SERVERPLAYER ); + checkHR( DP_OK, hr ); + check( DPID_SERVERPLAYER, dpid ); + IDirectPlayX_DestroyPlayer( pDP[0], dpid ); + + + /* Flags */ + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, 0 ); + checkHR( DP_OK, hr ); + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SERVERPLAYER ); + checkHR( DP_OK, hr ); + check( DPID_SERVERPLAYER, dpid ); + IDirectPlayX_DestroyPlayer( pDP[0], dpid ); + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SPECTATOR ); + checkHR( DP_OK, hr ); + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, ( DPPLAYER_SERVERPLAYER | + DPPLAYER_SPECTATOR ) ); + checkHR( DP_OK, hr ); + check( DPID_SERVERPLAYER, dpid ); + IDirectPlayX_DestroyPlayer( pDP[0], dpid ); + + + /* Session with DPSESSION_NEWPLAYERSDISABLED */ + IDirectPlayX_Close( pDP[0] ); + dpsd.dwFlags = DPSESSION_NEWPLAYERSDISABLED; + hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE ); + checkHR( DP_OK, hr ); + + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, 0 ); + checkHR( DPERR_CANTCREATEPLAYER, hr ); + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SERVERPLAYER ); + checkHR( DPERR_CANTCREATEPLAYER, hr ); + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SPECTATOR ); + checkHR( DPERR_CANTCREATEPLAYER, hr ); + + + /* Creating players in a Client/Server session */ + IDirectPlayX_Close( pDP[0] ); + dpsd.dwFlags = DPSESSION_CLIENTSERVER; + hr = IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE ); + checkHR( DP_OK, hr ); + hr = IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join, + (LPVOID) pDP[1], 0 ); + checkHR( DP_OK, hr ); + + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, 0 ); + checkHR( DPERR_ACCESSDENIED, hr ); + + hr = IDirectPlayX_CreatePlayer( pDP[0], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SERVERPLAYER ); + checkHR( DP_OK, hr ); + check( DPID_SERVERPLAYER, dpid ); + + hr = IDirectPlayX_CreatePlayer( pDP[1], &dpid, NULL, NULL, NULL, + 0, DPPLAYER_SERVERPLAYER ); + checkHR( DPERR_INVALIDFLAGS, hr ); + + hr = IDirectPlayX_CreatePlayer( pDP[1], &dpid, NULL, NULL, NULL, + 0, 0 ); + checkHR( DP_OK, hr ); + + + IDirectPlayX_Release( pDP[0] ); + IDirectPlayX_Release( pDP[1] ); + +} +
START_TEST(dplayx) { @@ -1773,5 +1940,7 @@ START_TEST(dplayx) test_EnumSessions(); test_SessionDesc();
+ test_CreatePlayer(); + CoUninitialize(); }