-- v2: msxml3: Add tests of ValidateOnParse property. msxml3: Set ValidateOnParse to VARIANT_TRUE by default. msxml3: Add ValidateOnParse support for IXMLDOMDocument3_{get,set}Property().
From: Jactry Zeng jzeng@codeweavers.com
--- dlls/msxml3/domdoc.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index f0420a517ea..f31ae24d2af 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -68,6 +68,7 @@ static const WCHAR PropertyResolveExternalsW[] = {'R','e','s','o','l','v','e','E static const WCHAR PropertyAllowXsltScriptW[] = {'A','l','l','o','w','X','s','l','t','S','c','r','i','p','t',0}; static const WCHAR PropertyAllowDocumentFunctionW[] = {'A','l','l','o','w','D','o','c','u','m','e','n','t','F','u','n','c','t','i','o','n',0}; static const WCHAR PropertyNormalizeAttributeValuesW[] = {'N','o','r','m','a','l','i','z','e','A','t','t','r','i','b','u','t','e','V','a','l','u','e','s',0}; +static const WCHAR PropertyValidateOnParse[] = L"ValidateOnParse";
/* Anything that passes the test_get_ownerDocument() * tests can go here (data shared between all instances). @@ -3187,6 +3188,13 @@ static HRESULT WINAPI domdoc_setProperty( VariantClear(&varStr); return hr; } + else if (lstrcmpiW(p, PropertyValidateOnParse) == 0) + { + VARIANT_BOOL var; + + var = V_BOOL(&value); + return IXMLDOMDocument3_put_validateOnParse(iface, var); + } else if (lstrcmpiW(p, PropertyProhibitDTDW) == 0 || lstrcmpiW(p, PropertyNewParserW) == 0 || lstrcmpiW(p, PropertyResolveExternalsW) == 0 || @@ -3209,6 +3217,7 @@ static HRESULT WINAPI domdoc_getProperty( VARIANT* var) { domdoc *This = impl_from_IXMLDOMDocument3( iface ); + HRESULT hr;
TRACE("(%p)->(%s)\n", This, debugstr_w(p));
@@ -3258,6 +3267,18 @@ static HRESULT WINAPI domdoc_getProperty( heap_free(rebuiltStr); return S_OK; } + else if (lstrcmpiW(p, PropertyValidateOnParse) == 0) + { + VARIANT_BOOL value; + + hr = IXMLDOMDocument3_get_validateOnParse(iface, &value); + if (SUCCEEDED(hr)) + { + V_VT(var) = VT_BOOL; + V_BOOL(var) = value; + } + return hr; + }
FIXME("Unknown property %s\n", debugstr_w(p)); return E_FAIL;
From: Jactry Zeng jzeng@codeweavers.com
--- dlls/msxml3/domdoc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index f31ae24d2af..a5c69f5d38b 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -3761,7 +3761,7 @@ HRESULT get_domdoc_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument3 **document) doc->IConnectionPointContainer_iface.lpVtbl = &ConnectionPointContainerVtbl; doc->ref = 1; doc->async = VARIANT_TRUE; - doc->validating = 0; + doc->validating = VARIANT_TRUE; doc->resolving = 0; doc->properties = properties_add_ref(properties_from_xmlDocPtr(xmldoc)); doc->error = S_OK;
From: Jactry Zeng jzeng@codeweavers.com
--- dlls/msxml3/tests/domdoc.c | 67 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+)
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index cf9fb62a65e..9e82d5dce65 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -13947,6 +13947,72 @@ static void test_load_with_site(void) free_bstrs(); }
+static void test_validate_on_parse_values(void) +{ + IXMLDOMDocument2 *doc; + VARIANT_BOOL b; + VARIANT var; + HRESULT hr; + + if (!is_clsid_supported(&CLSID_DOMDocument60, &IID_IXMLDOMDocument2)) + { + win_skip("ValidateOnParse is not supported.\n"); + return; + } + + doc = create_document_version(60, &IID_IXMLDOMDocument2); + + V_VT(&var) = VT_I2; + V_I2(&var) = 0; + hr = IXMLDOMDocument2_getProperty(doc, _bstr_("ValidateOnParse"), &var); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(V_VT(&var) == VT_BOOL, "Got property value type %d.\n", V_VT(&var)); + ok(V_BOOL(&var) == VARIANT_TRUE, "Got property value %d.\n", V_BOOL(&var)); + b = VARIANT_FALSE; + hr = IXMLDOMDocument2_get_validateOnParse(doc, &b); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(b == VARIANT_TRUE, "Got property value %d.\n", b); + + V_VT(&var) = VT_I2; + V_I2(&var) = 0; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_("ValidateOnParse"), var); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + V_VT(&var) = VT_I2; + V_I2(&var) = 10; + hr = IXMLDOMDocument2_getProperty(doc, _bstr_("ValidateOnParse"), &var); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(V_VT(&var) == VT_BOOL, "Got property value type %d.\n", V_VT(&var)); + ok(V_BOOL(&var) == VARIANT_FALSE, "Got property value %d.\n", V_BOOL(&var)); + + V_VT(&var) = VT_BOOL; + V_BOOL(&var) = VARIANT_TRUE; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_("ValidateOnParse"), var); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + b = VARIANT_FALSE; + hr = IXMLDOMDocument2_get_validateOnParse(doc, &b); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(b == VARIANT_TRUE, "Got property value %d.\n", b); + + V_VT(&var) = VT_I2; + V_I2(&var) = 0; + hr = IXMLDOMDocument2_getProperty(doc, _bstr_("ValidateOnParse"), &var); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(V_VT(&var) == VT_BOOL, "Got property value type %d.\n", V_VT(&var)); + ok(V_BOOL(&var) == VARIANT_TRUE, "Got property value %d.\n", V_BOOL(&var)); + + b = VARIANT_FALSE; + hr = IXMLDOMDocument2_put_validateOnParse(doc, b); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + V_VT(&var) = VT_I2; + V_I2(&var) = 10; + hr = IXMLDOMDocument2_getProperty(doc, _bstr_("ValidateOnParse"), &var); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(V_VT(&var) == VT_BOOL, "Got property value type %d.\n", V_VT(&var)); + ok(V_BOOL(&var) == VARIANT_FALSE, "Got property value %d.\n", V_BOOL(&var)); + + IXMLDOMDocument2_Release(doc); +} + START_TEST(domdoc) { HRESULT hr; @@ -14033,6 +14099,7 @@ START_TEST(domdoc) test_transformNodeToObject(); test_normalize_attribute_values(); test_namespaces_as_attributes(); + test_validate_on_parse_values();
test_xsltemplate(); test_xsltext();
Nikolay Sivov (@nsivov) commented about dlls/msxml3/tests/domdoc.c:
test_transformNodeToObject(); test_normalize_attribute_values(); test_namespaces_as_attributes();
- test_validate_on_parse_values();
This needs to test all existing classes versions.
Nikolay Sivov (@nsivov) commented about dlls/msxml3/domdoc.c:
VariantClear(&varStr); return hr; }
- else if (lstrcmpiW(p, PropertyValidateOnParse) == 0)
- {
VARIANT_BOOL var;
var = V_BOOL(&value);
return IXMLDOMDocument3_put_validateOnParse(iface, var);
- }
It's better to return value directly here, without calling its own method. Also, shouldn't it be a part of properties structure?