Jan de Mooij : shell32/autocomplete: Add unit tests for autocomplete.

Alexandre Julliard julliard at winehq.org
Wed Dec 3 05:56:23 CST 2008


Module: wine
Branch: master
Commit: 8c6495cc23c7bf89fecbcbfcdd169326f1dfd8c6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8c6495cc23c7bf89fecbcbfcdd169326f1dfd8c6

Author: Jan de Mooij <jandemooij at gmail.com>
Date:   Tue Dec  2 17:57:45 2008 +0100

shell32/autocomplete: Add unit tests for autocomplete.

---

 dlls/shell32/tests/Makefile.in    |    1 +
 dlls/shell32/tests/autocomplete.c |  122 +++++++++++++++++++++++++++++++++++++
 2 files changed, 123 insertions(+), 0 deletions(-)

diff --git a/dlls/shell32/tests/Makefile.in b/dlls/shell32/tests/Makefile.in
index 4b1a140..0fc8d74 100644
--- a/dlls/shell32/tests/Makefile.in
+++ b/dlls/shell32/tests/Makefile.in
@@ -7,6 +7,7 @@ IMPORTS   = shell32 ole32 oleaut32 user32 advapi32 kernel32
 
 CTESTS = \
 	appbar.c \
+	autocomplete.c \
 	generated.c \
 	shelllink.c \
 	shellpath.c \
diff --git a/dlls/shell32/tests/autocomplete.c b/dlls/shell32/tests/autocomplete.c
new file mode 100644
index 0000000..782fc35
--- /dev/null
+++ b/dlls/shell32/tests/autocomplete.c
@@ -0,0 +1,122 @@
+/*
+ * Tests for autocomplete
+ *
+ * Copyright 2008 Jan de Mooij
+ *
+ * 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
+ */
+
+#define COBJMACROS
+
+#include <wine/test.h>
+#include <stdarg.h>
+
+#include "windows.h"
+#include "shobjidl.h"
+#include "shlguid.h"
+#include "initguid.h"
+#include "shldisp.h"
+
+static HWND hMainWnd, hEdit;
+static HINSTANCE hinst;
+static int killfocus_count;
+
+static void test_init(void) {
+    HRESULT r;
+    IAutoComplete* ac;
+    IUnknown *acSource;
+
+    /* AutoComplete instance */
+    r = CoCreateInstance(&CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER,
+                         &IID_IAutoComplete, (LPVOID*)&ac);
+    ok(SUCCEEDED(r), "no IID_IAutoComplete (0x%08x)\n", r);
+
+    /* AutoComplete source */
+    r = CoCreateInstance(&CLSID_ACLMulti, NULL, CLSCTX_INPROC_SERVER,
+                        &IID_IACList, (LPVOID*)&acSource);
+    ok(SUCCEEDED(r), "no IID_IACList (0x%08x)\n", r);
+
+    /* bind to edit control */
+    r = IAutoComplete_Init(ac, hEdit, acSource, NULL, NULL);
+    ok(SUCCEEDED(r), "Init failed (0x%08x)\n", r);
+}
+static void test_killfocus(void) {
+    /* Test if WM_KILLFOCUS messages are handled properly by checking if
+     * the parent receives an EN_KILLFOCUS message. */
+    SetFocus(hEdit);
+    killfocus_count = 0;
+    SetFocus(0);
+    ok(killfocus_count == 1, "Expected one EN_KILLFOCUS message, got: %d\n", killfocus_count);
+}
+static LRESULT CALLBACK MyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
+    switch(msg) {
+    case WM_CREATE:
+        /* create edit control */
+        hEdit = CreateWindowEx(0, "EDIT", "Some text", 0, 10, 10, 300, 300,
+                    hWnd, NULL, hinst, NULL);
+        ok(hEdit != NULL, "Can't create edit control\n");
+        break;
+    case WM_COMMAND:
+        if(HIWORD(wParam) == EN_KILLFOCUS)
+            killfocus_count++;
+        break;
+    }
+    return DefWindowProcA(hWnd, msg, wParam, lParam);
+}
+static void createMainWnd(void) {
+    WNDCLASSA wc;
+    wc.style = CS_HREDRAW | CS_VREDRAW;
+    wc.cbClsExtra = 0;
+    wc.cbWndExtra = 0;
+    wc.hInstance = GetModuleHandleA(NULL);
+    wc.hIcon = NULL;
+    wc.hCursor = LoadCursorA(NULL, IDC_IBEAM);
+    wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
+    wc.lpszMenuName = NULL;
+    wc.lpszClassName = "MyTestWnd";
+    wc.lpfnWndProc = MyWndProc;
+    RegisterClassA(&wc);
+
+    hMainWnd = CreateWindowExA(0, "MyTestWnd", "Blah", WS_OVERLAPPEDWINDOW,
+      CW_USEDEFAULT, CW_USEDEFAULT, 130, 105, NULL, NULL, GetModuleHandleA(NULL), 0);
+}
+START_TEST(autocomplete) {
+    HRESULT r;
+    MSG msg;
+
+    r = CoInitialize(NULL);
+    ok(SUCCEEDED(r), "CoInitialize failed (0x%08x). Tests aborted.\n", r);
+    if (FAILED(r))
+        return;
+
+    createMainWnd();
+
+    if(!ok(hMainWnd != NULL, "Failed to create parent window. Tests aborted.\n"))
+        return;
+
+    test_init();
+    test_killfocus();
+
+    PostQuitMessage(0);
+    while(GetMessageA(&msg,0,0,0)) {
+        TranslateMessage(&msg);
+        DispatchMessageA(&msg);
+    }
+
+    DestroyWindow(hEdit);
+    DestroyWindow(hMainWnd);
+
+    CoUninitialize();
+}




More information about the wine-cvs mailing list