Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
wine
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Alexey Alyaev
wine
Commits
a99d3c5b
Commit
a99d3c5b
authored
10 years ago
by
Akihiro Sagawa
Committed by
Alexandre Julliard
10 years ago
Browse files
Options
Downloads
Patches
Plain Diff
reg: Add reg.exe test suite.
parent
345b8d0e
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
configure
+1
-0
1 addition, 0 deletions
configure
configure.ac
+1
-0
1 addition, 0 deletions
configure.ac
programs/reg/tests/Makefile.in
+5
-0
5 additions, 0 deletions
programs/reg/tests/Makefile.in
programs/reg/tests/reg.c
+264
-0
264 additions, 0 deletions
programs/reg/tests/reg.c
with
271 additions
and
0 deletions
configure
+
1
−
0
View file @
a99d3c5b
...
...
@@ -17454,6 +17454,7 @@ wine_fn_config_program plugplay enable_plugplay install
wine_fn_config_program presentationfontcache enable_presentationfontcache install
wine_fn_config_program progman enable_progman install,po
wine_fn_config_program reg enable_reg install,po
wine_fn_config_test programs/reg/tests reg.exe_test
wine_fn_config_program regasm enable_regasm install
wine_fn_config_program regedit enable_regedit install,installbin,manpage,po
wine_fn_config_test programs/regedit/tests regedit.exe_test
...
...
This diff is collapsed.
Click to expand it.
configure.ac
+
1
−
0
View file @
a99d3c5b
...
...
@@ -3363,6 +3363,7 @@ WINE_CONFIG_PROGRAM(plugplay,,[install])
WINE_CONFIG_PROGRAM(presentationfontcache,,[install])
WINE_CONFIG_PROGRAM(progman,,[install,po])
WINE_CONFIG_PROGRAM(reg,,[install,po])
WINE_CONFIG_TEST(programs/reg/tests)
WINE_CONFIG_PROGRAM(regasm,,[install])
WINE_CONFIG_PROGRAM(regedit,,[install,installbin,manpage,po])
WINE_CONFIG_TEST(programs/regedit/tests)
...
...
This diff is collapsed.
Click to expand it.
programs/reg/tests/Makefile.in
0 → 100644
+
5
−
0
View file @
a99d3c5b
TESTDLL
=
reg.exe
IMPORTS
=
advapi32
C_SRCS
=
\
reg.c
This diff is collapsed.
Click to expand it.
programs/reg/tests/reg.c
0 → 100644
+
264
−
0
View file @
a99d3c5b
/*
* Copyright 2014 Akihiro Sagawa
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include
<windows.h>
#include
"wine/test.h"
#define lok ok_(__FILE__,line)
#define KEY_BASE "Software\\Wine\\reg_test"
#define REG_EXIT_SUCCESS 0
#define REG_EXIT_FAILURE 1
#define TODO_REG_TYPE (0x0001u)
#define TODO_REG_SIZE (0x0002u)
#define TODO_REG_DATA (0x0004u)
#define run_reg_exe(c,r) run_reg_exe_(__LINE__,c,r)
static
BOOL
run_reg_exe_
(
unsigned
line
,
const
char
*
cmd
,
DWORD
*
rc
)
{
STARTUPINFOA
si
=
{
sizeof
(
STARTUPINFOA
)};
PROCESS_INFORMATION
pi
;
BOOL
bret
;
DWORD
ret
;
char
cmdline
[
256
];
si
.
dwFlags
=
STARTF_USESTDHANDLES
;
si
.
hStdInput
=
INVALID_HANDLE_VALUE
;
si
.
hStdOutput
=
INVALID_HANDLE_VALUE
;
si
.
hStdError
=
INVALID_HANDLE_VALUE
;
strcpy
(
cmdline
,
cmd
);
if
(
!
CreateProcessA
(
NULL
,
cmdline
,
NULL
,
NULL
,
TRUE
,
0
,
NULL
,
NULL
,
&
si
,
&
pi
))
return
FALSE
;
ret
=
WaitForSingleObject
(
pi
.
hProcess
,
10000
);
if
(
ret
==
WAIT_TIMEOUT
)
TerminateProcess
(
pi
.
hProcess
,
1
);
bret
=
GetExitCodeProcess
(
pi
.
hProcess
,
rc
);
lok
(
bret
,
"GetExitCodeProcess failed: %d
\n
"
,
GetLastError
());
CloseHandle
(
pi
.
hThread
);
CloseHandle
(
pi
.
hProcess
);
return
bret
;
}
#define verify_reg(k,v,t,d,s,todo) verify_reg_(__LINE__,k,v,t,d,s,todo)
static
void
verify_reg_
(
unsigned
line
,
HKEY
hkey
,
const
char
*
value
,
DWORD
exp_type
,
const
void
*
exp_data
,
DWORD
exp_size
,
DWORD
todo
)
{
DWORD
type
,
size
;
BYTE
data
[
256
];
LONG
err
;
size
=
sizeof
(
data
);
memset
(
data
,
0xdd
,
size
);
err
=
RegQueryValueExA
(
hkey
,
value
,
NULL
,
&
type
,
data
,
&
size
);
lok
(
err
==
ERROR_SUCCESS
,
"RegQueryValueEx failed: got %d
\n
"
,
err
);
if
(
err
!=
ERROR_SUCCESS
)
return
;
if
(
todo
&
TODO_REG_TYPE
)
todo_wine
lok
(
type
==
exp_type
,
"got wrong type %d, expected %d
\n
"
,
type
,
exp_type
);
else
lok
(
type
==
exp_type
,
"got wrong type %d, expected %d
\n
"
,
type
,
exp_type
);
if
(
todo
&
TODO_REG_SIZE
)
todo_wine
lok
(
size
==
exp_size
,
"got wrong size %d, expected %d
\n
"
,
size
,
exp_size
);
else
lok
(
size
==
exp_size
,
"got wrong size %d, expected %d
\n
"
,
size
,
exp_size
);
if
(
todo
&
TODO_REG_DATA
)
todo_wine
lok
(
memcmp
(
data
,
exp_data
,
size
)
==
0
,
"got wrong data
\n
"
);
else
lok
(
memcmp
(
data
,
exp_data
,
size
)
==
0
,
"got wrong data
\n
"
);
}
static
void
test_add
(
void
)
{
HKEY
hkey
;
LONG
err
;
DWORD
r
,
dword
,
type
,
size
;
run_reg_exe
(
"reg add"
,
&
r
);
ok
(
r
==
REG_EXIT_FAILURE
,
"got exit code %d, expected 1
\n
"
,
r
);
err
=
RegDeleteKeyA
(
HKEY_CURRENT_USER
,
KEY_BASE
);
ok
(
err
==
ERROR_SUCCESS
||
err
==
ERROR_FILE_NOT_FOUND
,
"got %d
\n
"
,
err
);
err
=
RegOpenKeyExA
(
HKEY_CURRENT_USER
,
KEY_BASE
,
0
,
KEY_READ
,
&
hkey
);
ok
(
err
==
ERROR_FILE_NOT_FOUND
,
"got %d
\n
"
,
err
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
err
=
RegOpenKeyExA
(
HKEY_CURRENT_USER
,
KEY_BASE
,
0
,
KEY_READ
,
&
hkey
);
ok
(
err
==
ERROR_SUCCESS
,
"key creation failed, got %d
\n
"
,
err
);
/* REG_SZ */
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /d WineTest /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
||
broken
(
r
==
REG_EXIT_FAILURE
/* WinXP */
),
"got exit code %d, expected 0
\n
"
,
r
);
if
(
r
==
REG_EXIT_SUCCESS
)
verify_reg
(
hkey
,
""
,
REG_SZ
,
"WineTest"
,
9
,
0
);
else
win_skip
(
"broken reg.exe detected
\n
"
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v test /d deadbeef /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
verify_reg
(
hkey
,
"test"
,
REG_SZ
,
"deadbeef"
,
9
,
0
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v test /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
verify_reg
(
hkey
,
"test"
,
REG_SZ
,
""
,
1
,
TODO_REG_SIZE
);
run_reg_exe
(
"reg add HKEY_CURRENT_USER
\\
"
KEY_BASE
" /ve /d WineTEST /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
verify_reg
(
hkey
,
""
,
REG_SZ
,
"WineTEST"
,
9
,
0
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /t REG_SZ /v test2 /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
verify_reg
(
hkey
,
"test2"
,
REG_SZ
,
""
,
1
,
TODO_REG_SIZE
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /t REG_SZ /v test3 /f /d
\"\"
"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
verify_reg
(
hkey
,
"test3"
,
REG_SZ
,
""
,
1
,
0
);
/* REG_DWORD */
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /t REG_DWORD /f /d 12345678"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
||
broken
(
r
==
REG_EXIT_FAILURE
/* WinXP */
),
"got exit code %d, expected 0
\n
"
,
r
);
dword
=
12345678
;
if
(
r
==
REG_EXIT_SUCCESS
)
verify_reg
(
hkey
,
""
,
REG_DWORD
,
&
dword
,
sizeof
(
dword
),
0
);
else
win_skip
(
"broken reg.exe detected
\n
"
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v dword1 /t REG_DWORD /f"
,
&
r
);
todo_wine
ok
(
r
==
REG_EXIT_FAILURE
||
broken
(
r
==
REG_EXIT_SUCCESS
/* WinXP */
),
"got exit code %d, expected 0
\n
"
,
r
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v dword2 /t REG_DWORD /d zzz /f"
,
&
r
);
todo_wine
ok
(
r
==
REG_EXIT_FAILURE
,
"got exit code %d, expected 1
\n
"
,
r
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v dword3 /t REG_DWORD /d deadbeef /f"
,
&
r
);
todo_wine
ok
(
r
==
REG_EXIT_FAILURE
,
"got exit code %d, expected 1
\n
"
,
r
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v dword4 /t REG_DWORD /d 123xyz /f"
,
&
r
);
todo_wine
ok
(
r
==
REG_EXIT_FAILURE
,
"got exit code %d, expected 1
\n
"
,
r
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v dword5 /t reg_dword /d 12345678 /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
dword
=
12345678
;
verify_reg
(
hkey
,
"dword5"
,
REG_DWORD
,
&
dword
,
sizeof
(
dword
),
0
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v dword6 /t REG_DWORD /D 0123 /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
size
=
sizeof
(
dword
);
err
=
RegQueryValueExA
(
hkey
,
"dword6"
,
NULL
,
&
type
,
(
LPBYTE
)
&
dword
,
&
size
);
ok
(
err
==
ERROR_SUCCESS
,
"RegQueryValueEx failed: got %d
\n
"
,
err
);
ok
(
type
==
REG_DWORD
,
"got wrong type %d, expected %d
\n
"
,
type
,
REG_DWORD
);
ok
(
size
==
sizeof
(
DWORD
),
"got wrong size %d, expected %d
\n
"
,
size
,
(
int
)
sizeof
(
DWORD
));
todo_wine
ok
(
dword
==
123
||
broken
(
dword
==
0123
/* WinXP */
),
"got wrong data %d, expected %d
\n
"
,
dword
,
123
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v dword7 /t reg_dword /d 0xabcdefg /f"
,
&
r
);
todo_wine
ok
(
r
==
REG_EXIT_FAILURE
,
"got exit code %d, expected 1
\n
"
,
r
);
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v dword8 /t REG_dword /d 0xdeadbeef /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
dword
=
0xdeadbeef
;
verify_reg
(
hkey
,
"dword8"
,
REG_DWORD
,
&
dword
,
sizeof
(
dword
),
(
sizeof
(
long
)
>
sizeof
(
DWORD
))
?
0
:
TODO_REG_DATA
);
/* REG_DWORD_LITTLE_ENDIAN */
run_reg_exe
(
"reg add HKCU
\\
"
KEY_BASE
" /v DWORD_LE /t REG_DWORD_LITTLE_ENDIAN /d 456 /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
dword
=
456
;
verify_reg
(
hkey
,
"DWORD_LE"
,
REG_DWORD_LITTLE_ENDIAN
,
&
dword
,
sizeof
(
dword
),
0
);
RegCloseKey
(
hkey
);
err
=
RegDeleteKeyA
(
HKEY_CURRENT_USER
,
KEY_BASE
);
ok
(
err
==
ERROR_SUCCESS
,
"got %d
\n
"
,
err
);
}
static
void
test_delete
(
void
)
{
HKEY
hkey
,
hsubkey
;
LONG
err
;
DWORD
r
;
const
DWORD
deadbeef
=
0xdeadbeef
;
run_reg_exe
(
"reg delete"
,
&
r
);
ok
(
r
==
REG_EXIT_FAILURE
,
"got exit code %d, expected 1
\n
"
,
r
);
err
=
RegCreateKeyExA
(
HKEY_CURRENT_USER
,
KEY_BASE
,
0
,
NULL
,
0
,
KEY_ALL_ACCESS
,
NULL
,
&
hkey
,
NULL
);
ok
(
err
==
ERROR_SUCCESS
,
"got %d
\n
"
,
err
);
err
=
RegSetValueExA
(
hkey
,
"foo"
,
0
,
REG_DWORD
,
(
LPBYTE
)
&
deadbeef
,
sizeof
(
deadbeef
));
ok
(
err
==
ERROR_SUCCESS
,
"got %d
\n
"
,
err
);
err
=
RegSetValueExA
(
hkey
,
"bar"
,
0
,
REG_DWORD
,
(
LPBYTE
)
&
deadbeef
,
sizeof
(
deadbeef
));
ok
(
err
==
ERROR_SUCCESS
,
"got %d
\n
"
,
err
);
err
=
RegSetValueExA
(
hkey
,
""
,
0
,
REG_DWORD
,
(
LPBYTE
)
&
deadbeef
,
sizeof
(
deadbeef
));
ok
(
err
==
ERROR_SUCCESS
,
"got %d
\n
"
,
err
);
err
=
RegCreateKeyExA
(
hkey
,
"subkey"
,
0
,
NULL
,
0
,
KEY_ALL_ACCESS
,
NULL
,
&
hsubkey
,
NULL
);
ok
(
err
==
ERROR_SUCCESS
,
"got %d
\n
"
,
err
);
RegCloseKey
(
hsubkey
);
run_reg_exe
(
"reg delete HKCU
\\
"
KEY_BASE
" /v bar /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
err
=
RegQueryValueExA
(
hkey
,
"bar"
,
NULL
,
NULL
,
NULL
,
NULL
);
ok
(
err
==
ERROR_FILE_NOT_FOUND
,
"got %d
\n
"
,
err
);
run_reg_exe
(
"reg delete HKCU
\\
"
KEY_BASE
" /ve /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
err
=
RegQueryValueExA
(
hkey
,
""
,
NULL
,
NULL
,
NULL
,
NULL
);
todo_wine
ok
(
err
==
ERROR_FILE_NOT_FOUND
,
"got %d
\n
"
,
err
);
run_reg_exe
(
"reg delete HKCU
\\
"
KEY_BASE
" /va /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
err
=
RegQueryValueExA
(
hkey
,
"foo"
,
NULL
,
NULL
,
NULL
,
NULL
);
ok
(
err
==
ERROR_FILE_NOT_FOUND
,
"got %d
\n
"
,
err
);
err
=
RegOpenKeyExA
(
hkey
,
"subkey"
,
0
,
KEY_READ
,
&
hsubkey
);
ok
(
err
==
ERROR_SUCCESS
,
"got %d
\n
"
,
err
);
RegCloseKey
(
hsubkey
);
RegCloseKey
(
hkey
);
run_reg_exe
(
"reg delete HKCU
\\
"
KEY_BASE
" /f"
,
&
r
);
ok
(
r
==
REG_EXIT_SUCCESS
,
"got exit code %d, expected 0
\n
"
,
r
);
err
=
RegOpenKeyExA
(
HKEY_CURRENT_USER
,
KEY_BASE
,
0
,
KEY_READ
,
&
hkey
);
ok
(
err
==
ERROR_FILE_NOT_FOUND
,
"got %d
\n
"
,
err
);
}
static
void
test_query
(
void
)
{
DWORD
r
;
run_reg_exe
(
"reg Query"
,
&
r
);
ok
(
r
==
REG_EXIT_FAILURE
,
"got exit code %d, expected 1
\n
"
,
r
);
}
START_TEST
(
reg
)
{
DWORD
r
;
if
(
!
run_reg_exe
(
"reg.exe /?"
,
&
r
))
{
win_skip
(
"reg.exe not available, skipping reg.exe tests
\n
"
);
return
;
}
test_add
();
test_delete
();
test_query
();
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment