Mariusz Pluciński : gameux/tests: Add test of creating IGameStatistics instance.

Alexandre Julliard julliard at winehq.org
Tue Sep 21 13:59:28 CDT 2010


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

Author: Mariusz Pluciński <vshader at gmail.com>
Date:   Mon Sep 20 15:04:56 2010 +0200

gameux/tests: Add test of creating IGameStatistics instance.

---

 dlls/gameux/tests/gamestatistics.c |  117 +++++++++++++++++++++++++++++++++++-
 1 files changed, 115 insertions(+), 2 deletions(-)

diff --git a/dlls/gameux/tests/gamestatistics.c b/dlls/gameux/tests/gamestatistics.c
index 3a8260c..1f5e9d2 100644
--- a/dlls/gameux/tests/gamestatistics.c
+++ b/dlls/gameux/tests/gamestatistics.c
@@ -20,34 +20,147 @@
 
 #define COBJMACROS
 
+#include "shlwapi.h"
+#include "oleauto.h"
+
 #include "gameux.h"
 #include "wine/test.h"
 
-static void test_create( void )
+/*******************************************************************************
+ * utilities
+ */
+static IGameExplorer *ge = NULL;
+static WCHAR sExeName[MAX_PATH] = {0};
+static GUID gameInstanceId;
+/*******************************************************************************
+ * _registerGame
+ * Registers test suite executable as game in Games Explorer. Required to test
+ * game statistics.
+ */
+static HRESULT _registerGame(void) {
+    HRESULT hr;
+    WCHAR sExePath[MAX_PATH];
+    BSTR bstrExeName, bstrExePath;
+    DWORD dwExeNameLen;
+
+    /* prepare path to binary */
+    dwExeNameLen = GetModuleFileNameW(NULL, sExeName, sizeof (sExeName) / sizeof (sExeName[0]));
+    hr = (dwExeNameLen!= 0 ? S_OK : E_FAIL);
+    lstrcpynW(sExePath, sExeName, StrRChrW(sExeName, NULL, '\\') - sExeName + 1);
+
+    bstrExeName = SysAllocString(sExeName);
+    if(!bstrExeName) hr = E_OUTOFMEMORY;
+
+    bstrExePath = SysAllocString(sExePath);
+    if(!bstrExePath) hr = E_OUTOFMEMORY;
+
+    if(SUCCEEDED(hr))
+    {
+        gameInstanceId = GUID_NULL;
+        hr = CoCreateInstance(&CLSID_GameExplorer, NULL, CLSCTX_INPROC_SERVER,
+                              &IID_IGameExplorer, (LPVOID*)&ge);
+    }
+
+    if(SUCCEEDED(hr))
+        hr = IGameExplorer_AddGame(ge, bstrExeName, bstrExePath,
+                                   GIS_CURRENT_USER, &gameInstanceId);
+
+    if(FAILED(hr) && ge)
+    {
+        IGameExplorer_Release(ge);
+        ge = NULL;
+    }
+
+    SysFreeString(bstrExeName);
+    SysFreeString(bstrExePath);
+    return hr;
+}
+/*******************************************************************************
+ * _unregisterGame
+ * Unregisters test suite from Games Explorer.
+ */
+static HRESULT _unregisterGame(void) {
+    HRESULT hr;
+
+    if(!ge) return E_FAIL;
+
+    hr = IGameExplorer_RemoveGame(ge, gameInstanceId);
+
+    IGameExplorer_Release(ge);
+    ge = NULL;
+
+    return hr;
+}
+/*******************************************************************************
+ * test routines
+ */
+static void test_create(BOOL* gameStatisticsAvailable)
 {
     HRESULT hr;
 
     IGameStatisticsMgr* gsm = NULL;
+    *gameStatisticsAvailable = FALSE;
 
     /* interface available up from Win7 */
     hr = CoCreateInstance( &CLSID_GameStatistics, NULL, CLSCTX_INPROC_SERVER, &IID_IGameStatisticsMgr, (LPVOID*)&gsm);
     if(gsm)
     {
         ok( hr == S_OK, "IGameStatisticsMgr creating failed (result: 0x%08x)\n", hr);
+        *gameStatisticsAvailable = TRUE;
         IGameStatisticsMgr_Release(gsm);
     }
     else
         win_skip("IGameStatisticsMgr cannot be created\n");
 }
+static void test_gamestatisticsmgr( void )
+{
+    HRESULT hr;
+    DWORD dwOpenResult;
+
+    IGameStatisticsMgr* gsm = NULL;
+    IGameStatistics* gs = NULL;
+
+    hr = CoCreateInstance( &CLSID_GameStatistics, NULL, CLSCTX_INPROC_SERVER, &IID_IGameStatisticsMgr, (LPVOID*)&gsm);
+    ok(hr == S_OK, "IGameStatisticsMgr creating failed (result false)\n");
+
+    /* test trying to create interface IGameStatistics using GetGameStatistics method */
+    hr = IGameStatisticsMgr_GetGameStatistics(gsm, sExeName, GAMESTATS_OPEN_OPENORCREATE, &dwOpenResult, &gs);
+    todo_wine ok(SUCCEEDED(hr), "GetGameStatistics returned error: 0x%x\n", hr);
+    todo_wine ok(gs!=NULL, "GetGameStatistics did not return valid interface pointer\n");
+    if(gs)
+    {
+        hr = IGameStatistics_Release(gs);
+        ok(SUCCEEDED(hr), "releasing IGameStatistics returned error: 0x%x\n", hr);
+
+        /* test of removing game statistics from underlying storage */
+        hr = IGameStatisticsMgr_RemoveGameStatistics(gsm, sExeName);
+        todo_wine ok(SUCCEEDED(hr), "cannot remove game statistics, error: 0x%x\n", hr);
+    }
+
+    hr = IGameStatisticsMgr_Release(gsm);
+    ok(SUCCEEDED(hr), "releasing IGameStatisticsMgr returned error: 0x%x\n", hr);
+}
 
 START_TEST(gamestatistics)
 {
     HRESULT hr;
+    BOOL gameStatisticsAvailable;
 
     hr = CoInitialize( NULL );
     ok( hr == S_OK, "failed to init COM\n");
 
-    test_create();
+    test_create(&gameStatisticsAvailable);
+
+    if(gameStatisticsAvailable)
+    {
+        hr = _registerGame();
+        ok( hr == S_OK, "cannot register game in Game Explorer (error: 0x%x)\n", hr);
+
+        test_gamestatisticsmgr();
+
+        hr = _unregisterGame();
+        ok( hr == S_OK, "cannot unregister game from Game Explorer (error: 0x%x)\n", hr);
+    }
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list