msxml3: Accept VT_UNKNOWN input for IXMLDOMSchemaCollection::add().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2016-03-14 10:11:02 +03:00 committed by Alexandre Julliard
parent aaac0db600
commit d241788d28
2 changed files with 24 additions and 5 deletions

View File

@ -1226,12 +1226,13 @@ static HRESULT WINAPI schema_cache_add(IXMLDOMSchemaCollection2* iface, BSTR uri
break;
case VT_DISPATCH:
case VT_UNKNOWN:
{
xmlDocPtr doc = NULL;
cache_entry* entry;
CacheEntryType type;
IXMLDOMNode* domnode = NULL;
IDispatch_QueryInterface(V_DISPATCH(&var), &IID_IXMLDOMNode, (void**)&domnode);
IUnknown_QueryInterface(V_UNKNOWN(&var), &IID_IXMLDOMNode, (void**)&domnode);
if (domnode)
doc = xmlNodePtr_from_domnode(domnode, XML_DOCUMENT_NODE)->doc;
@ -1275,10 +1276,9 @@ static HRESULT WINAPI schema_cache_add(IXMLDOMSchemaCollection2* iface, BSTR uri
break;
default:
{
heap_free(name);
return E_INVALIDARG;
}
FIXME("arg type is not supported, %s\n", debugstr_variant(&var));
heap_free(name);
return E_INVALIDARG;
}
heap_free(name);
return S_OK;

View File

@ -506,6 +506,7 @@ static void test_schema_refs(void)
VARIANT_BOOL b;
BSTR str;
LONG len;
HRESULT hr;
doc = create_document(&IID_IXMLDOMDocument2);
if (!doc)
@ -557,6 +558,24 @@ static void test_schema_refs(void)
ole_check(IXMLDOMSchemaCollection_get_length(cache, &len));
ok(len == 0, "got %d\n", len);
/* same, but with VT_UNKNOWN type */
V_VT(&v) = VT_UNKNOWN;
V_UNKNOWN(&v) = (IUnknown*)doc;
hr = IXMLDOMSchemaCollection_add(cache, NULL, v);
ok(hr == S_OK, "got 0x%08x\n", hr);
len = -1;
hr = IXMLDOMSchemaCollection_get_length(cache, &len);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(len == 1, "got %d\n", len);
hr = IXMLDOMSchemaCollection_remove(cache, NULL);
ok(hr == S_OK, "got 0x%08x\n", hr);
len = -1;
hr = IXMLDOMSchemaCollection_get_length(cache, &len);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(len == 0, "got %d\n", len);
str = SysAllocString(xdr_schema_uri);
ole_check(IXMLDOMSchemaCollection_add(cache, str, _variantdoc_(doc)));