[PATCH 5/8] Tests for IXMLDOMText::splitText(), stub is extended a bit

Nikolay Sivov nsivov at codeweavers.com
Sun Aug 29 16:32:37 CDT 2010


---
 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 70faa87..5dd0ec6 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 a8afd87..a087076 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,
-- 
1.5.6.5



--------------020308070806020400030903--



More information about the wine-patches mailing list