| /* |
| * Tests for IRichEditOle and friends. |
| * |
| * Copyright 2008 Google (Dan Hipschman) |
| * |
| * 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 <stdarg.h> |
| #include <assert.h> |
| #include <windef.h> |
| #include <winbase.h> |
| #include <wingdi.h> |
| #include <winuser.h> |
| #include <initguid.h> |
| #include <ole2.h> |
| #include <richedit.h> |
| #include <richole.h> |
| #include <tom.h> |
| #include <wine/test.h> |
| |
| static HMODULE hmoduleRichEdit; |
| |
| static HWND new_window(LPCTSTR lpClassName, DWORD dwStyle, HWND parent) |
| { |
| HWND hwnd |
| = CreateWindow(lpClassName, NULL, |
| dwStyle | WS_POPUP | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE, |
| 0, 0, 200, 60, parent, NULL, hmoduleRichEdit, NULL); |
| ok(hwnd != NULL, "class: %s, error: %d\n", lpClassName, (int) GetLastError()); |
| return hwnd; |
| } |
| |
| static HWND new_richedit(HWND parent) |
| { |
| return new_window(RICHEDIT_CLASS, ES_MULTILINE, parent); |
| } |
| |
| |
| START_TEST(richole) |
| { |
| IRichEditOle *reOle = NULL; |
| ITextDocument *txtDoc = NULL; |
| ITextSelection *txtSel = NULL; |
| IUnknown *punk; |
| HRESULT hres; |
| LRESULT res; |
| HWND w; |
| |
| /* Must explicitly LoadLibrary(). The test has no references to functions in |
| * RICHED20.DLL, so the linker doesn't actually link to it. */ |
| hmoduleRichEdit = LoadLibrary("RICHED20.DLL"); |
| ok(hmoduleRichEdit != NULL, "error: %d\n", (int) GetLastError()); |
| |
| w = new_richedit(NULL); |
| if (!w) { |
| skip("Couldn't create window\n"); |
| return; |
| } |
| |
| res = SendMessage(w, EM_GETOLEINTERFACE, 0, (LPARAM) &reOle); |
| ok(res, "SendMessage\n"); |
| ok(reOle != NULL, "EM_GETOLEINTERFACE\n"); |
| |
| hres = IUnknown_QueryInterface(reOle, &IID_ITextDocument, |
| (void **) &txtDoc); |
| ok(hres == S_OK, "IRichEditOle_QueryInterface\n"); |
| ok(txtDoc != NULL, "IRichEditOle_QueryInterface\n"); |
| |
| hres = ITextDocument_GetSelection(txtDoc, &txtSel); |
| ok(hres == S_OK, "ITextDocument_GetSelection\n"); |
| ok(txtSel != NULL, "ITextDocument_GetSelection\n"); |
| |
| punk = NULL; |
| hres = ITextSelection_QueryInterface(txtSel, &IID_ITextSelection, (void **) &punk); |
| ok(hres == S_OK, "ITextSelection_QueryInterface\n"); |
| ok(punk != NULL, "ITextSelection_QueryInterface\n"); |
| IUnknown_Release(punk); |
| |
| punk = NULL; |
| hres = ITextSelection_QueryInterface(txtSel, &IID_ITextRange, (void **) &punk); |
| ok(hres == S_OK, "ITextSelection_QueryInterface\n"); |
| ok(punk != NULL, "ITextSelection_QueryInterface\n"); |
| IUnknown_Release(punk); |
| |
| punk = NULL; |
| hres = ITextSelection_QueryInterface(txtSel, &IID_IDispatch, (void **) &punk); |
| ok(hres == S_OK, "ITextSelection_QueryInterface\n"); |
| ok(punk != NULL, "ITextSelection_QueryInterface\n"); |
| IUnknown_Release(punk); |
| |
| ITextDocument_Release(txtDoc); |
| IUnknown_Release(reOle); |
| DestroyWindow(w); |
| |
| /* Methods should return CO_E_RELEASED if the backing document has |
| been released. One test should suffice. */ |
| hres = ITextSelection_CanEdit(txtSel, NULL); |
| ok(hres == CO_E_RELEASED, "ITextSelection after ITextDocument destroyed\n"); |
| |
| ITextSelection_Release(txtSel); |
| } |