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
32ab7d29
Commit
32ab7d29
authored
Dec 14, 2008
by
Christian Costa
Committed by
Alexandre Julliard
Dec 15, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3dxof: Add a test to dump an X object data (enabled when objects.txt and…
d3dxof: Add a test to dump an X object data (enabled when objects.txt and templates.txt are present).
parent
e6abe0e8
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
181 additions
and
0 deletions
+181
-0
d3dxof.c
dlls/d3dxof/tests/d3dxof.c
+181
-0
No files found.
dlls/d3dxof/tests/d3dxof.c
View file @
32ab7d29
...
...
@@ -20,9 +20,19 @@
#define COBJMACROS
#include <assert.h>
#include <stdio.h>
#include "wine/test.h"
#include "initguid.h"
#include "dxfile.h"
static
inline
void
debugstr_guid
(
char
*
buf
,
CONST
GUID
*
id
)
{
sprintf
(
buf
,
"{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}"
,
id
->
Data1
,
id
->
Data2
,
id
->
Data3
,
id
->
Data4
[
0
],
id
->
Data4
[
1
],
id
->
Data4
[
2
],
id
->
Data4
[
3
],
id
->
Data4
[
4
],
id
->
Data4
[
5
],
id
->
Data4
[
6
],
id
->
Data4
[
7
]
);
}
static
HMODULE
hd3dxof
;
static
HRESULT
(
WINAPI
*
pDirectXFileCreate
)(
LPDIRECTXFILE
*
);
...
...
@@ -86,11 +96,182 @@ static void test_d3dxof(void)
ok
(
ref
==
0
,
"Got refcount %ld, expected 1
\n
"
,
ref
);
}
/* Set it to 1 to expand the string when dumping the object. This is usefull when there is
* only one string in a sub-object (very common). Use with care, this may lead to a crash. */
#define EXPAND_STRING 0
static
void
process_data
(
LPDIRECTXFILEDATA
lpDirectXFileData
,
int
*
plevel
)
{
HRESULT
hr
;
char
name
[
100
];
GUID
clsid
;
CONST
GUID
*
clsid_type
=
NULL
;
char
str_clsid
[
40
];
char
str_clsid_type
[
40
];
DWORD
len
=
100
;
LPDIRECTXFILEOBJECT
pChildObj
;
int
i
,
k
;
int
j
=
0
;
LPBYTE
pData
;
DWORD
size
;
hr
=
IDirectXFileData_GetId
(
lpDirectXFileData
,
&
clsid
);
ok
(
hr
==
DXFILE_OK
,
"IDirectXFileData_GetId: %x
\n
"
,
hr
);
hr
=
IDirectXFileData_GetName
(
lpDirectXFileData
,
name
,
&
len
);
ok
(
hr
==
DXFILE_OK
,
"IDirectXFileData_GetName: %x
\n
"
,
hr
);
hr
=
IDirectXFileData_GetType
(
lpDirectXFileData
,
&
clsid_type
);
ok
(
hr
==
DXFILE_OK
,
"IDirectXFileData_GetType: %x
\n
"
,
hr
);
hr
=
IDirectXFileData_GetData
(
lpDirectXFileData
,
NULL
,
&
size
,
(
void
**
)
&
pData
);
ok
(
hr
==
DXFILE_OK
,
"IDirectXFileData_GetData: %x
\n
"
,
hr
);
for
(
i
=
0
;
i
<
*
plevel
;
i
++
)
printf
(
" "
);
debugstr_guid
(
str_clsid
,
&
clsid
);
debugstr_guid
(
str_clsid_type
,
clsid_type
);
printf
(
"Found object '%s' - %s - %s - %d
\n
"
,
name
,
str_clsid
,
str_clsid_type
,
size
);
if
(
EXPAND_STRING
&&
size
==
4
)
{
char
*
str
=
*
(
char
**
)
pData
;
printf
(
"string %s
\n
"
,
str
);
}
else
if
(
size
)
{
for
(
k
=
0
;
k
<
size
;
k
++
)
{
if
(
k
&&
!
(
k
%
16
))
printf
(
"
\n
"
);
printf
(
"%02x "
,
pData
[
k
]);
}
printf
(
"
\n
"
);
}
(
*
plevel
)
++
;
while
(
SUCCEEDED
(
hr
=
IDirectXFileData_GetNextObject
(
lpDirectXFileData
,
&
pChildObj
)))
{
LPDIRECTXFILEDATA
p1
;
LPDIRECTXFILEDATAREFERENCE
p2
;
LPDIRECTXFILEBINARY
p3
;
j
++
;
hr
=
IDirectXFileObject_QueryInterface
(
pChildObj
,
&
IID_IDirectXFileData
,
(
void
**
)
&
p1
);
if
(
SUCCEEDED
(
hr
))
{
for
(
i
=
0
;
i
<
*
plevel
;
i
++
)
printf
(
" "
);
printf
(
"Found Data (%d)
\n
"
,
j
);
process_data
(
p1
,
plevel
);
IDirectXFileData_Release
(
p1
);
}
hr
=
IDirectXFileObject_QueryInterface
(
pChildObj
,
&
IID_IDirectXFileDataReference
,
(
void
**
)
&
p2
);
if
(
SUCCEEDED
(
hr
))
{
LPDIRECTXFILEDATA
pfdo
;
for
(
i
=
0
;
i
<
*
plevel
;
i
++
)
printf
(
" "
);
printf
(
"Found Data Reference (%d)
\n
"
,
j
);
#if 0
hr = IDirectXFileDataReference_GetId(lpDirectXFileData, &clsid);
ok(hr == DXFILE_OK, "IDirectXFileData_GetId: %x\n", hr);
hr = IDirectXFileDataReference_GetName(lpDirectXFileData, name, &len);
ok(hr == DXFILE_OK, "IDirectXFileData_GetName: %x\n", hr);
#endif
IDirectXFileDataReference_Resolve
(
p2
,
&
pfdo
);
process_data
(
pfdo
,
plevel
);
IDirectXFileData_Release
(
pfdo
);
IDirectXFileDataReference_Release
(
p2
);
}
hr
=
IDirectXFileObject_QueryInterface
(
pChildObj
,
&
IID_IDirectXFileBinary
,
(
void
**
)
&
p3
);
if
(
SUCCEEDED
(
hr
))
{
for
(
i
=
0
;
i
<
*
plevel
;
i
++
)
printf
(
" "
);
printf
(
"Found Binary (%d)
\n
"
,
j
);
IDirectXFileBinary_Release
(
p3
);
}
}
(
*
plevel
)
--
;
ok
(
hr
==
DXFILE_OK
||
hr
==
DXFILEERR_NOMOREOBJECTS
,
"IDirectXFileData_GetNextObject: %x
\n
"
,
hr
);
}
static
void
test_dump
(
void
)
{
HRESULT
hr
;
unsigned
long
ref
;
LPDIRECTXFILE
lpDirectXFile
=
NULL
;
LPDIRECTXFILEENUMOBJECT
lpDirectXFileEnumObject
=
NULL
;
LPDIRECTXFILEDATA
lpDirectXFileData
=
NULL
;
HANDLE
hFile
;
LPVOID
pvData
=
NULL
;
DWORD
cbSize
;
if
(
!
pDirectXFileCreate
)
{
win_skip
(
"DirectXFileCreate is not available
\n
"
);
goto
exit
;
}
/* Dump data only if there is an object and a template */
hFile
=
CreateFileA
(
"objects.txt"
,
GENERIC_READ
,
FILE_SHARE_READ
,
NULL
,
OPEN_EXISTING
,
0
,
NULL
);
if
(
hFile
==
INVALID_HANDLE_VALUE
)
return
;
CloseHandle
(
hFile
);
hFile
=
CreateFileA
(
"templates.txt"
,
GENERIC_READ
,
FILE_SHARE_READ
,
NULL
,
OPEN_EXISTING
,
0
,
NULL
);
if
(
hFile
==
INVALID_HANDLE_VALUE
)
return
;
pvData
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
10000
);
if
(
!
ReadFile
(
hFile
,
pvData
,
10000
,
&
cbSize
,
NULL
))
{
skip
(
"Template file is too big
\n
"
);
goto
exit
;
}
printf
(
"Load %d (%d) bytes
\n
"
,
cbSize
,
strlen
(
pvData
));
hr
=
pDirectXFileCreate
(
&
lpDirectXFile
);
ok
(
hr
==
DXFILE_OK
,
"DirectXFileCreate: %x
\n
"
,
hr
);
if
(
!
lpDirectXFile
)
{
skip
(
"Couldn't create DirectXFile interface
\n
"
);
goto
exit
;
}
hr
=
IDirectXFile_RegisterTemplates
(
lpDirectXFile
,
pvData
,
strlen
(
pvData
));
ok
(
hr
==
DXFILE_OK
,
"IDirectXFileImpl_RegisterTemplates: %x
\n
"
,
hr
);
hr
=
IDirectXFile_CreateEnumObject
(
lpDirectXFile
,
(
LPVOID
)
"objects.txt"
,
DXFILELOAD_FROMFILE
,
&
lpDirectXFileEnumObject
);
ok
(
hr
==
DXFILE_OK
,
"IDirectXFile_CreateEnumObject: %x
\n
"
,
hr
);
while
(
SUCCEEDED
(
hr
=
IDirectXFileEnumObject_GetNextDataObject
(
lpDirectXFileEnumObject
,
&
lpDirectXFileData
)))
{
int
level
=
0
;
printf
(
"
\n
"
);
process_data
(
lpDirectXFileData
,
&
level
);
IDirectXFileData_Release
(
lpDirectXFileData
);
}
ok
(
hr
==
DXFILE_OK
||
hr
==
DXFILEERR_NOMOREOBJECTS
,
"IDirectXFileEnumObject_GetNextDataObject: %x
\n
"
,
hr
);
ref
=
IDirectXFile_Release
(
lpDirectXFileEnumObject
);
ok
(
ref
==
0
,
"Got refcount %ld, expected 0
\n
"
,
ref
);
ref
=
IDirectXFile_Release
(
lpDirectXFile
);
ok
(
ref
==
0
,
"Got refcount %ld, expected 0
\n
"
,
ref
);
CloseHandle
(
hFile
);
exit:
if
(
pvData
)
HeapFree
(
GetProcessHeap
(),
0
,
pvData
);
}
START_TEST
(
d3dxof
)
{
init_function_pointers
();
test_d3dxof
();
test_dump
();
FreeLibrary
(
hd3dxof
);
}
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