msxml3: Implement IXMLDOMCDATASection::splitText().
This commit is contained in:
parent
62e521ad0d
commit
92a574b44b
|
@ -725,10 +725,48 @@ static HRESULT WINAPI domcdata_splitText(
|
||||||
LONG offset, IXMLDOMText **txtNode)
|
LONG offset, IXMLDOMText **txtNode)
|
||||||
{
|
{
|
||||||
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
|
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
|
||||||
FIXME("(%p)->(%d %p)\n", This, offset, txtNode);
|
IXMLDOMDocument *doc;
|
||||||
return E_NOTIMPL;
|
LONG length = 0;
|
||||||
}
|
HRESULT hr;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%d %p)\n", This, offset, txtNode);
|
||||||
|
|
||||||
|
if (!txtNode || offset < 0) return E_INVALIDARG;
|
||||||
|
|
||||||
|
*txtNode = NULL;
|
||||||
|
|
||||||
|
IXMLDOMCDATASection_get_length(iface, &length);
|
||||||
|
|
||||||
|
if (offset > length) return E_INVALIDARG;
|
||||||
|
if (offset == length) return S_FALSE;
|
||||||
|
|
||||||
|
hr = IXMLDOMCDATASection_get_ownerDocument(iface, &doc);
|
||||||
|
if (hr == S_OK)
|
||||||
|
{
|
||||||
|
BSTR data;
|
||||||
|
|
||||||
|
hr = IXMLDOMCDATASection_substringData(iface, offset, length - offset, &data);
|
||||||
|
if (hr == S_OK)
|
||||||
|
{
|
||||||
|
hr = IXMLDOMDocument_createTextNode(doc, data, txtNode);
|
||||||
|
if (hr == S_OK)
|
||||||
|
{
|
||||||
|
IXMLDOMNode *parent;
|
||||||
|
|
||||||
|
hr = IXMLDOMCDATASection_get_parentNode(iface, &parent);
|
||||||
|
if (hr == S_OK)
|
||||||
|
{
|
||||||
|
IXMLDOMCDATASection_deleteData(iface, 0, offset);
|
||||||
|
hr = IXMLDOMNode_appendChild(parent, (IXMLDOMNode*)*txtNode, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SysFreeString(data);
|
||||||
|
}
|
||||||
|
IXMLDOMDocument_Release(doc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct IXMLDOMCDATASectionVtbl domcdata_vtbl =
|
static const struct IXMLDOMCDATASectionVtbl domcdata_vtbl =
|
||||||
{
|
{
|
||||||
|
|
|
@ -2414,8 +2414,8 @@ HRESULT DOMDocument_create(IUnknown *pUnkOuter, void **ppObj)
|
||||||
|
|
||||||
IUnknown* create_domdoc( xmlNodePtr document )
|
IUnknown* create_domdoc( xmlNodePtr document )
|
||||||
{
|
{
|
||||||
|
void* pObj = NULL;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
LPVOID pObj = NULL;
|
|
||||||
|
|
||||||
TRACE("(%p)\n", document);
|
TRACE("(%p)\n", document);
|
||||||
|
|
||||||
|
@ -2428,7 +2428,7 @@ IUnknown* create_domdoc( xmlNodePtr document )
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
HRESULT DOMDocument_create(IUnknown *pUnkOuter, LPVOID *ppObj)
|
HRESULT DOMDocument_create(IUnknown *pUnkOuter, void **ppObj)
|
||||||
{
|
{
|
||||||
MESSAGE("This program tried to use a DOMDocument object, but\n"
|
MESSAGE("This program tried to use a DOMDocument object, but\n"
|
||||||
"libxml2 support was not present at compile time.\n");
|
"libxml2 support was not present at compile time.\n");
|
||||||
|
|
|
@ -5609,6 +5609,87 @@ static void test_XSLPattern(void)
|
||||||
free_bstrs();
|
free_bstrs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_splitText(void)
|
||||||
|
{
|
||||||
|
IXMLDOMCDATASection *cdata;
|
||||||
|
IXMLDOMElement *root;
|
||||||
|
IXMLDOMDocument *doc;
|
||||||
|
IXMLDOMText *text;
|
||||||
|
IXMLDOMNode *node;
|
||||||
|
VARIANT var;
|
||||||
|
VARIANT_BOOL success;
|
||||||
|
LONG length;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = CoCreateInstance( &CLSID_DOMDocument, NULL,
|
||||||
|
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (void**)&doc );
|
||||||
|
ok( hr == S_OK, "got 0x%08x\n", hr );
|
||||||
|
if( hr != S_OK )
|
||||||
|
return;
|
||||||
|
|
||||||
|
hr = IXMLDOMDocument_loadXML(doc, _bstr_("<root></root>"), &success);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IXMLDOMDocument_get_documentElement(doc, &root);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IXMLDOMDocument_createCDATASection(doc, _bstr_("beautiful plumage"), &cdata);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
V_VT(&var) = VT_EMPTY;
|
||||||
|
hr = IXMLDOMElement_appendChild(root, (IXMLDOMNode*)cdata, NULL);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
length = 0;
|
||||||
|
hr = IXMLDOMCDATASection_get_length(cdata, &length);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(length > 0, "got %d\n", length);
|
||||||
|
|
||||||
|
hr = IXMLDOMCDATASection_splitText(cdata, 0, NULL);
|
||||||
|
ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
text = (void*)0xdeadbeef;
|
||||||
|
/* negative offset */
|
||||||
|
hr = IXMLDOMCDATASection_splitText(cdata, -1, &text);
|
||||||
|
ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
|
||||||
|
ok(text == (void*)0xdeadbeef, "got %p\n", text);
|
||||||
|
|
||||||
|
text = (void*)0xdeadbeef;
|
||||||
|
/* offset outside data */
|
||||||
|
hr = IXMLDOMCDATASection_splitText(cdata, length + 1, &text);
|
||||||
|
ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
|
||||||
|
ok(text == 0, "got %p\n", text);
|
||||||
|
|
||||||
|
text = (void*)0xdeadbeef;
|
||||||
|
/* offset outside data */
|
||||||
|
hr = IXMLDOMCDATASection_splitText(cdata, length, &text);
|
||||||
|
ok(hr == S_FALSE, "got 0x%08x\n", hr);
|
||||||
|
ok(text == 0, "got %p\n", text);
|
||||||
|
|
||||||
|
/* no empty node created */
|
||||||
|
node = (void*)0xdeadbeef;
|
||||||
|
hr = IXMLDOMCDATASection_get_nextSibling(cdata, &node);
|
||||||
|
ok(hr == S_FALSE, "got 0x%08x\n", hr);
|
||||||
|
ok(node == 0, "got %p\n", text);
|
||||||
|
|
||||||
|
hr = IXMLDOMCDATASection_splitText(cdata, 10, &text);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
length = 0;
|
||||||
|
hr = IXMLDOMText_get_length(text, &length);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
ok(length == 7, "got %d\n", length);
|
||||||
|
|
||||||
|
hr = IXMLDOMCDATASection_get_nextSibling(cdata, &node);
|
||||||
|
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||||
|
IXMLDOMNode_Release(node);
|
||||||
|
|
||||||
|
IXMLDOMText_Release(text);
|
||||||
|
IXMLDOMElement_Release(root);
|
||||||
|
IXMLDOMCDATASection_Release(cdata);
|
||||||
|
free_bstrs();
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(domdoc)
|
START_TEST(domdoc)
|
||||||
{
|
{
|
||||||
IXMLDOMDocument *doc;
|
IXMLDOMDocument *doc;
|
||||||
|
@ -5619,10 +5700,16 @@ START_TEST(domdoc)
|
||||||
if (r != S_OK)
|
if (r != S_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
test_XMLHTTP();
|
||||||
|
|
||||||
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
|
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
|
||||||
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
|
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (void**)&doc );
|
||||||
if (SUCCEEDED(r))
|
if (FAILED(r))
|
||||||
{
|
{
|
||||||
|
win_skip("IXMLDOMDocument is not available (0x%08x)\n", r);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
IXMLDOMDocument_Release(doc);
|
IXMLDOMDocument_Release(doc);
|
||||||
|
|
||||||
test_domdoc();
|
test_domdoc();
|
||||||
|
@ -5652,11 +5739,7 @@ START_TEST(domdoc)
|
||||||
test_TransformWithLoadingLocalFile();
|
test_TransformWithLoadingLocalFile();
|
||||||
test_put_nodeValue();
|
test_put_nodeValue();
|
||||||
test_document_IObjectSafety();
|
test_document_IObjectSafety();
|
||||||
}
|
test_splitText();
|
||||||
else
|
|
||||||
win_skip("IXMLDOMDocument is not available (0x%08x)\n", r);
|
|
||||||
|
|
||||||
test_XMLHTTP();
|
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue