Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
2f398b8c
Commit
2f398b8c
authored
Sep 03, 2010
by
Mariusz Pluciński
Committed by
Alexandre Julliard
Sep 03, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gameux/tests: Verify registry values created by GameExplorer.
parent
51332b7a
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
171 additions
and
4 deletions
+171
-4
gameexplorer.c
dlls/gameux/tests/gameexplorer.c
+168
-4
rsrc.rc
dlls/gameux/tests/rsrc.rc
+2
-0
test.gdf.xml
dlls/gameux/tests/test.gdf.xml
+1
-0
No files found.
dlls/gameux/tests/gameexplorer.c
View file @
2f398b8c
...
...
@@ -38,6 +38,7 @@
* older system, which causes problem while loading test binary.
*/
static
BOOL
WINAPI
(
*
_ConvertSidToStringSidW
)(
PSID
,
LPWSTR
*
);
static
LONG
WINAPI
(
*
_RegGetValueW
)(
HKEY
,
LPCWSTR
,
LPCWSTR
,
DWORD
,
LPDWORD
,
PVOID
,
LPDWORD
);
/*******************************************************************************
*_loadDynamicRoutines
...
...
@@ -55,6 +56,8 @@ static BOOL _loadDynamicRoutines(void)
_ConvertSidToStringSidW
=
(
LPVOID
)
GetProcAddress
(
hAdvapiModule
,
"ConvertSidToStringSidW"
);
if
(
!
_ConvertSidToStringSidW
)
return
FALSE
;
_RegGetValueW
=
(
LPVOID
)
GetProcAddress
(
hAdvapiModule
,
"RegGetValueW"
);
if
(
!
_RegGetValueW
)
return
FALSE
;
return
TRUE
;
}
...
...
@@ -158,6 +161,153 @@ static HRESULT _buildGameRegistryPath(GAME_INSTALL_SCOPE installScope,
return
hr
;
}
/*******************************************************************************
* _validateRegistryValue
*
* Helper function, verifies single registry value with expected
*
* Parameters:
* hKey [I] handle to game's key. Key must be opened
* keyPath [I] string with path to game's key. Used only
* to display more useful message on test fail
* valueName [I] name of value to check
* dwExpectedType [I] expected type of value. It should be
* one of RRF_RT_* flags
* lpExpectedContent [I] expected content of value. It should be
* pointer to variable with same type as
* passed in dwExpectedType
*
* Returns:
* S_OK value exists and contains expected data
* S_FALSE value exists, but contains other data
* than expected
* E_OUTOFMEMORY allocation problem
* HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
* value does not exist
*
* Note: this function returns error codes instead of failing test case, because
* it is sometimes expected that given value may not exist on some systems, or
* contain other data.
*/
static
HRESULT
_validateRegistryValue
(
HKEY
hKey
,
LPCWSTR
keyPath
,
LPCWSTR
valueName
,
DWORD
dwExpectedType
,
LPCVOID
lpExpectedContent
)
{
HRESULT
hr
;
DWORD
dwType
,
dwSize
;
LPVOID
lpData
=
NULL
;
hr
=
HRESULT_FROM_WIN32
(
_RegGetValueW
(
hKey
,
NULL
,
valueName
,
dwExpectedType
,
&
dwType
,
NULL
,
&
dwSize
));
if
(
FAILED
(
hr
))
trace
(
"registry value cannot be opened
\n
"
" key: %s
\n
"
" value: %s
\n
"
" expected type: 0x%x
\n
"
" found type: 0x%x
\n
"
" result code: 0x%0x
\n
"
,
wine_dbgstr_w
(
keyPath
),
wine_dbgstr_w
(
valueName
),
dwExpectedType
,
dwType
,
hr
);
if
(
SUCCEEDED
(
hr
))
{
lpData
=
CoTaskMemAlloc
(
dwSize
);
if
(
!
lpData
)
hr
=
E_OUTOFMEMORY
;
}
if
(
SUCCEEDED
(
hr
))
hr
=
HRESULT_FROM_WIN32
(
_RegGetValueW
(
hKey
,
NULL
,
valueName
,
dwExpectedType
,
&
dwType
,
lpData
,
&
dwSize
));
if
(
SUCCEEDED
(
hr
))
{
if
(
memcmp
(
lpData
,
lpExpectedContent
,
dwSize
)
==
0
)
hr
=
S_OK
;
else
{
if
(
dwExpectedType
==
RRF_RT_REG_SZ
)
/* if value type is REG_SZ, display expected and found values */
trace
(
"not expected content of registry value
\n
"
" key: %s
\n
"
" value: %s
\n
"
" expected REG_SZ content: %s
\n
"
" found REG_SZ content: %s
\n
"
,
wine_dbgstr_w
(
keyPath
),
wine_dbgstr_w
(
valueName
),
wine_dbgstr_w
(
lpExpectedContent
),
wine_dbgstr_w
(
lpData
));
else
/* in the other case, do not display content */
trace
(
"not expected content of registry value
\n
"
" key: %s
\n
"
" value: %s
\n
"
" value type: 0x%x
\n
"
,
wine_dbgstr_w
(
keyPath
),
wine_dbgstr_w
(
valueName
),
dwType
);
hr
=
S_FALSE
;
}
}
CoTaskMemFree
(
lpData
);
return
hr
;
}
/*******************************************************************************
* _validateGameRegistryValues
*
* Helper function, verifies values in game's registry key
*
* Parameters:
* line [I] place of original call. Used only to display
* more useful message on test fail
* hKey [I] handle to game's key. Key must be opened
* with KEY_READ access permission
* keyPath [I] string with path to game's key. Used only
* to display more useful message on test fail
* gameApplicationId [I] game application identifier
* gameExePath [I] directory where game executable is stored
* gameExeName [I] full path to executable, including directory and file name
*/
static
void
_validateGameRegistryValues
(
int
line
,
HKEY
hKey
,
LPCWSTR
keyPath
,
LPCGUID
gameApplicationId
,
LPCWSTR
gameExePath
,
LPCWSTR
gameExeName
)
{
static
const
WCHAR
sApplicationId
[]
=
{
'A'
,
'p'
,
'p'
,
'l'
,
'i'
,
'c'
,
'a'
,
't'
,
'i'
,
'o'
,
'n'
,
'I'
,
'd'
,
0
};
static
const
WCHAR
sConfigApplicationPath
[]
=
{
'C'
,
'o'
,
'n'
,
'f'
,
'i'
,
'g'
,
'A'
,
'p'
,
'p'
,
'l'
,
'i'
,
'c'
,
'a'
,
't'
,
'i'
,
'o'
,
'n'
,
'P'
,
'a'
,
't'
,
'h'
,
0
};
static
const
WCHAR
sConfigGDFBinaryPath
[]
=
{
'C'
,
'o'
,
'n'
,
'f'
,
'i'
,
'g'
,
'G'
,
'D'
,
'F'
,
'B'
,
'i'
,
'n'
,
'a'
,
'r'
,
'y'
,
'P'
,
'a'
,
't'
,
'h'
,
0
};
static
const
WCHAR
sDescription
[]
=
{
'D'
,
'e'
,
's'
,
'c'
,
'r'
,
'i'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
0
};
static
const
WCHAR
sExampleGame
[]
=
{
'E'
,
'x'
,
'a'
,
'm'
,
'p'
,
'l'
,
'e'
,
' '
,
'G'
,
'a'
,
'm'
,
'e'
,
0
};
static
const
WCHAR
sGameDescription
[]
=
{
'G'
,
'a'
,
'm'
,
'e'
,
' '
,
'D'
,
'e'
,
's'
,
'c'
,
'r'
,
'i'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
0
};
static
const
WCHAR
sTitle
[]
=
{
'T'
,
'i'
,
't'
,
'l'
,
'e'
,
0
};
HRESULT
hr
;
WCHAR
sGameApplicationId
[
40
];
hr
=
(
StringFromGUID2
(
gameApplicationId
,
sGameApplicationId
,
sizeof
(
sGameApplicationId
)
/
sizeof
(
sGameApplicationId
[
0
]))
?
S_OK
:
E_FAIL
);
ok_
(
__FILE__
,
line
)(
hr
==
S_OK
,
"cannot convert game application id to string
\n
"
);
/* these values exist up from Vista */
hr
=
_validateRegistryValue
(
hKey
,
keyPath
,
sApplicationId
,
RRF_RT_REG_SZ
,
sGameApplicationId
);
todo_wine
ok_
(
__FILE__
,
line
)(
hr
==
S_OK
,
"failed while checking registry value (error 0x%x)
\n
"
,
hr
);
hr
=
_validateRegistryValue
(
hKey
,
keyPath
,
sConfigApplicationPath
,
RRF_RT_REG_SZ
,
gameExePath
);
todo_wine
ok_
(
__FILE__
,
line
)(
hr
==
S_OK
,
"failed while checking registry value (error 0x%x)
\n
"
,
hr
);
hr
=
_validateRegistryValue
(
hKey
,
keyPath
,
sConfigGDFBinaryPath
,
RRF_RT_REG_SZ
,
gameExeName
);
todo_wine
ok_
(
__FILE__
,
line
)(
hr
==
S_OK
,
"failed while checking registry value (error 0x%x)
\n
"
,
hr
);
hr
=
_validateRegistryValue
(
hKey
,
keyPath
,
sTitle
,
RRF_RT_REG_SZ
,
sExampleGame
);
todo_wine
ok_
(
__FILE__
,
line
)(
hr
==
S_OK
,
"failed while checking registry value (error 0x%x)
\n
"
,
hr
);
/* this value exists up from Win7 */
hr
=
_validateRegistryValue
(
hKey
,
keyPath
,
sDescription
,
RRF_RT_REG_SZ
,
sGameDescription
);
todo_wine
ok_
(
__FILE__
,
line
)(
hr
==
S_OK
||
broken
(
hr
==
HRESULT_FROM_WIN32
(
ERROR_FILE_NOT_FOUND
)),
"failed while checking registry value (error 0x%x)
\n
"
,
hr
);
}
/*******************************************************************************
* _validateGameKey
*
* Helper function, verifies current state of game's registry key with expected.
...
...
@@ -167,6 +317,9 @@ static HRESULT _buildGameRegistryPath(GAME_INSTALL_SCOPE installScope,
* more useful message on test fail
* installScope [I] the scope which was used in AddGame/InstallGame call
* gameInstanceId [I] game instance identifier
* gameApplicationId [I] game application identifier
* gameExePath [I] directory where game executable is stored
* gameExeName [I] full path to executable, including directory and file name
* presenceExpected [I] is it expected that game should be currently
* registered or not. Should be TRUE if checking
* after using AddGame/InstallGame, and FALSE
...
...
@@ -175,6 +328,9 @@ static HRESULT _buildGameRegistryPath(GAME_INSTALL_SCOPE installScope,
static
void
_validateGameRegistryKey
(
int
line
,
GAME_INSTALL_SCOPE
installScope
,
LPCGUID
gameInstanceId
,
LPCGUID
gameApplicationId
,
LPCWSTR
gameExePath
,
LPCWSTR
gameExeName
,
BOOL
presenceExpected
)
{
HRESULT
hr
;
...
...
@@ -198,7 +354,13 @@ static void _validateGameRegistryKey(int line,
}
if
(
SUCCEEDED
(
hr
))
{
if
(
presenceExpected
)
/* if the key exists and we expected it, let's verify it's content */
_validateGameRegistryValues
(
line
,
hKey
,
lpRegistryPath
,
gameApplicationId
,
gameExePath
,
gameExeName
);
RegCloseKey
(
hKey
);
}
CoTaskMemFree
(
lpRegistryPath
);
}
...
...
@@ -239,6 +401,8 @@ static void test_add_remove_game(void)
{
static
const
GUID
defaultGUID
=
{
0x01234567
,
0x89AB
,
0xCDEF
,
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xAB
,
0xCD
,
0xEF
}};
static
const
GUID
applicationId
=
{
0x17A6558E
,
0x60BE
,
0x4078
,
{
0xB6
,
0x6F
,
0x9C
,
0x3A
,
0xDA
,
0x2A
,
0x32
,
0xE6
}};
HRESULT
hr
;
...
...
@@ -279,13 +443,13 @@ static void test_add_remove_game(void)
if
(
SUCCEEDED
(
hr
))
{
todo_wine
_validateGameRegistryKey
(
__LINE__
,
GIS_CURRENT_USER
,
&
guid
,
TRUE
);
todo_wine
_validateGameRegistryKey
(
__LINE__
,
GIS_CURRENT_USER
,
&
guid
,
&
applicationId
,
sExePath
,
sExeName
,
TRUE
);
hr
=
IGameExplorer_RemoveGame
(
ge
,
guid
);
todo_wine
ok
(
SUCCEEDED
(
hr
),
"IGameExplorer::RemoveGame failed (error 0x%08x)
\n
"
,
hr
);
}
_validateGameRegistryKey
(
__LINE__
,
GIS_CURRENT_USER
,
&
guid
,
FALSE
);
_validateGameRegistryKey
(
__LINE__
,
GIS_CURRENT_USER
,
&
guid
,
&
applicationId
,
sExePath
,
sExeName
,
FALSE
);
/* try to register game with empty guid */
...
...
@@ -297,13 +461,13 @@ static void test_add_remove_game(void)
if
(
SUCCEEDED
(
hr
))
{
todo_wine
_validateGameRegistryKey
(
__LINE__
,
GIS_CURRENT_USER
,
&
guid
,
TRUE
);
todo_wine
_validateGameRegistryKey
(
__LINE__
,
GIS_CURRENT_USER
,
&
guid
,
&
applicationId
,
sExePath
,
sExeName
,
TRUE
);
hr
=
IGameExplorer_RemoveGame
(
ge
,
guid
);
todo_wine
ok
(
SUCCEEDED
(
hr
),
"IGameExplorer::RemoveGame failed (error 0x%08x)
\n
"
,
hr
);
}
_validateGameRegistryKey
(
__LINE__
,
GIS_CURRENT_USER
,
&
guid
,
FALSE
);
_validateGameRegistryKey
(
__LINE__
,
GIS_CURRENT_USER
,
&
guid
,
&
applicationId
,
sExePath
,
sExeName
,
FALSE
);
}
/* free allocated resources */
...
...
dlls/gameux/tests/rsrc.rc
View file @
2f398b8c
...
...
@@ -23,4 +23,6 @@
#include <gameux.h>
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
/* @makedep: test.gdf.xml */
ID_GDF_XML DATA "test.gdf.xml"
dlls/gameux/tests/test.gdf.xml
View file @
2f398b8c
...
...
@@ -23,6 +23,7 @@ xmlns:baseTypes="urn:schemas-microsoft-com:GamesExplorerBaseTypes.v1"
xmlns=
"urn:schemas-microsoft-com:GameDescription.v1"
>
<GameDefinition
gameID=
"{17A6558E-60BE-4078-B66F-9C3ADA2A32E6}"
>
<Name>
Example Game
</Name>
<Description>
Game Description
</Description>
<Version>
<VersionNumber
versionNumber=
"1.0.0.0"
/>
</Version>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment