Aric Stewart : msctf/tests: Test ITfThreadMgr::AssociateFocus.

Alexandre Julliard julliard at winehq.org
Wed Sep 2 09:30:25 CDT 2009


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

Author: Aric Stewart <aric at codeweavers.com>
Date:   Tue Sep  1 07:08:11 2009 -0500

msctf/tests: Test ITfThreadMgr::AssociateFocus.

---

 dlls/msctf/tests/inputprocessor.c |  141 ++++++++++++++++++++++++++++++++++++-
 1 files changed, 139 insertions(+), 2 deletions(-)

diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c
index 6e8bbdc..1770cac 100644
--- a/dlls/msctf/tests/inputprocessor.c
+++ b/dlls/msctf/tests/inputprocessor.c
@@ -43,6 +43,7 @@ static ITextStoreACPSink *ACPSink;
 #define SINK_UNEXPECTED 0
 #define SINK_EXPECTED 1
 #define SINK_FIRED 2
+#define SINK_IGNORE 3
 
 static BOOL test_ShouldActivate = FALSE;
 static BOOL test_ShouldDeactivate = FALSE;
@@ -150,8 +151,11 @@ static HRESULT WINAPI TextStoreACP_RequestLock(ITextStoreACP *iface,
 static HRESULT WINAPI TextStoreACP_GetStatus(ITextStoreACP *iface,
     TS_STATUS *pdcs)
 {
-    ok(test_ACP_GetStatus  == SINK_EXPECTED, "Unexpected TextStoreACP_GetStatus\n");
-    test_ACP_GetStatus = SINK_FIRED;
+    ok(test_ACP_GetStatus  == SINK_EXPECTED || test_ACP_GetStatus == SINK_IGNORE, "Unexpected TextStoreACP_GetStatus\n");
+    if (test_ACP_GetStatus  == SINK_EXPECTED)
+        test_ACP_GetStatus = SINK_FIRED;
+    else if (test_ACP_GetStatus == SINK_IGNORE)
+        trace("Ignoring fired TextStoreACP_GetStatus\n");
     pdcs->dwDynamicFlags = documentStatus;
     return S_OK;
 }
@@ -1855,6 +1859,138 @@ static void test_Compartments(void)
     ITfDocumentMgr_Release(dm);
 }
 
+static void processPendingMessages(void)
+{
+    MSG msg;
+    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
+        TranslateMessage(&msg);
+        DispatchMessage(&msg);
+    }
+}
+
+static void test_AssociateFocus(void)
+{
+    ITfDocumentMgr *dm1, *dm2, *olddm, *dmcheck, *dmorig;
+    HWND wnd1, wnd2, wnd3;
+    HRESULT hr;
+
+    ITfThreadMgr_GetFocus(g_tm, &dmorig);
+    test_CurrentFocus = NULL;
+    test_PrevFocus = dmorig;
+    test_OnSetFocus  = SINK_EXPECTED;
+    hr = ITfThreadMgr_SetFocus(g_tm,NULL);
+    ok(test_OnSetFocus == SINK_FIRED,"OnSetFocus not fired as expected\n");
+    ITfDocumentMgr_Release(dmorig);
+
+    hr = ITfThreadMgr_CreateDocumentMgr(g_tm,&dm1);
+    ok(SUCCEEDED(hr),"CreateDocumentMgr failed\n");
+
+    hr = ITfThreadMgr_CreateDocumentMgr(g_tm,&dm2);
+    ok(SUCCEEDED(hr),"CreateDocumentMgr failed\n");
+
+    wnd1 = CreateWindow("edit",NULL,WS_POPUP|WS_VISIBLE,0,0,200,60,NULL,NULL,NULL,NULL);
+    ok(wnd1!=NULL,"Unable to create window 1\n");
+    wnd2 = CreateWindow("edit",NULL,WS_POPUP|WS_VISIBLE,0,0,200,60,NULL,NULL,NULL,NULL);
+    ok(wnd2!=NULL,"Unable to create window 2\n");
+    wnd3 = CreateWindow("edit",NULL,WS_POPUP|WS_VISIBLE,0,0,200,60,NULL,NULL,NULL,NULL);
+    ok(wnd3!=NULL,"Unable to create window 3\n");
+
+    processPendingMessages();
+
+    SetFocus(wnd1);
+    processPendingMessages();
+    test_CurrentFocus = dm1;
+    test_PrevFocus = NULL;
+    test_OnSetFocus  = SINK_EXPECTED;
+    hr = ITfThreadMgr_AssociateFocus(g_tm,wnd1,dm1,&olddm);
+    ok(SUCCEEDED(hr),"AssociateFocus failed\n");
+    ok(test_OnSetFocus == SINK_FIRED,"OnSetFocus not fired as expected\n");
+    ok(olddm == NULL, "unexpected old DocumentMgr\n");
+
+    processPendingMessages();
+
+    ITfThreadMgr_GetFocus(g_tm, &dmcheck);
+    ok(dmcheck == dm1, "Expected DocumentMgr not focused\n");
+    ITfDocumentMgr_Release(dmcheck);
+
+    hr = ITfThreadMgr_AssociateFocus(g_tm,wnd2,dm2,&olddm);
+    ok(SUCCEEDED(hr),"AssociateFocus failed\n");
+    processPendingMessages();
+    ITfThreadMgr_GetFocus(g_tm, &dmcheck);
+    ok(dmcheck == dm1, "Expected DocumentMgr not focused\n");
+    ITfDocumentMgr_Release(dmcheck);
+
+    hr = ITfThreadMgr_AssociateFocus(g_tm,wnd3,dm2,&olddm);
+    ok(SUCCEEDED(hr),"AssociateFocus failed\n");
+    processPendingMessages();
+    ITfThreadMgr_GetFocus(g_tm, &dmcheck);
+    ok(dmcheck == dm1, "Expected DocumentMgr not focused\n");
+    ITfDocumentMgr_Release(dmcheck);
+
+    test_CurrentFocus = dm2;
+    test_PrevFocus = dm1;
+    test_OnSetFocus  = SINK_EXPECTED;
+    SetFocus(wnd2);
+    processPendingMessages();
+    ok(test_OnSetFocus == SINK_FIRED,"OnSetFocus not fired as expected\n");
+
+    SetFocus(wnd3);
+    processPendingMessages();
+
+    test_CurrentFocus = dm1;
+    test_PrevFocus = dm2;
+    test_OnSetFocus = SINK_EXPECTED;
+    SetFocus(wnd1);
+    processPendingMessages();
+    ok(test_OnSetFocus == SINK_FIRED,"OnSetFocus not fired as expected\n");
+
+    hr = ITfThreadMgr_AssociateFocus(g_tm,wnd3,NULL,&olddm);
+    ok(SUCCEEDED(hr),"AssociateFocus failed\n");
+    ok(olddm == dm2, "incorrect old DocumentMgr returned\n");
+    ITfDocumentMgr_Release(olddm);
+
+    test_CurrentFocus = dmorig;
+    test_PrevFocus = dm1;
+    test_OnSetFocus  = SINK_EXPECTED;
+    test_ACP_GetStatus = SINK_EXPECTED;
+    ITfThreadMgr_SetFocus(g_tm,dmorig);
+    ok(test_OnSetFocus == SINK_FIRED,"OnSetFocus not fired as expected\n");
+
+    test_CurrentFocus = NULL;
+    test_PrevFocus = dmorig;
+    test_OnSetFocus  = SINK_EXPECTED;
+    SetFocus(wnd3);
+    processPendingMessages();
+    ok(test_OnSetFocus == SINK_FIRED,"OnSetFocus not fired as expected\n");
+
+    hr = ITfThreadMgr_AssociateFocus(g_tm,wnd2,NULL,&olddm);
+    ok(SUCCEEDED(hr),"AssociateFocus failed\n");
+    ok(olddm == dm2, "incorrect old DocumentMgr returned\n");
+    ITfDocumentMgr_Release(olddm);
+    hr = ITfThreadMgr_AssociateFocus(g_tm,wnd1,NULL,&olddm);
+    ok(SUCCEEDED(hr),"AssociateFocus failed\n");
+    ok(olddm == dm1, "incorrect old DocumentMgr returned\n");
+    ITfDocumentMgr_Release(olddm);
+
+    SetFocus(wnd2);
+    processPendingMessages();
+    SetFocus(wnd1);
+    processPendingMessages();
+
+    ITfDocumentMgr_Release(dm1);
+    ITfDocumentMgr_Release(dm2);
+    DestroyWindow(wnd1);
+    DestroyWindow(wnd2);
+    DestroyWindow(wnd3);
+
+    test_CurrentFocus = dmorig;
+    test_PrevFocus = NULL;
+    test_OnSetFocus  = SINK_EXPECTED;
+    test_ACP_GetStatus = SINK_IGNORE;
+    ITfThreadMgr_SetFocus(g_tm,dmorig);
+    ok(test_OnSetFocus == SINK_FIRED,"OnSetFocus not fired as expected\n");
+}
+
 START_TEST(inputprocessor)
 {
     if (SUCCEEDED(initialize()))
@@ -1871,6 +2007,7 @@ START_TEST(inputprocessor)
         test_KeystrokeMgr();
         test_TStoApplicationText();
         test_Compartments();
+        test_AssociateFocus();
         test_endSession();
         test_EnumLanguageProfiles();
         test_FindClosestCategory();




More information about the wine-cvs mailing list