From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/tests/domdoc.c | 102 ++++++++++++++++++++++++++++--------- dlls/msxml6/tests/domdoc.c | 90 ++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+), 25 deletions(-) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 3f825ba83eb..f2b393c0979 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -14123,38 +14123,90 @@ static void test_transformNodeToObject(void) static void test_max_element_depth_values(void) { - IXMLDOMDocument2 *doc; + static const CLSID *classes[] = { &CLSID_DOMDocument, &CLSID_DOMDocument2, &CLSID_DOMDocument30 }; + IXMLDOMParseError *parse_error; + IXMLDOMDocument2 *doc, *doc3; + IXMLDOMDocument *doc2; VARIANT var; HRESULT hr; + LONG code; - doc = create_document_version(60, &IID_IXMLDOMDocument2); + for (int i = 0; i < ARRAYSIZE(classes); ++i) + { + hr = CoCreateInstance(classes[i], NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument2, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - /* The default max element depth value should be 256. */ - V_VT(&var) = VT_UI4; - V_UI4(&var) = 0xdeadbeef; - hr = IXMLDOMDocument2_getProperty(doc, _bstr_("MaxElementDepth"), &var); -todo_wine { - ok(hr == S_OK, "Failed to get property value, hr %#lx.\n", hr); - ok(V_VT(&var) == VT_I4, "Unexpected property value type, vt %d.\n", V_VT(&var)); - ok(V_I4(&var) == 256, "Unexpected property value.\n"); -} + /* The default max element depth value should be 256. */ + V_VT(&var) = VT_UI4; + V_UI4(&var) = 0xdeadbeef; + hr = IXMLDOMDocument2_getProperty(doc, _bstr_("MaxElementDepth"), &var); + todo_wine { + ok(hr == S_OK, "Failed to get property value, hr %#lx.\n", hr); + ok(V_VT(&var) == VT_I4, "Unexpected property value type, vt %d.\n", V_VT(&var)); + ok(V_I4(&var) == 5000, "Unexpected property value %ld.\n", V_I4(&var)); + } + /* Changes to the depth value should be observable when subsequently retrieved. */ + V_VT(&var) = VT_I4; + V_I4(&var) = 32; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_("MaxElementDepth"), var); + ok(hr == S_OK, "Failed to set property, hr %#lx.\n", hr); + + V_VT(&var) = VT_UI4; + V_UI4(&var) = 0xdeadbeef; + hr = IXMLDOMDocument2_getProperty(doc, _bstr_("MaxElementDepth"), &var); + todo_wine { + ok(hr == S_OK, "Failed to get property value, hr %#lx.\n", hr); + ok(V_VT(&var) == VT_I4, "Unexpected property value type, vt %d.\n", V_VT(&var)); + ok(V_I4(&var) == 32, "Unexpected property value.\n"); + } + hr = IXMLDOMDocument2_cloneNode(doc, VARIANT_FALSE, (IXMLDOMNode **)&doc2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMDocument_QueryInterface(doc2, &IID_IXMLDOMDocument2, (void **)&doc3); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + V_VT(&var) = VT_UI4; + V_UI4(&var) = 0xdeadbeef; + hr = IXMLDOMDocument2_getProperty(doc3, _bstr_("MaxElementDepth"), &var); + todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(V_VT(&var) == VT_I4, "Unexpected property value type, vt %d.\n", V_VT(&var)); + ok(V_I4(&var) == 32, "Unexpected property value.\n"); + } + IXMLDOMDocument2_Release(doc3); + IXMLDOMDocument_Release(doc2); - /* Changes to the depth value should be observable when subsequently retrieved. */ - V_VT(&var) = VT_I4; - V_I4(&var) = 32; - hr = IXMLDOMDocument2_setProperty(doc, _bstr_("MaxElementDepth"), var); - ok(hr == S_OK, "Failed to set property, hr %#lx.\n", hr); + V_VT(&var) = VT_I4; + V_I4(&var) = -1; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_("MaxElementDepth"), var); + todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); - V_VT(&var) = VT_UI4; - V_UI4(&var) = 0xdeadbeef; - hr = IXMLDOMDocument2_getProperty(doc, _bstr_("MaxElementDepth"), &var); -todo_wine { - ok(hr == S_OK, "Failed to get property value, hr %#lx.\n", hr); - ok(V_VT(&var) == VT_I4, "Unexpected property value type, vt %d.\n", V_VT(&var)); - ok(V_I4(&var) == 32, "Unexpected property value.\n"); -} + V_VT(&var) = VT_UI4; + V_UI4(&var) = 2147483648; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_("MaxElementDepth"), var); + todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); - IXMLDOMDocument2_Release(doc); + V_VT(&var) = VT_I4; + V_I4(&var) = 1; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_("MaxElementDepth"), var); + hr = IXMLDOMDocument2_loadXML(doc, _bstr_("<a>text<!-- comment --></a>"), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_("<a>text<!-- comment --><b/></a>"), NULL); + todo_wine + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMDocument2_get_parseError(doc, &parse_error); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMParseError_get_errorCode(parse_error, &code); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(code == E_ABORT, "Unexpected error code %#lx.\n", code); + IXMLDOMParseError_Release(parse_error); + + IXMLDOMDocument2_Release(doc); + free_bstrs(); + } } typedef struct _namespace_as_attribute_t { diff --git a/dlls/msxml6/tests/domdoc.c b/dlls/msxml6/tests/domdoc.c index 8e9a327ddcc..80ad06fb8c5 100644 --- a/dlls/msxml6/tests/domdoc.c +++ b/dlls/msxml6/tests/domdoc.c @@ -647,6 +647,95 @@ todo_wine IXMLDOMDocument_Release(doc); } +static void test_max_element_depth_values(void) +{ + IXMLDOMParseError *parse_error; + IXMLDOMDocument2 *doc, *doc3; + IXMLDOMDocument *doc2; + VARIANT var; + HRESULT hr; + LONG code; + + hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, + &IID_IXMLDOMDocument2, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + /* The default max element depth value should be 256. */ + V_VT(&var) = VT_UI4; + V_UI4(&var) = 0xdeadbeef; + hr = IXMLDOMDocument2_getProperty(doc, _bstr_(L"MaxElementDepth"), &var); +todo_wine { + ok(hr == S_OK, "Failed to get property value, hr %#lx.\n", hr); + ok(V_VT(&var) == VT_I4, "Unexpected property value type, vt %d.\n", V_VT(&var)); + ok(V_I4(&var) == 256, "Unexpected property value.\n"); +} + + /* Changes to the depth value should be observable when subsequently retrieved. */ + V_VT(&var) = VT_I4; + V_I4(&var) = 32; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_(L"MaxElementDepth"), var); + ok(hr == S_OK, "Failed to set property, hr %#lx.\n", hr); + + V_VT(&var) = VT_UI4; + V_UI4(&var) = 0xdeadbeef; + hr = IXMLDOMDocument2_getProperty(doc, _bstr_(L"MaxElementDepth"), &var); +todo_wine { + ok(hr == S_OK, "Failed to get property value, hr %#lx.\n", hr); + ok(V_VT(&var) == VT_I4, "Unexpected property value type, vt %d.\n", V_VT(&var)); + ok(V_I4(&var) == 32, "Unexpected property value.\n"); +} + + hr = IXMLDOMDocument2_cloneNode(doc, VARIANT_FALSE, (IXMLDOMNode **)&doc2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMDocument_QueryInterface(doc2, &IID_IXMLDOMDocument2, (void **)&doc3); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + V_VT(&var) = VT_UI4; + V_UI4(&var) = 0xdeadbeef; + hr = IXMLDOMDocument2_getProperty(doc3, _bstr_(L"MaxElementDepth"), &var); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(V_VT(&var) == VT_I4, "Unexpected property value type, vt %d.\n", V_VT(&var)); + ok(V_I4(&var) == 32, "Unexpected property value.\n"); +} + IXMLDOMDocument2_Release(doc3); + IXMLDOMDocument_Release(doc2); + + V_VT(&var) = VT_I4; + V_I4(&var) = -1; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_(L"MaxElementDepth"), var); + todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + + V_VT(&var) = VT_UI4; + V_UI4(&var) = 2147483648; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_(L"MaxElementDepth"), var); + todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + + V_VT(&var) = VT_I4; + V_I4(&var) = 1; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_(L"MaxElementDepth"), var); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(L"<a>text<!-- comment --></a>"), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(L"<a>text<!-- comment --><b/></a>"), NULL); + todo_wine + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMDocument2_get_parseError(doc, &parse_error); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMParseError_get_errorCode(parse_error, &code); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(code == 0xc00ce586, "Unexpected error code %#lx.\n", code); + IXMLDOMParseError_Release(parse_error); + + IXMLDOMDocument2_Release(doc); + free_bstrs(); +} + START_TEST(domdoc) { HRESULT hr; @@ -671,6 +760,7 @@ START_TEST(domdoc) test_normalize_attribute_values(); test_prohibitdtd(); test_interfaces(); + test_max_element_depth_values(); CoUninitialize(); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10706