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
881e4246
Commit
881e4246
authored
Sep 04, 2023
by
Rémi Bernon
Committed by
Alexandre Julliard
Sep 08, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dmime/tests: Test IDirectMusicGraph interface with a dummy tool.
parent
08177b1b
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
281 additions
and
4 deletions
+281
-4
dmime.c
dlls/dmime/tests/dmime.c
+281
-4
No files found.
dlls/dmime/tests/dmime.c
View file @
881e4246
...
...
@@ -27,6 +27,126 @@
#include <audioclient.h>
#include <guiddef.h>
struct
test_tool
{
IDirectMusicTool
IDirectMusicTool_iface
;
LONG
ref
;
IDirectMusicGraph
*
graph
;
};
static
struct
test_tool
*
impl_from_IDirectMusicTool
(
IDirectMusicTool
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
struct
test_tool
,
IDirectMusicTool_iface
);
}
static
HRESULT
WINAPI
test_tool_QueryInterface
(
IDirectMusicTool
*
iface
,
REFIID
iid
,
void
**
out
)
{
if
(
IsEqualGUID
(
iid
,
&
IID_IUnknown
)
||
IsEqualGUID
(
iid
,
&
IID_IDirectMusicTool
))
{
IDirectMusicTool_AddRef
(
iface
);
*
out
=
iface
;
return
S_OK
;
}
ok
(
IsEqualGUID
(
iid
,
&
IID_IDirectMusicTool8
)
||
IsEqualGUID
(
iid
,
&
IID_IPersistStream
),
"got iid %s
\n
"
,
debugstr_guid
(
iid
));
*
out
=
NULL
;
return
E_NOINTERFACE
;
}
static
ULONG
WINAPI
test_tool_AddRef
(
IDirectMusicTool
*
iface
)
{
struct
test_tool
*
tool
=
impl_from_IDirectMusicTool
(
iface
);
return
InterlockedIncrement
(
&
tool
->
ref
);
}
static
ULONG
WINAPI
test_tool_Release
(
IDirectMusicTool
*
iface
)
{
struct
test_tool
*
tool
=
impl_from_IDirectMusicTool
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
tool
->
ref
);
if
(
!
ref
)
{
if
(
tool
->
graph
)
IDirectMusicGraph_Release
(
tool
->
graph
);
free
(
tool
);
}
return
ref
;
}
static
HRESULT
WINAPI
test_tool_Init
(
IDirectMusicTool
*
iface
,
IDirectMusicGraph
*
graph
)
{
struct
test_tool
*
tool
=
impl_from_IDirectMusicTool
(
iface
);
if
((
tool
->
graph
=
graph
))
IDirectMusicGraph_AddRef
(
tool
->
graph
);
return
S_OK
;
}
static
HRESULT
WINAPI
test_tool_GetMsgDeliveryType
(
IDirectMusicTool
*
iface
,
DWORD
*
type
)
{
*
type
=
DMUS_PMSGF_TOOL_IMMEDIATE
;
return
S_OK
;
}
static
HRESULT
WINAPI
test_tool_GetMediaTypeArraySize
(
IDirectMusicTool
*
iface
,
DWORD
*
size
)
{
*
size
=
0
;
return
S_OK
;
}
static
HRESULT
WINAPI
test_tool_GetMediaTypes
(
IDirectMusicTool
*
iface
,
DWORD
**
types
,
DWORD
size
)
{
ok
(
0
,
"%#04lx: unexpected %s, types %p, size %lu
\n
"
,
GetCurrentThreadId
(),
__func__
,
types
,
size
);
return
S_OK
;
}
static
HRESULT
WINAPI
test_tool_ProcessPMsg
(
IDirectMusicTool
*
iface
,
IDirectMusicPerformance
*
performance
,
DMUS_PMSG
*
msg
)
{
ok
(
0
,
"%#04lx: unexpected %s, iface %p, performance %p, msg %p
\n
"
,
GetCurrentThreadId
(),
__func__
,
iface
,
performance
,
msg
);
return
DMUS_S_REQUEUE
;
}
static
HRESULT
WINAPI
test_tool_Flush
(
IDirectMusicTool
*
iface
,
IDirectMusicPerformance
*
performance
,
DMUS_PMSG
*
msg
,
REFERENCE_TIME
time
)
{
ok
(
0
,
"unexpected %s
\n
"
,
__func__
);
return
S_OK
;
}
static
IDirectMusicToolVtbl
test_tool_vtbl
=
{
test_tool_QueryInterface
,
test_tool_AddRef
,
test_tool_Release
,
test_tool_Init
,
test_tool_GetMsgDeliveryType
,
test_tool_GetMediaTypeArraySize
,
test_tool_GetMediaTypes
,
test_tool_ProcessPMsg
,
test_tool_Flush
,
};
static
HRESULT
test_tool_create
(
IDirectMusicTool
**
ret_iface
)
{
struct
test_tool
*
tool
;
*
ret_iface
=
NULL
;
if
(
!
(
tool
=
calloc
(
1
,
sizeof
(
*
tool
))))
return
E_OUTOFMEMORY
;
tool
->
IDirectMusicTool_iface
.
lpVtbl
=
&
test_tool_vtbl
;
tool
->
ref
=
1
;
*
ret_iface
=
&
tool
->
IDirectMusicTool_iface
;
return
S_OK
;
}
static
HRESULT
test_tool_get_graph
(
IDirectMusicTool
*
iface
,
IDirectMusicGraph
**
graph
)
{
struct
test_tool
*
tool
=
impl_from_IDirectMusicTool
(
iface
);
if
((
*
graph
=
tool
->
graph
))
IDirectMusicGraph_AddRef
(
tool
->
graph
);
return
tool
->
graph
?
S_OK
:
DMUS_E_NOT_FOUND
;
}
static
BOOL
missing_dmime
(
void
)
{
IDirectMusicSegment8
*
dms
;
...
...
@@ -458,18 +578,20 @@ static void test_audiopathconfig(void)
static
void
test_graph
(
void
)
{
IDirectMusicGraph
*
dmg
;
IDirectMusicTool
*
tool1
,
*
tool2
,
*
tmp_tool
;
IDirectMusicGraph
*
graph
,
*
tmp_graph
;
IPersistStream
*
ps
;
CLSID
class
=
{
0
};
ULARGE_INTEGER
size
;
DMUS_PMSG
msg
;
HRESULT
hr
;
hr
=
CoCreateInstance
(
&
CLSID_DirectMusicGraph
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_IDirectMusicGraph
,
(
void
**
)
&
dmg
);
&
IID_IDirectMusicGraph
,
(
void
**
)
&
graph
);
ok
(
hr
==
S_OK
,
"DirectMusicGraph create failed: %#lx, expected S_OK
\n
"
,
hr
);
/* IPersistStream */
hr
=
IDirectMusicGraph_QueryInterface
(
dmg
,
&
IID_IPersistStream
,
(
void
**
)
&
ps
);
hr
=
IDirectMusicGraph_QueryInterface
(
graph
,
&
IID_IPersistStream
,
(
void
**
)
&
ps
);
ok
(
hr
==
S_OK
,
"QueryInterface for IID_IPersistStream failed: %#lx
\n
"
,
hr
);
hr
=
IPersistStream_GetClassID
(
ps
,
&
class
);
ok
(
hr
==
S_OK
||
broken
(
hr
==
E_NOTIMPL
)
/* win2k */
,
"IPersistStream_GetClassID failed: %#lx
\n
"
,
hr
);
...
...
@@ -485,7 +607,162 @@ static void test_graph(void)
hr
=
IPersistStream_Save
(
ps
,
NULL
,
TRUE
);
ok
(
hr
==
E_NOTIMPL
,
"IPersistStream_Save failed: %#lx
\n
"
,
hr
);
while
(
IDirectMusicGraph_Release
(
dmg
));
IDirectMusicGraph_Release
(
graph
);
hr
=
test_tool_create
(
&
tool1
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
trace
(
"created tool1 %p
\n
"
,
tool1
);
hr
=
test_tool_create
(
&
tool2
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
trace
(
"created tool2 %p
\n
"
,
tool2
);
hr
=
CoCreateInstance
(
&
CLSID_DirectMusicGraph
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_IDirectMusicGraph
,
(
void
**
)
&
graph
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_InsertTool
(
graph
,
NULL
,
NULL
,
0
,
-
1
);
ok
(
hr
==
E_POINTER
,
"got %#lx
\n
"
,
hr
);
/* InsertTool initializes the tool */
hr
=
IDirectMusicGraph_InsertTool
(
graph
,
tool1
,
NULL
,
0
,
-
1
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
hr
=
test_tool_get_graph
(
tool1
,
&
tmp_graph
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
ok
(
graph
==
tmp_graph
,
"got %#lx
\n
"
,
hr
);
IDirectMusicGraph_Release
(
tmp_graph
);
hr
=
IDirectMusicGraph_InsertTool
(
graph
,
tool2
,
NULL
,
0
,
1
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_GetTool
(
graph
,
0
,
NULL
);
todo_wine
ok
(
hr
==
E_POINTER
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_GetTool
(
graph
,
0
,
&
tmp_tool
);
todo_wine
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
todo_wine
ok
(
tool1
==
tmp_tool
,
"got %p
\n
"
,
tmp_tool
);
if
(
hr
==
S_OK
)
IDirectMusicTool_Release
(
tmp_tool
);
hr
=
IDirectMusicGraph_GetTool
(
graph
,
1
,
&
tmp_tool
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
ok
(
tool2
==
tmp_tool
,
"got %p
\n
"
,
tmp_tool
);
if
(
hr
==
S_OK
)
IDirectMusicTool_Release
(
tmp_tool
);
hr
=
IDirectMusicGraph_GetTool
(
graph
,
2
,
&
tmp_tool
);
ok
(
hr
==
DMUS_E_NOT_FOUND
,
"got %#lx
\n
"
,
hr
);
/* cannot insert the tool twice */
hr
=
IDirectMusicGraph_InsertTool
(
graph
,
tool1
,
NULL
,
0
,
-
1
);
ok
(
hr
==
DMUS_E_ALREADY_EXISTS
,
"got %#lx
\n
"
,
hr
);
/* test removing the first tool */
hr
=
IDirectMusicGraph_RemoveTool
(
graph
,
NULL
);
todo_wine
ok
(
hr
==
E_POINTER
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_RemoveTool
(
graph
,
tool1
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_RemoveTool
(
graph
,
tool1
);
todo_wine
ok
(
hr
==
DMUS_E_NOT_FOUND
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_GetTool
(
graph
,
0
,
&
tmp_tool
);
todo_wine
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
ok
(
tool2
==
tmp_tool
,
"got %p
\n
"
,
tmp_tool
);
if
(
hr
==
S_OK
)
IDirectMusicTool_Release
(
tmp_tool
);
hr
=
IDirectMusicGraph_GetTool
(
graph
,
1
,
&
tmp_tool
);
todo_wine
ok
(
hr
==
DMUS_E_NOT_FOUND
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_InsertTool
(
graph
,
tool1
,
NULL
,
0
,
-
1
);
todo_wine
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_GetTool
(
graph
,
0
,
&
tmp_tool
);
todo_wine
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
todo_wine
ok
(
tool1
==
tmp_tool
,
"got %p
\n
"
,
tmp_tool
);
if
(
hr
==
S_OK
)
IDirectMusicTool_Release
(
tmp_tool
);
/* Test basic IDirectMusicGraph_StampPMsg usage */
hr
=
IDirectMusicGraph_StampPMsg
(
graph
,
NULL
);
todo_wine
ok
(
hr
==
E_POINTER
,
"got %#lx
\n
"
,
hr
);
memset
(
&
msg
,
0
,
sizeof
(
msg
));
hr
=
IDirectMusicGraph_StampPMsg
(
graph
,
&
msg
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
todo_wine
ok
(
msg
.
pGraph
==
graph
,
"got %p
\n
"
,
msg
.
pGraph
);
todo_wine
ok
(
msg
.
pTool
==
tool1
,
"got %p
\n
"
,
msg
.
pTool
);
ok
(
!
msg
.
dwSize
,
"got %ld
\n
"
,
msg
.
dwSize
);
ok
(
!
msg
.
rtTime
,
"got %I64d
\n
"
,
msg
.
rtTime
);
ok
(
!
msg
.
mtTime
,
"got %ld
\n
"
,
msg
.
mtTime
);
todo_wine
ok
(
msg
.
dwFlags
==
DMUS_PMSGF_TOOL_IMMEDIATE
,
"got %#lx
\n
"
,
msg
.
dwFlags
);
ok
(
!
msg
.
dwPChannel
,
"got %ld
\n
"
,
msg
.
dwPChannel
);
ok
(
!
msg
.
dwVirtualTrackID
,
"got %ld
\n
"
,
msg
.
dwVirtualTrackID
);
ok
(
!
msg
.
dwType
,
"got %#lx
\n
"
,
msg
.
dwType
);
ok
(
!
msg
.
dwVoiceID
,
"got %ld
\n
"
,
msg
.
dwVoiceID
);
ok
(
!
msg
.
dwGroupID
,
"got %ld
\n
"
,
msg
.
dwGroupID
);
ok
(
!
msg
.
punkUser
,
"got %p
\n
"
,
msg
.
punkUser
);
hr
=
IDirectMusicGraph_StampPMsg
(
graph
,
&
msg
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
todo_wine
ok
(
msg
.
pGraph
==
graph
,
"got %p
\n
"
,
msg
.
pGraph
);
todo_wine
ok
(
msg
.
pTool
==
tool2
,
"got %p
\n
"
,
msg
.
pTool
);
hr
=
IDirectMusicGraph_StampPMsg
(
graph
,
&
msg
);
todo_wine
ok
(
hr
==
DMUS_S_LAST_TOOL
,
"got %#lx
\n
"
,
hr
);
todo_wine
ok
(
msg
.
pGraph
==
graph
,
"got %p
\n
"
,
msg
.
pGraph
);
ok
(
!
msg
.
pTool
,
"got %p
\n
"
,
msg
.
pTool
);
hr
=
IDirectMusicGraph_StampPMsg
(
graph
,
&
msg
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
todo_wine
ok
(
msg
.
pGraph
==
graph
,
"got %p
\n
"
,
msg
.
pGraph
);
todo_wine
ok
(
msg
.
pTool
==
tool1
,
"got %p
\n
"
,
msg
.
pTool
);
if
(
msg
.
pGraph
)
IDirectMusicGraph_Release
(
msg
.
pGraph
);
msg
.
pGraph
=
NULL
;
if
(
msg
.
pTool
)
IDirectMusicGraph_Release
(
msg
.
pTool
);
msg
.
pTool
=
NULL
;
/* test StampPMsg with the wrong graph or innexistant tools */
hr
=
CoCreateInstance
(
&
CLSID_DirectMusicGraph
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_IDirectMusicGraph
,
(
void
**
)
&
tmp_graph
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
msg
.
pGraph
=
tmp_graph
;
IDirectMusicGraph_AddRef
(
msg
.
pGraph
);
msg
.
pTool
=
tool1
;
IDirectMusicTool_AddRef
(
msg
.
pTool
);
hr
=
IDirectMusicGraph_StampPMsg
(
graph
,
&
msg
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
ok
(
msg
.
pGraph
==
tmp_graph
,
"got %p
\n
"
,
msg
.
pGraph
);
todo_wine
ok
(
msg
.
pTool
==
tool2
,
"got %p
\n
"
,
msg
.
pTool
);
if
(
msg
.
pGraph
)
IDirectMusicGraph_Release
(
msg
.
pGraph
);
msg
.
pGraph
=
NULL
;
msg
.
pGraph
=
graph
;
IDirectMusicGraph_AddRef
(
msg
.
pGraph
);
hr
=
IDirectMusicGraph_StampPMsg
(
tmp_graph
,
&
msg
);
todo_wine
ok
(
hr
==
DMUS_S_LAST_TOOL
,
"got %#lx
\n
"
,
hr
);
ok
(
msg
.
pGraph
==
graph
,
"got %p
\n
"
,
msg
.
pGraph
);
todo_wine
ok
(
msg
.
pTool
==
NULL
,
"got %p
\n
"
,
msg
.
pTool
);
msg
.
pTool
=
tool2
;
IDirectMusicTool_AddRef
(
msg
.
pTool
);
hr
=
IDirectMusicGraph_InsertTool
(
tmp_graph
,
tool1
,
NULL
,
0
,
0
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_InsertTool
(
tmp_graph
,
tool2
,
NULL
,
0
,
0
);
todo_wine
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_StampPMsg
(
tmp_graph
,
&
msg
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
ok
(
msg
.
pGraph
==
graph
,
"got %p
\n
"
,
msg
.
pGraph
);
todo_wine
ok
(
msg
.
pTool
==
tool1
,
"got %p
\n
"
,
msg
.
pTool
);
if
(
msg
.
pGraph
)
IDirectMusicGraph_Release
(
msg
.
pGraph
);
msg
.
pGraph
=
NULL
;
hr
=
IDirectMusicGraph_RemoveTool
(
graph
,
tool1
);
ok
(
hr
==
S_OK
,
"got %#lx
\n
"
,
hr
);
hr
=
IDirectMusicGraph_StampPMsg
(
tmp_graph
,
&
msg
);
todo_wine
ok
(
hr
==
DMUS_S_LAST_TOOL
,
"got %#lx
\n
"
,
hr
);
ok
(
msg
.
pGraph
==
NULL
,
"got %p
\n
"
,
msg
.
pGraph
);
todo_wine
ok
(
msg
.
pTool
==
NULL
,
"got %p
\n
"
,
msg
.
pTool
);
IDirectMusicGraph_Release
(
tmp_graph
);
IDirectMusicGraph_Release
(
graph
);
IDirectMusicTool_Release
(
tool2
);
IDirectMusicTool_Release
(
tool1
);
}
static
void
test_segment
(
void
)
...
...
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