Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
88c2a189
Commit
88c2a189
authored
Sep 06, 2013
by
Nikolay Sivov
Committed by
Alexandre Julliard
Sep 06, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel32/tests: Added some activation context tests for SearchPath().
parent
575eb6d8
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
177 additions
and
2 deletions
+177
-2
path.c
dlls/kernel32/tests/path.c
+177
-2
No files found.
dlls/kernel32/tests/path.c
View file @
88c2a189
...
...
@@ -42,6 +42,14 @@
#define NOT_A_VALID_DRIVE '@'
#ifdef __i386__
#define ARCH "x86"
#elif defined __x86_64__
#define ARCH "amd64"
#else
#define ARCH "none"
#endif
/* the following characters don't work well with GetFullPathNameA
in Win98. I don't know if this is a FAT thing, or if it is an OS thing
but I don't test these characters now.
...
...
@@ -61,6 +69,12 @@ static BOOL (WINAPI *pNeedCurrentDirectoryForExePathW)(LPCWSTR);
static
DWORD
(
WINAPI
*
pSearchPathA
)(
LPCSTR
,
LPCSTR
,
LPCSTR
,
DWORD
,
LPSTR
,
LPSTR
*
);
static
DWORD
(
WINAPI
*
pSearchPathW
)(
LPCWSTR
,
LPCWSTR
,
LPCWSTR
,
DWORD
,
LPWSTR
,
LPWSTR
*
);
static
BOOL
(
WINAPI
*
pActivateActCtx
)(
HANDLE
,
ULONG_PTR
*
);
static
HANDLE
(
WINAPI
*
pCreateActCtxW
)(
PCACTCTXW
);
static
BOOL
(
WINAPI
*
pDeactivateActCtx
)(
DWORD
,
ULONG_PTR
);
static
BOOL
(
WINAPI
*
pGetCurrentActCtx
)(
HANDLE
*
);
static
void
(
WINAPI
*
pReleaseActCtx
)(
HANDLE
);
/* a structure to deal with wine todos somewhat cleanly */
typedef
struct
{
DWORD
shortlen
;
...
...
@@ -1549,10 +1563,89 @@ static void test_drive_letter_case(void)
#undef is_upper_case_letter
}
static
const
char
manifest_dep
[]
=
"<assembly xmlns=
\"
urn:schemas-microsoft-com:asm.v1
\"
manifestVersion=
\"
1.0
\"
>"
"<assemblyIdentity version=
\"
1.2.3.4
\"
name=
\"
testdep1
\"
type=
\"
win32
\"
processorArchitecture=
\"
"
ARCH
"
\"
/>"
" <file name=
\"
testdep.dll
\"
/>"
" <file name=
\"
kernel32.dll
\"
/>"
"</assembly>"
;
static
const
char
manifest_main
[]
=
"<assembly xmlns=
\"
urn:schemas-microsoft-com:asm.v1
\"
manifestVersion=
\"
1.0
\"
>"
"<assemblyIdentity version=
\"
1.2.3.4
\"
name=
\"
Wine.Test
\"
type=
\"
win32
\"
/>"
"<dependency>"
" <dependentAssembly>"
" <assemblyIdentity type=
\"
win32
\"
name=
\"
testdep1
\"
version=
\"
1.2.3.4
\"
processorArchitecture=
\"
"
ARCH
"
\"
/>"
" </dependentAssembly>"
"</dependency>"
"</assembly>"
;
static
void
create_manifest_file
(
const
char
*
filename
,
const
char
*
manifest
)
{
WCHAR
path
[
MAX_PATH
],
manifest_path
[
MAX_PATH
];
HANDLE
file
;
DWORD
size
;
MultiByteToWideChar
(
CP_ACP
,
0
,
filename
,
-
1
,
path
,
MAX_PATH
);
GetTempPathW
(
sizeof
(
manifest_path
)
/
sizeof
(
WCHAR
),
manifest_path
);
lstrcatW
(
manifest_path
,
path
);
file
=
CreateFileW
(
manifest_path
,
GENERIC_WRITE
,
0
,
NULL
,
CREATE_ALWAYS
,
FILE_ATTRIBUTE_NORMAL
,
NULL
);
ok
(
file
!=
INVALID_HANDLE_VALUE
,
"CreateFile failed: %u
\n
"
,
GetLastError
());
WriteFile
(
file
,
manifest
,
strlen
(
manifest
),
&
size
,
NULL
);
CloseHandle
(
file
);
}
static
void
delete_manifest_file
(
const
char
*
filename
)
{
CHAR
path
[
MAX_PATH
];
GetTempPathA
(
sizeof
(
path
),
path
);
strcat
(
path
,
filename
);
DeleteFileA
(
path
);
}
static
HANDLE
test_create
(
const
char
*
file
)
{
WCHAR
path
[
MAX_PATH
],
manifest_path
[
MAX_PATH
];
ACTCTXW
actctx
;
HANDLE
handle
;
MultiByteToWideChar
(
CP_ACP
,
0
,
file
,
-
1
,
path
,
MAX_PATH
);
GetTempPathW
(
sizeof
(
manifest_path
)
/
sizeof
(
WCHAR
),
manifest_path
);
lstrcatW
(
manifest_path
,
path
);
memset
(
&
actctx
,
0
,
sizeof
(
ACTCTXW
));
actctx
.
cbSize
=
sizeof
(
ACTCTXW
);
actctx
.
lpSource
=
manifest_path
;
handle
=
pCreateActCtxW
(
&
actctx
);
todo_wine
ok
(
handle
!=
INVALID_HANDLE_VALUE
,
"failed to create context, error %u
\n
"
,
GetLastError
());
ok
(
actctx
.
cbSize
==
sizeof
(
actctx
),
"cbSize=%d
\n
"
,
actctx
.
cbSize
);
ok
(
actctx
.
dwFlags
==
0
,
"dwFlags=%d
\n
"
,
actctx
.
dwFlags
);
ok
(
actctx
.
lpSource
==
manifest_path
,
"lpSource=%p
\n
"
,
actctx
.
lpSource
);
ok
(
actctx
.
wProcessorArchitecture
==
0
,
"wProcessorArchitecture=%d
\n
"
,
actctx
.
wProcessorArchitecture
);
ok
(
actctx
.
wLangId
==
0
,
"wLangId=%d
\n
"
,
actctx
.
wLangId
);
ok
(
actctx
.
lpAssemblyDirectory
==
NULL
,
"lpAssemblyDirectory=%p
\n
"
,
actctx
.
lpAssemblyDirectory
);
ok
(
actctx
.
lpResourceName
==
NULL
,
"lpResourceName=%p
\n
"
,
actctx
.
lpResourceName
);
ok
(
actctx
.
lpApplicationName
==
NULL
,
"lpApplicationName=%p
\n
"
,
actctx
.
lpApplicationName
);
ok
(
actctx
.
hModule
==
NULL
,
"hModule=%p
\n
"
,
actctx
.
hModule
);
return
handle
;
}
static
void
test_SearchPathA
(
void
)
{
CHAR
pathA
[
MAX_PATH
],
fileA
[]
=
""
,
buffA
[
MAX_PATH
];
static
const
CHAR
testdepA
[]
=
"testdep.dll"
;
static
const
CHAR
kernel32A
[]
=
"kernel32.dll"
;
static
const
CHAR
fileA
[]
=
""
;
CHAR
pathA
[
MAX_PATH
],
buffA
[
MAX_PATH
],
path2A
[
MAX_PATH
];
CHAR
*
ptrA
=
NULL
;
ULONG_PTR
cookie
;
HANDLE
handle
;
DWORD
ret
;
if
(
!
pSearchPathA
)
...
...
@@ -1576,12 +1669,52 @@ static void test_SearchPathA(void)
ok
(
ret
==
0
,
"Expected failure, got %d
\n
"
,
ret
);
ok
(
GetLastError
()
==
ERROR_INVALID_PARAMETER
,
"Expected ERROR_INVALID_PARAMETER, got %x
\n
"
,
GetLastError
());
if
(
!
pActivateActCtx
)
return
;
create_manifest_file
(
"testdep1.manifest"
,
manifest_dep
);
create_manifest_file
(
"main.manifest"
,
manifest_main
);
handle
=
test_create
(
"main.manifest"
);
delete_manifest_file
(
"testdep1.manifest"
);
delete_manifest_file
(
"main.manifest"
);
/* search fails without active context */
ret
=
pSearchPathA
(
NULL
,
testdepA
,
NULL
,
sizeof
(
buffA
)
/
sizeof
(
CHAR
),
buffA
,
NULL
);
ok
(
ret
==
0
,
"got %d
\n
"
,
ret
);
ret
=
pSearchPathA
(
NULL
,
kernel32A
,
NULL
,
sizeof
(
path2A
)
/
sizeof
(
CHAR
),
path2A
,
NULL
);
ok
(
ret
&&
ret
==
strlen
(
path2A
),
"got %d
\n
"
,
ret
);
ret
=
pActivateActCtx
(
handle
,
&
cookie
);
ok
(
ret
,
"failed to activate context, %u
\n
"
,
GetLastError
());
/* works when activated */
ret
=
pSearchPathA
(
NULL
,
testdepA
,
NULL
,
sizeof
(
buffA
)
/
sizeof
(
CHAR
),
buffA
,
NULL
);
todo_wine
ok
(
ret
&&
ret
==
strlen
(
buffA
),
"got %d
\n
"
,
ret
);
/* path is redirect for wellknown names too */
ret
=
pSearchPathA
(
NULL
,
kernel32A
,
NULL
,
sizeof
(
buffA
)
/
sizeof
(
CHAR
),
buffA
,
NULL
);
ok
(
ret
&&
ret
==
strlen
(
buffA
),
"got %d
\n
"
,
ret
);
todo_wine
ok
(
strcmp
(
buffA
,
path2A
),
"got wrong path %s, %s
\n
"
,
buffA
,
path2A
);
ret
=
pDeactivateActCtx
(
0
,
cookie
);
ok
(
ret
,
"failed to deactivate context, %u
\n
"
,
GetLastError
());
pReleaseActCtx
(
handle
);
}
static
void
test_SearchPathW
(
void
)
{
WCHAR
pathW
[
MAX_PATH
],
fileW
[]
=
{
0
},
buffW
[
MAX_PATH
];
static
const
WCHAR
testdepW
[]
=
{
't'
,
'e'
,
's'
,
't'
,
'd'
,
'e'
,
'p'
,
'.'
,
'd'
,
'l'
,
'l'
,
0
};
static
const
WCHAR
kernel32W
[]
=
{
'k'
,
'e'
,
'r'
,
'n'
,
'e'
,
'l'
,
'3'
,
'2'
,
'.'
,
'd'
,
'l'
,
'l'
,
0
};
static
const
WCHAR
fileW
[]
=
{
0
};
WCHAR
pathW
[
MAX_PATH
],
buffW
[
MAX_PATH
],
path2W
[
MAX_PATH
];
WCHAR
*
ptrW
=
NULL
;
ULONG_PTR
cookie
;
HANDLE
handle
;
DWORD
ret
;
if
(
!
pSearchPathW
)
...
...
@@ -1602,6 +1735,41 @@ if (0)
ok
(
ret
==
0
,
"Expected failure, got %d
\n
"
,
ret
);
ok
(
GetLastError
()
==
ERROR_INVALID_PARAMETER
,
"Expected ERROR_INVALID_PARAMETER, got %x
\n
"
,
GetLastError
());
if
(
!
pActivateActCtx
)
return
;
create_manifest_file
(
"testdep1.manifest"
,
manifest_dep
);
create_manifest_file
(
"main.manifest"
,
manifest_main
);
handle
=
test_create
(
"main.manifest"
);
delete_manifest_file
(
"testdep1.manifest"
);
delete_manifest_file
(
"main.manifest"
);
/* search fails without active context */
ret
=
pSearchPathW
(
NULL
,
testdepW
,
NULL
,
sizeof
(
buffW
)
/
sizeof
(
WCHAR
),
buffW
,
NULL
);
ok
(
ret
==
0
,
"got %d
\n
"
,
ret
);
ret
=
pSearchPathW
(
NULL
,
kernel32W
,
NULL
,
sizeof
(
path2W
)
/
sizeof
(
WCHAR
),
path2W
,
NULL
);
ok
(
ret
&&
ret
==
lstrlenW
(
path2W
),
"got %d
\n
"
,
ret
);
ret
=
pActivateActCtx
(
handle
,
&
cookie
);
ok
(
ret
,
"failed to activate context, %u
\n
"
,
GetLastError
());
/* works when activated */
ret
=
pSearchPathW
(
NULL
,
testdepW
,
NULL
,
sizeof
(
buffW
)
/
sizeof
(
WCHAR
),
buffW
,
NULL
);
todo_wine
ok
(
ret
&&
ret
==
lstrlenW
(
buffW
),
"got %d
\n
"
,
ret
);
/* path is redirect for wellknown names too */
ret
=
pSearchPathW
(
NULL
,
kernel32W
,
NULL
,
sizeof
(
buffW
)
/
sizeof
(
WCHAR
),
buffW
,
NULL
);
ok
(
ret
&&
ret
==
lstrlenW
(
buffW
),
"got %d
\n
"
,
ret
);
todo_wine
ok
(
lstrcmpW
(
buffW
,
path2W
),
"got wrong path %s, %s
\n
"
,
wine_dbgstr_w
(
buffW
),
wine_dbgstr_w
(
path2W
));
ret
=
pDeactivateActCtx
(
0
,
cookie
);
ok
(
ret
,
"failed to deactivate context, %u
\n
"
,
GetLastError
());
pReleaseActCtx
(
handle
);
}
static
void
test_GetFullPathNameA
(
void
)
...
...
@@ -1717,6 +1885,11 @@ static void init_pointers(void)
MAKEFUNC
(
NeedCurrentDirectoryForExePathW
);
MAKEFUNC
(
SearchPathA
);
MAKEFUNC
(
SearchPathW
);
MAKEFUNC
(
ActivateActCtx
);
MAKEFUNC
(
CreateActCtxW
);
MAKEFUNC
(
DeactivateActCtx
);
MAKEFUNC
(
GetCurrentActCtx
);
MAKEFUNC
(
ReleaseActCtx
);
#undef MAKEFUNC
}
...
...
@@ -1731,6 +1904,8 @@ START_TEST(path)
win_skip
(
"GetLongPathNameA is not available
\n
"
);
if
(
!
pGetLongPathNameW
)
win_skip
(
"GetLongPathNameW is not available
\n
"
);
if
(
!
pActivateActCtx
)
win_skip
(
"Activation contexts not supported, some tests will be skipped
\n
"
);
test_InitPathA
(
curdir
,
&
curDrive
,
&
otherDrive
);
test_CurrentDirectoryA
(
origdir
,
curdir
);
...
...
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