2017-01-27 00:45:45 +01:00
|
|
|
From f7566e5af2508b89e87644cc079844f5827714ce Mon Sep 17 00:00:00 2001
|
2015-10-02 19:45:55 +02:00
|
|
|
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
|
|
|
Date: Fri, 2 Oct 2015 05:09:10 +0200
|
|
|
|
Subject: mfplat/tests: Add tests.
|
|
|
|
|
|
|
|
---
|
|
|
|
configure.ac | 1 +
|
|
|
|
dlls/mfplat/tests/Makefile.in | 5 ++
|
|
|
|
dlls/mfplat/tests/mfplat.c | 151 ++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
3 files changed, 157 insertions(+)
|
|
|
|
create mode 100644 dlls/mfplat/tests/Makefile.in
|
|
|
|
create mode 100644 dlls/mfplat/tests/mfplat.c
|
|
|
|
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
2017-01-27 00:45:45 +01:00
|
|
|
index 26be5e60676..a4c1360b3db 100644
|
2015-10-02 19:45:55 +02:00
|
|
|
--- a/configure.ac
|
|
|
|
+++ b/configure.ac
|
2017-01-27 00:45:45 +01:00
|
|
|
@@ -3122,6 +3122,7 @@ WINE_CONFIG_DLL(mciwave)
|
2015-10-02 19:45:55 +02:00
|
|
|
WINE_CONFIG_DLL(mf)
|
2017-01-27 00:45:45 +01:00
|
|
|
WINE_CONFIG_DLL(mf3216)
|
2015-10-02 19:45:55 +02:00
|
|
|
WINE_CONFIG_DLL(mfplat)
|
|
|
|
+WINE_CONFIG_TEST(dlls/mfplat/tests)
|
|
|
|
WINE_CONFIG_DLL(mfreadwrite)
|
|
|
|
WINE_CONFIG_DLL(mgmtapi)
|
|
|
|
WINE_CONFIG_DLL(midimap)
|
|
|
|
diff --git a/dlls/mfplat/tests/Makefile.in b/dlls/mfplat/tests/Makefile.in
|
|
|
|
new file mode 100644
|
2017-01-27 00:45:45 +01:00
|
|
|
index 00000000000..41a098daafe
|
2015-10-02 19:45:55 +02:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/dlls/mfplat/tests/Makefile.in
|
|
|
|
@@ -0,0 +1,5 @@
|
|
|
|
+TESTDLL = mfplat.dll
|
|
|
|
+IMPORTS = ole32
|
|
|
|
+
|
|
|
|
+C_SRCS = \
|
|
|
|
+ mfplat.c
|
|
|
|
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
|
|
|
|
new file mode 100644
|
2017-01-27 00:45:45 +01:00
|
|
|
index 00000000000..5e3be98b59d
|
2015-10-02 19:45:55 +02:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/dlls/mfplat/tests/mfplat.c
|
|
|
|
@@ -0,0 +1,151 @@
|
|
|
|
+/*
|
|
|
|
+ * Unit test suite for mfplat.
|
|
|
|
+ *
|
|
|
|
+ * Copyright 2015 Michael Müller
|
|
|
|
+ *
|
|
|
|
+ * 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 <stdarg.h>
|
|
|
|
+#include <string.h>
|
|
|
|
+
|
|
|
|
+#define COBJMACROS
|
|
|
|
+
|
|
|
|
+#include "windef.h"
|
|
|
|
+#include "winbase.h"
|
|
|
|
+#include "winuser.h"
|
|
|
|
+#include "winreg.h"
|
|
|
|
+
|
|
|
|
+#include "initguid.h"
|
|
|
|
+#include "mfapi.h"
|
|
|
|
+#include "mferror.h"
|
|
|
|
+
|
|
|
|
+#include "wine/test.h"
|
|
|
|
+
|
|
|
|
+DEFINE_GUID(MFT_CATEGORY_OTHER, 0x90175d57,0xb7ea,0x4901,0xae,0xb3,0x93,0x3a,0x87,0x47,0x75,0x6f);
|
|
|
|
+
|
|
|
|
+DEFINE_GUID(DUMMY_CLSID, 0x12345678,0x1234,0x1234,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19);
|
|
|
|
+DEFINE_GUID(DUMMY_GUID1, 0x12345678,0x1234,0x1234,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21);
|
|
|
|
+DEFINE_GUID(DUMMY_GUID2, 0x12345678,0x1234,0x1234,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22);
|
|
|
|
+DEFINE_GUID(DUMMY_GUID3, 0x12345678,0x1234,0x1234,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33);
|
|
|
|
+
|
|
|
|
+static HRESULT (WINAPI* pMFTEnum)(GUID, UINT32, MFT_REGISTER_TYPE_INFO *, MFT_REGISTER_TYPE_INFO *,
|
|
|
|
+ IMFAttributes *, CLSID**, UINT32*);
|
|
|
|
+static HRESULT (WINAPI* pMFTRegister)(CLSID, GUID, LPWSTR, UINT32, UINT32, MFT_REGISTER_TYPE_INFO *,
|
|
|
|
+ UINT32, MFT_REGISTER_TYPE_INFO *, void *);
|
|
|
|
+static HRESULT (WINAPI* pMFTUnregister)(CLSID);
|
|
|
|
+
|
|
|
|
+static BOOL check_clsid(CLSID *clsids, UINT32 count)
|
|
|
|
+{
|
|
|
|
+ int i;
|
|
|
|
+ for (i = 0; i < count; i++)
|
|
|
|
+ {
|
|
|
|
+ if (IsEqualGUID(&clsids[i], &DUMMY_CLSID))
|
|
|
|
+ return TRUE;
|
|
|
|
+ }
|
|
|
|
+ return FALSE;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void test_register(void)
|
|
|
|
+{
|
|
|
|
+ static WCHAR name[] = {'W','i','n','e',' ','t','e','s','t',0};
|
|
|
|
+ MFT_REGISTER_TYPE_INFO input;
|
|
|
|
+ MFT_REGISTER_TYPE_INFO output;
|
|
|
|
+ CLSID *clsids;
|
|
|
|
+ UINT32 count;
|
|
|
|
+ HRESULT ret;
|
|
|
|
+
|
|
|
|
+ memcpy(&input.guidMajorType, &DUMMY_GUID1, sizeof(GUID));
|
|
|
|
+ memcpy(&input.guidMajorType, &DUMMY_GUID2, sizeof(GUID));
|
|
|
|
+ memcpy(&output.guidSubtype, &DUMMY_GUID1, sizeof(GUID));
|
|
|
|
+ memcpy(&output.guidSubtype, &DUMMY_GUID3, sizeof(GUID));
|
|
|
|
+
|
|
|
|
+ ret = pMFTRegister(DUMMY_CLSID, MFT_CATEGORY_OTHER, name, 0, 1, &input, 1, &output, NULL);
|
|
|
|
+ ok(!ret, "Failed to register dummy filter: %x\n", ret);
|
|
|
|
+ if (ret) return;
|
|
|
|
+
|
|
|
|
+ count = 0;
|
|
|
|
+ clsids = NULL;
|
|
|
|
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, NULL, NULL, NULL, &clsids, &count);
|
|
|
|
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
|
|
|
|
+ ok(count > 0, "Expected count > 0\n");
|
|
|
|
+ ok(clsids != NULL, "Expected clsids != NULL\n");
|
|
|
|
+ ok(check_clsid(clsids, count), "Filter was not part of enumeration\n");
|
|
|
|
+ CoTaskMemFree(clsids);
|
|
|
|
+
|
|
|
|
+ count = 0;
|
|
|
|
+ clsids = NULL;
|
|
|
|
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, &input, NULL, NULL, &clsids, &count);
|
|
|
|
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
|
|
|
|
+ ok(count > 0, "Expected count > 0\n");
|
|
|
|
+ ok(clsids != NULL, "Expected clsids != NULL\n");
|
|
|
|
+ ok(check_clsid(clsids, count), "Filter was not part of enumeration\n");
|
|
|
|
+ CoTaskMemFree(clsids);
|
|
|
|
+
|
|
|
|
+ count = 0;
|
|
|
|
+ clsids = NULL;
|
|
|
|
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, NULL, &output, NULL, &clsids, &count);
|
|
|
|
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
|
|
|
|
+ ok(count > 0, "Expected count > 0\n");
|
|
|
|
+ ok(clsids != NULL, "Expected clsids != NULL\n");
|
|
|
|
+ ok(check_clsid(clsids, count), "Filter was not part of enumeration\n");
|
|
|
|
+ CoTaskMemFree(clsids);
|
|
|
|
+
|
|
|
|
+ count = 0;
|
|
|
|
+ clsids = NULL;
|
|
|
|
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, &input, &output, NULL, &clsids, &count);
|
|
|
|
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
|
|
|
|
+ ok(count > 0, "Expected count > 0\n");
|
|
|
|
+ ok(clsids != NULL, "Expected clsids != NULL\n");
|
|
|
|
+ ok(check_clsid(clsids, count), "Filter was not part of enumeration\n");
|
|
|
|
+ CoTaskMemFree(clsids);
|
|
|
|
+
|
|
|
|
+ /* exchange input and output */
|
|
|
|
+ count = 0;
|
|
|
|
+ clsids = NULL;
|
|
|
|
+ ret = pMFTEnum(MFT_CATEGORY_OTHER, 0, &output, &input, NULL, &clsids, &count);
|
|
|
|
+ ok(!ret, "Failed to enumerate filters: %x\n", ret);
|
|
|
|
+ ok(!count, "Expected count == 0\n");
|
|
|
|
+ ok(clsids == NULL, "Expected clsids == NULL\n");
|
|
|
|
+
|
|
|
|
+ pMFTUnregister(DUMMY_CLSID);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+BOOL init_function_ptrs(void)
|
|
|
|
+{
|
|
|
|
+ HMODULE mfplat = LoadLibraryA("mfplat.dll");
|
|
|
|
+ if (!mfplat)
|
|
|
|
+ {
|
|
|
|
+ win_skip("Could not load mfplat.dll\n");
|
|
|
|
+ return FALSE;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #define LOAD_FUNCPTR(f) p##f = (void*)GetProcAddress(mfplat, #f)
|
|
|
|
+ LOAD_FUNCPTR(MFTEnum);
|
|
|
|
+ LOAD_FUNCPTR(MFTRegister);
|
|
|
|
+ LOAD_FUNCPTR(MFTUnregister);
|
|
|
|
+ #undef LOAD_FUNCPTR
|
|
|
|
+
|
|
|
|
+ return TRUE;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+START_TEST(mfplat)
|
|
|
|
+{
|
|
|
|
+ if (!init_function_ptrs())
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ CoInitialize(NULL);
|
|
|
|
+ test_register();
|
|
|
|
+}
|
|
|
|
--
|
2017-01-27 00:45:45 +01:00
|
|
|
2.11.0
|
2015-10-02 19:45:55 +02:00
|
|
|
|