From a0e7b3b93acf851b8de56a1d00c115ef8cd6f2c7 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 30 Aug 2010 01:32:37 +0400 Subject: [PATCH] msxml3/tests: Tests for IXMLDOMText::splitText(), stub is extended a bit. --- dlls/msxml3/tests/domdoc.c | 42 +++++++++++++++++++++++++++++++++++++- dlls/msxml3/text.c | 17 +++++++++++++-- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 70faa87dfc8..5dd0ec67c5c 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -5614,7 +5614,7 @@ static void test_splitText(void) IXMLDOMCDATASection *cdata; IXMLDOMElement *root; IXMLDOMDocument *doc; - IXMLDOMText *text; + IXMLDOMText *text, *text2; IXMLDOMNode *node; VARIANT var; VARIANT_BOOL success; @@ -5684,6 +5684,46 @@ static void test_splitText(void) ok(hr == S_OK, "got 0x%08x\n", hr); IXMLDOMNode_Release(node); + /* split new text node */ + hr = IXMLDOMText_get_length(text, &length); + ok(hr == S_OK, "got 0x%08x\n", hr); + + node = (void*)0xdeadbeef; + hr = IXMLDOMText_get_nextSibling(text, &node); + ok(hr == S_FALSE, "got 0x%08x\n", hr); + ok(node == 0, "got %p\n", text); + + hr = IXMLDOMText_splitText(text, 0, NULL); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + + text2 = (void*)0xdeadbeef; + /* negative offset */ + hr = IXMLDOMText_splitText(text, -1, &text2); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + ok(text2 == (void*)0xdeadbeef, "got %p\n", text2); + + text2 = (void*)0xdeadbeef; + /* offset outside data */ + hr = IXMLDOMText_splitText(text, length + 1, &text2); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + ok(text2 == 0, "got %p\n", text2); + + text2 = (void*)0xdeadbeef; + /* offset outside data */ + hr = IXMLDOMText_splitText(text, length, &text2); + ok(hr == S_FALSE, "got 0x%08x\n", hr); + ok(text2 == 0, "got %p\n", text); + + text2 = 0; + hr = IXMLDOMText_splitText(text, 4, &text2); + todo_wine ok(hr == S_OK, "got 0x%08x\n", hr); + if (text2) IXMLDOMText_Release(text2); + + node = 0; + hr = IXMLDOMText_get_nextSibling(text, &node); + todo_wine ok(hr == S_OK, "got 0x%08x\n", hr); + if (node) IXMLDOMNode_Release(node); + IXMLDOMText_Release(text); IXMLDOMElement_Release(root); IXMLDOMCDATASection_Release(cdata); diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c index a8afd87b430..a087076900f 100644 --- a/dlls/msxml3/text.c +++ b/dlls/msxml3/text.c @@ -726,11 +726,24 @@ static HRESULT WINAPI domtext_splitText( LONG offset, IXMLDOMText **txtNode) { domtext *This = impl_from_IXMLDOMText( iface ); - FIXME("(%p)->(%d %p)\n", This, offset, txtNode); + LONG length = 0; + + TRACE("(%p)->(%d %p)\n", This, offset, txtNode); + + if (!txtNode || offset < 0) return E_INVALIDARG; + + *txtNode = NULL; + + IXMLDOMText_get_length(iface, &length); + + if (offset > length) return E_INVALIDARG; + if (offset == length) return S_FALSE; + + FIXME("adjacent text nodes are not supported\n"); + return E_NOTIMPL; } - static const struct IXMLDOMTextVtbl domtext_vtbl = { domtext_QueryInterface,