Qian Hong : atl100/tests: Added tests for AtlAxAttachControl.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 15 15:55:41 CST 2015


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

Author: Qian Hong <qhong at codeweavers.com>
Date:   Thu Jan 15 17:28:14 2015 +0800

atl100/tests: Added tests for AtlAxAttachControl.

---

 dlls/atl100/tests/atl.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)

diff --git a/dlls/atl100/tests/atl.c b/dlls/atl100/tests/atl.c
index dcc199f..6a8bbce 100644
--- a/dlls/atl100/tests/atl.c
+++ b/dlls/atl100/tests/atl.c
@@ -25,6 +25,7 @@
 #include <windef.h>
 #include <winbase.h>
 #include <winuser.h>
+#include <exdisp.h>
 
 #include <atlbase.h>
 #include <mshtml.h>
@@ -757,8 +758,104 @@ static void test_ax_win(void)
     todo_wine ok(wndproc[0] != wndproc[1], "expected different proc!\n");
 }
 
+static ATOM register_class(void)
+{
+    WNDCLASSA wndclassA;
+
+    wndclassA.style = 0;
+    wndclassA.lpfnWndProc = DefWindowProcA;
+    wndclassA.cbClsExtra = 0;
+    wndclassA.cbWndExtra = 0;
+    wndclassA.hInstance = GetModuleHandleA(NULL);
+    wndclassA.hIcon = NULL;
+    wndclassA.hCursor = LoadCursorA(NULL, (LPSTR)IDC_ARROW);
+    wndclassA.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
+    wndclassA.lpszMenuName = NULL;
+    wndclassA.lpszClassName = "WineAtlTestClass";
+
+    return RegisterClassA(&wndclassA);
+}
+
+static HWND create_container_window(void)
+{
+    return CreateWindowA("WineAtlTestClass", "Wine ATL Test Window", 0,
+                              CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+                              CW_USEDEFAULT, NULL, NULL, NULL, NULL);
+}
+
+static void test_AtlAxAttachControl(void)
+{
+    HWND hwnd;
+    HRESULT hr;
+    IUnknown *control, *container;
+    LONG val;
+
+    hr = AtlAxAttachControl(NULL, NULL, NULL);
+    ok(hr == E_INVALIDARG, "Expected AtlAxAttachControl to return E_INVALIDARG, got 0x%08x\n", hr);
+
+    container = (IUnknown *)0xdeadbeef;
+    hr = AtlAxAttachControl(NULL, NULL, &container);
+    ok(hr == E_INVALIDARG, "Expected AtlAxAttachControl to return E_INVALIDARG, got 0x%08x\n", hr);
+    ok(container == (IUnknown *)0xdeadbeef,
+       "Expected the output container pointer to be untouched, got %p\n", container);
+
+    hwnd = create_container_window();
+    hr = AtlAxAttachControl(NULL, hwnd, NULL);
+    ok(hr == E_INVALIDARG, "Expected AtlAxAttachControl to return E_INVALIDARG, got 0x%08x\n", hr);
+    DestroyWindow(hwnd);
+
+    hwnd = create_container_window();
+    container = (IUnknown *)0xdeadbeef;
+    hr = AtlAxAttachControl(NULL, hwnd, &container);
+    ok(hr == E_INVALIDARG, "Expected AtlAxAttachControl to return E_INVALIDARG, got 0x%08x\n", hr);
+    ok(container == (IUnknown *)0xdeadbeef, "returned %p\n", container);
+    DestroyWindow(hwnd);
+
+    hr = CoCreateInstance(&CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
+                          &IID_IOleObject, (void **)&control);
+    ok(hr == S_OK, "Expected CoCreateInstance to return S_OK, got 0x%08x\n", hr);
+
+    if (FAILED(hr))
+    {
+        skip("Couldn't obtain a test IOleObject instance\n");
+        return;
+    }
+
+    hr = AtlAxAttachControl(control, NULL, NULL);
+    ok(hr == S_FALSE, "Expected AtlAxAttachControl to return S_FALSE, got 0x%08x\n", hr);
+
+    container = NULL;
+    hr = AtlAxAttachControl(control, NULL, &container);
+    ok(hr == S_FALSE, "Expected AtlAxAttachControl to return S_FALSE, got 0x%08x\n", hr);
+    ok(container != NULL, "got %p\n", container);
+    IUnknown_Release(container);
+
+    hwnd = create_container_window();
+    SetWindowLongW(hwnd, GWLP_USERDATA, 0xdeadbeef);
+    hr = AtlAxAttachControl(control, hwnd, NULL);
+    ok(hr == S_OK, "Expected AtlAxAttachControl to return S_OK, got 0x%08x\n", hr);
+    val = GetWindowLongW(hwnd, GWLP_USERDATA);
+    ok(val == 0xdeadbeef, "returned %08x\n", val);
+    DestroyWindow(hwnd);
+
+    hwnd = create_container_window();
+    SetWindowLongW(hwnd, GWLP_USERDATA, 0xdeadbeef);
+    container = NULL;
+    hr = AtlAxAttachControl(control, hwnd, &container);
+    ok(hr == S_OK, "Expected AtlAxAttachControl to return S_OK, got 0x%08x\n", hr);
+    ok(container != NULL, "Expected not NULL!\n");
+    val = GetWindowLongW(hwnd, GWLP_USERDATA);
+    todo_wine ok(val == 0xdeadbeef, "Expected unchanged, returned %08x\n", val);
+    DestroyWindow(hwnd);
+
+    IUnknown_Release(control);
+}
+
 START_TEST(atl)
 {
+    if (!register_class())
+        return;
+
     CoInitialize(NULL);
 
     test_winmodule();
@@ -767,6 +864,7 @@ START_TEST(atl)
     test_cp();
     test_source_iface();
     test_ax_win();
+    test_AtlAxAttachControl();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list