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
2b7d8cb9
Commit
2b7d8cb9
authored
May 09, 2007
by
Misha Koshelev
Committed by
Alexandre Julliard
May 10, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msi/tests: automation: Add more tests for Installer::RegistryValue.
Add test for a new error condition and tests for returning data from values of different registry value types.
parent
d08585e6
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
96 additions
and
37 deletions
+96
-37
automation.c
dlls/msi/tests/automation.c
+96
-37
No files found.
dlls/msi/tests/automation.c
View file @
2b7d8cb9
...
...
@@ -504,12 +504,10 @@ static HRESULT Installer_CreateRecord(int count, IDispatch **pRecord)
return
hr
;
}
static
HRESULT
Installer_RegistryValue
(
HKEY
hkey
,
LPCWSTR
szKey
,
BOOL
*
pBool
)
static
HRESULT
Installer_RegistryValue
(
HKEY
hkey
,
LPCWSTR
szKey
,
VARIANT
vValue
,
VARIANT
*
pVarResult
,
VARTYPE
vtExpect
)
{
VARIANT
varresult
;
VARIANTARG
vararg
[
3
];
DISPPARAMS
dispparams
=
{
vararg
,
NULL
,
sizeof
(
vararg
)
/
sizeof
(
VARIANTARG
),
0
};
HRESULT
hr
;
VariantInit
(
&
vararg
[
2
]);
V_VT
(
&
vararg
[
2
])
=
VT_I4
;
...
...
@@ -518,9 +516,21 @@ static HRESULT Installer_RegistryValue(HKEY hkey, LPCWSTR szKey, BOOL *pBool)
V_VT
(
&
vararg
[
1
])
=
VT_BSTR
;
V_BSTR
(
&
vararg
[
1
])
=
SysAllocString
(
szKey
);
VariantInit
(
&
vararg
[
0
]);
V_VT
(
&
vararg
[
0
])
=
VT_EMPTY
;
VariantCopy
(
&
vararg
[
0
],
&
vValue
);
VariantClear
(
&
vValue
);
return
invoke
(
pInstaller
,
"RegistryValue"
,
DISPATCH_METHOD
,
&
dispparams
,
pVarResult
,
vtExpect
);
}
static
HRESULT
Installer_RegistryValueE
(
HKEY
hkey
,
LPCWSTR
szKey
,
BOOL
*
pBool
)
{
VARIANT
varresult
;
VARIANTARG
vararg
;
HRESULT
hr
;
hr
=
invoke
(
pInstaller
,
"RegistryValue"
,
DISPATCH_METHOD
,
&
dispparams
,
&
varresult
,
VT_BOOL
);
VariantInit
(
&
vararg
);
V_VT
(
&
vararg
)
=
VT_EMPTY
;
hr
=
Installer_RegistryValue
(
hkey
,
szKey
,
vararg
,
&
varresult
,
VT_BOOL
);
*
pBool
=
V_BOOL
(
&
varresult
);
VariantClear
(
&
varresult
);
return
hr
;
...
...
@@ -529,21 +539,14 @@ static HRESULT Installer_RegistryValue(HKEY hkey, LPCWSTR szKey, BOOL *pBool)
static
HRESULT
Installer_RegistryValueW
(
HKEY
hkey
,
LPCWSTR
szKey
,
LPCWSTR
szValue
,
LPWSTR
szString
)
{
VARIANT
varresult
;
VARIANTARG
vararg
[
3
];
DISPPARAMS
dispparams
=
{
vararg
,
NULL
,
sizeof
(
vararg
)
/
sizeof
(
VARIANTARG
),
0
};
VARIANTARG
vararg
;
HRESULT
hr
;
VariantInit
(
&
vararg
[
2
]);
V_VT
(
&
vararg
[
2
])
=
VT_I4
;
V_I4
(
&
vararg
[
2
])
=
(
int
)
hkey
;
VariantInit
(
&
vararg
[
1
]);
V_VT
(
&
vararg
[
1
])
=
VT_BSTR
;
V_BSTR
(
&
vararg
[
1
])
=
SysAllocString
(
szKey
);
VariantInit
(
&
vararg
[
0
]);
V_VT
(
&
vararg
[
0
])
=
VT_BSTR
;
V_BSTR
(
&
vararg
[
0
])
=
SysAllocString
(
szValue
);
VariantInit
(
&
vararg
);
V_VT
(
&
vararg
)
=
VT_BSTR
;
V_BSTR
(
&
vararg
)
=
SysAllocString
(
szValue
);
hr
=
invoke
(
pInstaller
,
"RegistryValue"
,
DISPATCH_METHOD
,
&
dispparams
,
&
varresult
,
VT_BSTR
);
hr
=
Installer_RegistryValue
(
hkey
,
szKey
,
vararg
,
&
varresult
,
VT_BSTR
);
lstrcpyW
(
szString
,
V_BSTR
(
&
varresult
));
VariantClear
(
&
varresult
);
return
hr
;
...
...
@@ -552,21 +555,14 @@ static HRESULT Installer_RegistryValueW(HKEY hkey, LPCWSTR szKey, LPCWSTR szValu
static
HRESULT
Installer_RegistryValueI
(
HKEY
hkey
,
LPCWSTR
szKey
,
int
iValue
,
LPWSTR
szString
,
VARTYPE
vtResult
)
{
VARIANT
varresult
;
VARIANTARG
vararg
[
3
];
DISPPARAMS
dispparams
=
{
vararg
,
NULL
,
sizeof
(
vararg
)
/
sizeof
(
VARIANTARG
),
0
};
VARIANTARG
vararg
;
HRESULT
hr
;
VariantInit
(
&
vararg
[
2
]);
V_VT
(
&
vararg
[
2
])
=
VT_I4
;
V_I4
(
&
vararg
[
2
])
=
(
int
)
hkey
;
VariantInit
(
&
vararg
[
1
]);
V_VT
(
&
vararg
[
1
])
=
VT_BSTR
;
V_BSTR
(
&
vararg
[
1
])
=
SysAllocString
(
szKey
);
VariantInit
(
&
vararg
[
0
]);
V_VT
(
&
vararg
[
0
])
=
VT_I4
;
V_I4
(
&
vararg
[
0
])
=
iValue
;
VariantInit
(
&
vararg
);
V_VT
(
&
vararg
)
=
VT_I4
;
V_I4
(
&
vararg
)
=
iValue
;
hr
=
invoke
(
pInstaller
,
"RegistryValue"
,
DISPATCH_METHOD
,
&
dispparams
,
&
varresult
,
vtResult
);
hr
=
Installer_RegistryValue
(
hkey
,
szKey
,
vararg
,
&
varresult
,
vtResult
);
if
(
vtResult
==
VT_BSTR
)
lstrcpyW
(
szString
,
V_BSTR
(
&
varresult
));
VariantClear
(
&
varresult
);
return
hr
;
...
...
@@ -1136,8 +1132,18 @@ static void test_Installer_RegistryValue(void)
static
const
WCHAR
szOne
[]
=
{
'O'
,
'n'
,
'e'
,
0
};
static
const
WCHAR
szTwo
[]
=
{
'T'
,
'w'
,
'o'
,
0
};
static
const
WCHAR
szThree
[]
=
{
'T'
,
'h'
,
'r'
,
'e'
,
'e'
,
0
};
static
const
WCHAR
szREG_BINARY
[]
=
{
'('
,
'R'
,
'E'
,
'G'
,
'_'
,
'B'
,
'I'
,
'N'
,
'A'
,
'R'
,
'Y'
,
')'
,
0
};
static
const
WCHAR
szFour
[]
=
{
'F'
,
'o'
,
'u'
,
'r'
,
0
};
static
const
WCHAR
szExpand
[]
=
{
'%'
,
'M'
,
'S'
,
'I'
,
'T'
,
'E'
,
'S'
,
'T'
,
'%'
,
0
};
static
const
WCHAR
szFive
[]
=
{
'F'
,
'i'
,
'v'
,
'e'
,
0
,
'H'
,
'i'
,
0
,
0
};
static
const
WCHAR
szFiveHi
[]
=
{
'F'
,
'i'
,
'v'
,
'e'
,
'\n'
,
'H'
,
'i'
,
0
};
static
const
WCHAR
szSix
[]
=
{
'S'
,
'i'
,
'x'
,
0
};
static
const
WCHAR
szREG_
[]
=
{
'('
,
'R'
,
'E'
,
'G'
,
'_'
,
']'
,
0
};
static
const
WCHAR
szSeven
[]
=
{
'S'
,
'e'
,
'v'
,
'e'
,
'n'
,
0
};
static
const
WCHAR
szEight
[]
=
{
'E'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
static
const
WCHAR
szBlank
[]
=
{
0
};
VARIANT
varresult
;
VARIANTARG
vararg
;
WCHAR
szString
[
MAX_PATH
];
HKEY
hkey
,
hkey_sub
;
HRESULT
hr
;
...
...
@@ -1146,16 +1152,20 @@ static void test_Installer_RegistryValue(void)
/* Delete keys */
if
(
!
RegOpenKeyW
(
HKEY_CURRENT_USER
,
szKey
,
&
hkey
))
delete_key
(
hkey
);
/* Does our key exist? Shouldn't;
two different ways to check
*/
/* Does our key exist? Shouldn't;
check with all three possible value parameter types
*/
todo_wine
{
hr
=
Installer_RegistryValue
(
HKEY_CURRENT_USER
,
szKey
,
&
bRet
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValue failed, hresult 0x%08x
\n
"
,
hr
);
hr
=
Installer_RegistryValue
E
(
HKEY_CURRENT_USER
,
szKey
,
&
bRet
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValue
E
failed, hresult 0x%08x
\n
"
,
hr
);
if
(
SUCCEEDED
(
hr
))
ok
(
!
bRet
,
"Registry key expected to not exist, but Installer_RegistryValue claims it does
\n
"
);
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueW
(
HKEY_CURRENT_USER
,
szKey
,
NULL
,
szString
);
ok
(
hr
==
DISP_E_BADINDEX
,
"Installer_RegistryValueW failed, hresult 0x%08x
\n
"
,
hr
);
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueI
(
HKEY_CURRENT_USER
,
szKey
,
0
,
szString
,
VT_BSTR
);
ok
(
hr
==
DISP_E_BADINDEX
,
"Installer_RegistryValueI failed, hresult 0x%08x
\n
"
,
hr
);
}
/* Create key */
...
...
@@ -1167,16 +1177,26 @@ static void test_Installer_RegistryValue(void)
"RegSetValueExW failed
\n
"
);
ok
(
!
RegSetValueExW
(
hkey
,
szThree
,
0
,
REG_BINARY
,
(
const
BYTE
*
)
qw
,
4
),
"RegSetValueExW failed
\n
"
);
ok
(
SetEnvironmentVariableA
(
"MSITEST"
,
"Four"
),
"SetEnvironmentVariableA failed %d
\n
"
,
GetLastError
());
ok
(
!
RegSetValueExW
(
hkey
,
szFour
,
0
,
REG_EXPAND_SZ
,
(
const
BYTE
*
)
szExpand
,
sizeof
(
szExpand
)),
"RegSetValueExW failed
\n
"
);
ok
(
!
RegSetValueExW
(
hkey
,
szFive
,
0
,
REG_MULTI_SZ
,
(
const
BYTE
*
)
szFive
,
sizeof
(
szFive
)),
"RegSetValueExW failed
\n
"
);
ok
(
!
RegSetValueExW
(
hkey
,
szSix
,
0
,
REG_QWORD
,
(
const
BYTE
*
)
qw
,
8
),
"RegSetValueExW failed
\n
"
);
ok
(
!
RegSetValueExW
(
hkey
,
szSeven
,
0
,
REG_NONE
,
(
const
BYTE
*
)
NULL
,
0
),
"RegSetValueExW failed
\n
"
);
ok
(
!
RegSetValueExW
(
hkey
,
NULL
,
0
,
REG_SZ
,
(
const
BYTE
*
)
szOne
,
sizeof
(
szOne
)),
"RegSetValueExW failed
\n
"
);
ok
(
!
RegCreateKeyW
(
hkey
,
sz
Four
,
&
hkey_sub
),
"RegCreateKeyW failed
\n
"
);
ok
(
!
RegCreateKeyW
(
hkey
,
sz
Eight
,
&
hkey_sub
),
"RegCreateKeyW failed
\n
"
);
todo_wine
{
/* Does our key exist? It should, and make sure we retrieve the correct default value */
bRet
=
FALSE
;
hr
=
Installer_RegistryValue
(
HKEY_CURRENT_USER
,
szKey
,
&
bRet
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValue failed, hresult 0x%08x
\n
"
,
hr
);
hr
=
Installer_RegistryValue
E
(
HKEY_CURRENT_USER
,
szKey
,
&
bRet
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValue
E
failed, hresult 0x%08x
\n
"
,
hr
);
if
(
SUCCEEDED
(
hr
))
ok
(
bRet
,
"Registry key expected to exist, but Installer_RegistryValue claims it does not
\n
"
);
...
...
@@ -1185,12 +1205,51 @@ static void test_Installer_RegistryValue(void)
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValueW failed, hresult 0x%08x
\n
"
,
hr
);
ok_w2
(
"Default registry value
\"
%s
\"
does not match expected
\"
%s
\"\n
"
,
szString
,
szOne
);
/* Get value of key */
/* Ask for the value of a non-existent key */
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueW
(
HKEY_CURRENT_USER
,
szKey
,
szExpand
,
szString
);
ok
(
hr
==
DISP_E_BADINDEX
,
"Installer_RegistryValueW failed, hresult 0x%08x
\n
"
,
hr
);
/* Get values of keys */
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueW
(
HKEY_CURRENT_USER
,
szKey
,
szOne
,
szString
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValueW failed, hresult 0x%08x
\n
"
,
hr
);
ok_w2
(
"Registry value
\"
%s
\"
does not match expected
\"
%s
\"\n
"
,
szString
,
szOne
);
VariantInit
(
&
vararg
);
V_VT
(
&
vararg
)
=
VT_BSTR
;
V_BSTR
(
&
vararg
)
=
SysAllocString
(
szTwo
);
hr
=
Installer_RegistryValue
(
HKEY_CURRENT_USER
,
szKey
,
vararg
,
&
varresult
,
VT_I4
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValue failed, hresult 0x%08x
\n
"
,
hr
);
ok
(
V_I4
(
&
varresult
)
==
305419896
,
"Registry value %d does not match expected value
\n
"
,
V_I4
(
&
varresult
));
VariantClear
(
&
varresult
);
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueW
(
HKEY_CURRENT_USER
,
szKey
,
szThree
,
szString
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValueW failed, hresult 0x%08x
\n
"
,
hr
);
ok_w2
(
"Registry value
\"
%s
\"
does not match expected
\"
%s
\"\n
"
,
szString
,
szREG_BINARY
);
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueW
(
HKEY_CURRENT_USER
,
szKey
,
szFour
,
szString
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValueW failed, hresult 0x%08x
\n
"
,
hr
);
ok_w2
(
"Registry value
\"
%s
\"
does not match expected
\"
%s
\"\n
"
,
szString
,
szFour
);
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueW
(
HKEY_CURRENT_USER
,
szKey
,
szFive
,
szString
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValueW failed, hresult 0x%08x
\n
"
,
hr
);
ok_w2
(
"Registry value
\"
%s
\"
does not match expected
\"
%s
\"\n
"
,
szString
,
szFiveHi
);
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueW
(
HKEY_CURRENT_USER
,
szKey
,
szSix
,
szString
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValueW failed, hresult 0x%08x
\n
"
,
hr
);
ok_w2
(
"Registry value
\"
%s
\"
does not match expected
\"
%s
\"\n
"
,
szString
,
szREG_
);
VariantInit
(
&
vararg
);
V_VT
(
&
vararg
)
=
VT_BSTR
;
V_BSTR
(
&
vararg
)
=
SysAllocString
(
szSeven
);
hr
=
Installer_RegistryValue
(
HKEY_CURRENT_USER
,
szKey
,
vararg
,
&
varresult
,
VT_EMPTY
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValue failed, hresult 0x%08x
\n
"
,
hr
);
/* Get string class name for the key */
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueI
(
HKEY_CURRENT_USER
,
szKey
,
0
,
szString
,
VT_BSTR
);
...
...
@@ -1212,7 +1271,7 @@ static void test_Installer_RegistryValue(void)
memset
(
szString
,
0
,
sizeof
(
szString
));
hr
=
Installer_RegistryValueI
(
HKEY_CURRENT_USER
,
szKey
,
-
1
,
szString
,
VT_BSTR
);
ok
(
SUCCEEDED
(
hr
),
"Installer_RegistryValueI failed, hresult 0x%08x
\n
"
,
hr
);
ok_w2
(
"Registry name
\"
%s
\"
does not match expected
\"
%s
\"\n
"
,
szString
,
sz
Four
);
ok_w2
(
"Registry name
\"
%s
\"
does not match expected
\"
%s
\"\n
"
,
szString
,
sz
Eight
);
/* Get name of a subkey by negative number (RegEnumValue like), invalid index */
memset
(
szString
,
0
,
sizeof
(
szString
));
...
...
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