| /* | |
| * 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); | |
| } |