Ismael Barros : dplayx: Tests for GetMessageCount.

Alexandre Julliard julliard at winehq.org
Wed Aug 20 08:14:03 CDT 2008


Module: wine
Branch: master
Commit: 4db050d800c087f1ba87e11c6c72e1be261568bb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4db050d800c087f1ba87e11c6c72e1be261568bb

Author: Ismael Barros <razielmine at gmail.com>
Date:   Tue Aug  5 03:56:18 2008 +0200

dplayx: Tests for GetMessageCount.

---

 dlls/dplayx/tests/dplayx.c |  222 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 222 insertions(+), 0 deletions(-)

diff --git a/dlls/dplayx/tests/dplayx.c b/dlls/dplayx/tests/dplayx.c
index 006a0ea..2ea8ca5 100644
--- a/dlls/dplayx/tests/dplayx.c
+++ b/dlls/dplayx/tests/dplayx.c
@@ -5460,6 +5460,227 @@ static void test_Receive(void)
 
 }
 
+/* GetMessageCount */
+
+static void test_GetMessageCount(void)
+{
+
+    LPDIRECTPLAY4 pDP[2];
+    DPSESSIONDESC2 dpsd;
+    DPID dpid[4];
+    HRESULT hr;
+    UINT i;
+    DWORD dwCount;
+
+    DWORD dwDataSize = 1024;
+    LPVOID lpData = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, dwDataSize );
+    CallbackData callbackData;
+
+
+    for (i=0; i<2; i++)
+    {
+        CoCreateInstance( &CLSID_DirectPlay, NULL, CLSCTX_ALL,
+                          &IID_IDirectPlay4A, (LPVOID*) &pDP[i] );
+    }
+    ZeroMemory( &dpsd, sizeof(DPSESSIONDESC2) );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], 0,  &dwCount );
+    todo_wine checkHR( DPERR_UNINITIALIZED, hr );
+    check( -1, dwCount );
+
+    if ( hr == DP_OK )
+    {
+        skip( "GetMessageCount not implemented\n" );
+        return;
+    }
+
+
+    init_TCPIP_provider( pDP[0], "127.0.0.1", 0 );
+    init_TCPIP_provider( pDP[1], "127.0.0.1", 0 );
+
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+
+    dpsd.dwSize = sizeof(DPSESSIONDESC2);
+    dpsd.guidApplication = appGuid;
+    dpsd.dwMaxPlayers = 10;
+    IDirectPlayX_Open( pDP[0], &dpsd, DPOPEN_CREATE );
+    IDirectPlayX_EnumSessions( pDP[1], &dpsd, 0, EnumSessions_cb_join,
+                               (LPVOID) pDP[1], 0 );
+
+    IDirectPlayX_CreatePlayer( pDP[0], &dpid[0], NULL, NULL, NULL, 0, 0 );
+    IDirectPlayX_CreatePlayer( pDP[0], &dpid[1], NULL, NULL, NULL, 0, 0 );
+    IDirectPlayX_CreatePlayer( pDP[1], &dpid[3], NULL, NULL, NULL, 0, 0 );
+    IDirectPlayX_CreatePlayer( pDP[0], &dpid[2], NULL, NULL, NULL, 0, 0 );
+
+
+    /* Incorrect parameters */
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[0], NULL );
+    checkHR( DPERR_INVALIDPARAMS, hr );
+    check( -1, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], 0, NULL );
+    checkHR( DPERR_INVALIDPARAMS, hr );
+    check( -1, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], -1, &dwCount );
+    checkHR( DPERR_INVALIDPLAYER, hr );
+    check( -1, dwCount );
+
+
+    /* Correct parameters */
+    /* Player creation messages */
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 5, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[1], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 1, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[0], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 3, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[1], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 2, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[3], &dwCount );
+    checkHR( DP_OK, hr );
+    /* Remote player: doesn't throw error but result is 0 and not 1 */
+    check( 0, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[1], dpid[3], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 1, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[1], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 2, dwCount );
+
+
+    /* Purge queues */
+    check_messages( pDP[0], dpid, 6, &callbackData );
+    checkStr( "S0,S1,S0,S1,S0,", callbackData.szTrace1 );
+    check_messages( pDP[1], dpid, 6, &callbackData );
+    checkStr( "S3,", callbackData.szTrace1 );
+
+
+    /* Ensure queues is purged */
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[1], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+
+    /* Send data messages */
+    for (i=0; i<5; i++)
+        IDirectPlayX_Send( pDP[0], dpid[0], dpid[1], 0, lpData, dwDataSize );
+    for (i=0; i<6; i++)
+        IDirectPlayX_Send( pDP[0], dpid[1], dpid[2], 0, lpData, dwDataSize );
+    for (i=0; i<7; i++)
+        IDirectPlayX_Send( pDP[0], dpid[2], dpid[3], 0, lpData, dwDataSize );
+
+
+    /* Check all messages are in the queues */
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 11, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[1], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 7, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[0], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[1], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 5, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[2], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 6, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[1], dpid[3], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 7, dwCount );
+
+
+    /* Purge queues again */
+    check_messages( pDP[0], dpid, 6, &callbackData );
+    checkStr( "01,01,01,01,01,"
+              "12,12,12,12,12,12,", callbackData.szTrace1 );
+    check_messages( pDP[1], dpid, 6, &callbackData );
+    checkStr( "23,23,23,23,23,23,23,", callbackData.szTrace1 );
+
+
+    /* Check queues are purged */
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[1], 0, &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[0], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[1], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[0], dpid[2], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+    dwCount = -1;
+    hr = IDirectPlayX_GetMessageCount( pDP[1], dpid[3], &dwCount );
+    checkHR( DP_OK, hr );
+    check( 0, dwCount );
+
+
+    HeapFree( GetProcessHeap(), 0, lpData );
+    IDirectPlayX_Release( pDP[0] );
+    IDirectPlayX_Release( pDP[1] );
+
+}
+
 
 START_TEST(dplayx)
 {
@@ -5494,6 +5715,7 @@ START_TEST(dplayx)
 
     test_Send();
     test_Receive();
+    test_GetMessageCount();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list