mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
174 lines
8.7 KiB
Diff
174 lines
8.7 KiB
Diff
From bc158e53fb1df19ee8029c899bf2801f4a99ef33 Mon Sep 17 00:00:00 2001
|
|
From: Michael Stefaniuc <mstefani@winehq.org>
|
|
Date: Thu, 19 Dec 2019 23:20:19 +0100
|
|
Subject: [PATCH 2/3] dmime/tests: Add PChannel tests
|
|
|
|
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
|
|
---
|
|
dlls/dmime/tests/performance.c | 126 ++++++++++++++++++++++++++++++++-
|
|
1 file changed, 124 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/dlls/dmime/tests/performance.c b/dlls/dmime/tests/performance.c
|
|
index 1d17e5200e..4c340252aa 100644
|
|
--- a/dlls/dmime/tests/performance.c
|
|
+++ b/dlls/dmime/tests/performance.c
|
|
@@ -100,10 +100,18 @@ static HRESULT test_InitAudio(void)
|
|
return hr;
|
|
|
|
port = NULL;
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(performance, 128, &port, NULL, NULL);
|
|
+ todo_wine ok(hr == E_INVALIDARG, "PChannelInfo failed, got %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(performance, 127, &port, NULL, NULL);
|
|
+ ok(hr == S_OK, "PChannelInfo failed, got %08x\n", hr);
|
|
hr = IDirectMusicPerformance8_PChannelInfo(performance, 0, &port, NULL, NULL);
|
|
- ok(hr == S_OK, "Failed to call PChannelInfo (%x)\n", hr);
|
|
+ ok(hr == S_OK, "PChannelInfo failed, got %08x\n", hr);
|
|
ok(port != NULL, "IDirectMusicPort not set\n");
|
|
- if (hr == S_OK && port != NULL)
|
|
+ hr = IDirectMusicPerformance8_AssignPChannel(performance, 0, port, 0, 0);
|
|
+ todo_wine ok(hr == DMUS_E_AUDIOPATHS_IN_USE, "AssignPChannel failed (%08x)\n", hr);
|
|
+ hr = IDirectMusicPerformance8_AssignPChannelBlock(performance, 0, port, 0);
|
|
+ todo_wine ok(hr == DMUS_E_AUDIOPATHS_IN_USE, "AssignPChannelBlock failed (%08x)\n", hr);
|
|
+ if (port)
|
|
IDirectMusicPort_Release(port);
|
|
|
|
hr = IDirectMusicPerformance8_GetDefaultAudioPath(performance, &path);
|
|
@@ -120,6 +128,8 @@ static HRESULT test_InitAudio(void)
|
|
create_performance(&performance, NULL, NULL, FALSE);
|
|
hr = IDirectMusicPerformance8_InitAudio(performance, NULL, NULL, NULL, 0, 64, 0, NULL);
|
|
ok(hr == S_OK, "InitAudio failed: %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(performance, 0, &port, NULL, NULL);
|
|
+ todo_wine ok(hr == E_INVALIDARG, "PChannelInfo failed, got %08x\n", hr);
|
|
destroy_performance(performance, NULL, NULL);
|
|
|
|
/* Refcounts for auto generated dmusic and dsound */
|
|
@@ -322,6 +332,117 @@ static void test_createport(void)
|
|
IDirectMusicPerformance_Release(perf);
|
|
}
|
|
|
|
+static void test_pchannel(void)
|
|
+{
|
|
+ IDirectMusicPerformance8 *perf;
|
|
+ IDirectMusicPort *port = NULL, *port2;
|
|
+ DWORD channel, group;
|
|
+ unsigned int i;
|
|
+ HRESULT hr;
|
|
+
|
|
+ create_performance(&perf, NULL, NULL, FALSE);
|
|
+ hr = IDirectMusicPerformance8_Init(perf, NULL, NULL, NULL);
|
|
+ ok(hr == S_OK, "Init failed: %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, 0, &port, NULL, NULL);
|
|
+ todo_wine ok(hr == E_INVALIDARG && !port, "PChannelInfo failed, got %08x, %p\n", hr, port);
|
|
+
|
|
+ /* Add default port. Sets PChannels 0-15 to the corresponding channels in group 1 */
|
|
+ hr = IDirectMusicPerformance8_AddPort(perf, NULL);
|
|
+ ok(hr == S_OK, "AddPort of default port failed: %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, 0, NULL, NULL, NULL);
|
|
+ ok(hr == S_OK, "PChannelInfo failed, got %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, 0, &port, NULL, NULL);
|
|
+ ok(hr == S_OK && port, "PChannelInfo failed, got %08x, %p\n", hr, port);
|
|
+ for (i = 1; i < 16; i++) {
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, i, &port2, &group, &channel);
|
|
+ todo_wine ok(hr == S_OK && port == port2 && group == 1 && channel == i,
|
|
+ "PChannelInfo failed, got %08x, %p, %u, %u\n", hr, port2, group, channel);
|
|
+ IDirectMusicPort_Release(port2);
|
|
+ }
|
|
+
|
|
+ /* Unset PChannels fail to retrieve */
|
|
+ todo_wine {
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, 16, &port2, NULL, NULL);
|
|
+ ok(hr == E_INVALIDARG, "PChannelInfo failed, got %08x, %p\n", hr, port);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, MAXDWORD - 16, &port2, NULL, NULL);
|
|
+ ok(hr == E_INVALIDARG, "PChannelInfo failed, got %08x, %p\n", hr, port);
|
|
+ }
|
|
+
|
|
+ /* Channel group 0 can be set just fine */
|
|
+ hr = IDirectMusicPerformance8_AssignPChannel(perf, 0, port, 0, 0);
|
|
+ ok(hr == S_OK, "AssignPChannel failed, got %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_AssignPChannelBlock(perf, 0, port, 0);
|
|
+ ok(hr == S_OK, "AssignPChannelBlock failed, got %08x\n", hr);
|
|
+ for (i = 1; i < 16; i++) {
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, i, &port2, &group, &channel);
|
|
+ todo_wine ok(hr == S_OK && port == port2 && group == 0 && channel == i,
|
|
+ "PChannelInfo failed, got %08x, %p, %u, %u\n", hr, port2, group, channel);
|
|
+ IDirectMusicPort_Release(port2);
|
|
+ }
|
|
+
|
|
+ /* Last PChannel Block can be set only individually but not read */
|
|
+ hr = IDirectMusicPerformance8_AssignPChannel(perf, MAXDWORD, port, 0, 3);
|
|
+ ok(hr == S_OK, "AssignPChannel failed, got %08x\n", hr);
|
|
+ port2 = (IDirectMusicPort *)0xdeadbeef;
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, MAXDWORD, &port2, NULL, NULL);
|
|
+ todo_wine ok(hr == E_INVALIDARG && port2 == (IDirectMusicPort *)0xdeadbeef,
|
|
+ "PChannelInfo failed, got %08x, %p\n", hr, port2);
|
|
+ hr = IDirectMusicPerformance8_AssignPChannelBlock(perf, MAXDWORD, port, 0);
|
|
+ ok(hr == E_INVALIDARG, "AssignPChannelBlock failed, got %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_AssignPChannelBlock(perf, MAXDWORD / 16, port, 1);
|
|
+ todo_wine ok(hr == E_INVALIDARG, "AssignPChannelBlock failed, got %08x\n", hr);
|
|
+ for (i = MAXDWORD - 15; i < MAXDWORD; i++) {
|
|
+ hr = IDirectMusicPerformance8_AssignPChannel(perf, i, port, 0, 0);
|
|
+ ok(hr == S_OK, "AssignPChannel failed, got %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, i, &port2, NULL, NULL);
|
|
+ todo_wine ok(hr == E_INVALIDARG && port2 == (IDirectMusicPort *)0xdeadbeef,
|
|
+ "PChannelInfo failed, got %08x, %p\n", hr, port2);
|
|
+ }
|
|
+
|
|
+ /* Second to last PChannel Block can be set only individually and read */
|
|
+ hr = IDirectMusicPerformance8_AssignPChannelBlock(perf, MAXDWORD / 16 - 1, port, 1);
|
|
+ todo_wine ok(hr == E_INVALIDARG, "AssignPChannelBlock failed, got %08x\n", hr);
|
|
+ for (i = MAXDWORD - 31; i < MAXDWORD - 15; i++) {
|
|
+ hr = IDirectMusicPerformance8_AssignPChannel(perf, i, port, 1, 7);
|
|
+ ok(hr == S_OK, "AssignPChannel failed, got %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, i, &port2, &group, &channel);
|
|
+ todo_wine ok(hr == S_OK && port2 == port && group == 1 && channel == 7,
|
|
+ "PChannelInfo failed, got %08x, %p, %u, %u\n", hr, port2, group, channel);
|
|
+ IDirectMusicPort_Release(port2);
|
|
+ }
|
|
+
|
|
+ /* Third to last PChannel Block behaves normal */
|
|
+ hr = IDirectMusicPerformance8_AssignPChannelBlock(perf, MAXDWORD / 16 - 2, port, 0);
|
|
+ ok(hr == S_OK, "AssignPChannelBlock failed, got %08x\n", hr);
|
|
+ for (i = MAXDWORD - 47; i < MAXDWORD - 31; i++) {
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, i, &port2, &group, &channel);
|
|
+ todo_wine ok(hr == S_OK && port2 == port && group == 0 && channel == i % 16,
|
|
+ "PChannelInfo failed, got %08x, %p, %u, %u\n", hr, port2, group, channel);
|
|
+ IDirectMusicPort_Release(port2);
|
|
+ }
|
|
+
|
|
+ /* One PChannel set in a Block, rest is initialized too */
|
|
+ hr = IDirectMusicPerformance8_AssignPChannel(perf, 4711, port, 1, 13);
|
|
+ ok(hr == S_OK, "AssignPChannel failed, got %08x\n", hr);
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, 4711, &port2, &group, &channel);
|
|
+ todo_wine ok(hr == S_OK && port2 == port && group == 1 && channel == 13,
|
|
+ "PChannelInfo failed, got %08x, %p, %u, %u\n", hr, port2, group, channel);
|
|
+ IDirectMusicPort_Release(port2);
|
|
+ group = channel = 0xdeadbeef;
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, 4712, &port2, &group, &channel);
|
|
+ todo_wine ok(hr == S_OK && port2 == port && group == 0 && channel == 8,
|
|
+ "PChannelInfo failed, got %08x, %p, %u, %u\n", hr, port2, group, channel);
|
|
+ IDirectMusicPort_Release(port2);
|
|
+ group = channel = 0xdeadbeef;
|
|
+ hr = IDirectMusicPerformance8_PChannelInfo(perf, 4719, &port2, &group, &channel);
|
|
+ todo_wine ok(hr == S_OK && port2 == port && group == 0 && channel == 15,
|
|
+ "PChannelInfo failed, got %08x, %p, %u, %u\n", hr, port2, group, channel);
|
|
+ IDirectMusicPort_Release(port2);
|
|
+
|
|
+ IDirectMusicPort_Release(port);
|
|
+ destroy_performance(perf, NULL, NULL);
|
|
+}
|
|
+
|
|
static void test_COM(void)
|
|
{
|
|
IDirectMusicPerformance *dmp = (IDirectMusicPerformance*)0xdeadbeef;
|
|
@@ -504,6 +625,7 @@ START_TEST( performance )
|
|
|
|
test_COM();
|
|
test_createport();
|
|
+ test_pchannel();
|
|
test_notification_type();
|
|
|
|
CoUninitialize();
|
|
--
|
|
2.17.1
|
|
|