msxml3: Basic put_input() method for IXSLProcessor.
This commit is contained in:
parent
7a3226be46
commit
392934af90
|
@ -49,6 +49,8 @@ typedef struct _xslprocessor
|
|||
{
|
||||
IXSLProcessor IXSLProcessor_iface;
|
||||
LONG ref;
|
||||
|
||||
IXMLDOMNode *input;
|
||||
} xslprocessor;
|
||||
|
||||
static HRESULT XSLProcessor_create(IXSLProcessor**);
|
||||
|
@ -302,7 +304,10 @@ static ULONG WINAPI xslprocessor_Release( IXSLProcessor *iface )
|
|||
|
||||
ref = InterlockedDecrement( &This->ref );
|
||||
if ( ref == 0 )
|
||||
{
|
||||
if (This->input) IXMLDOMNode_Release(This->input);
|
||||
heap_free( This );
|
||||
}
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
@ -381,9 +386,39 @@ static HRESULT WINAPI xslprocessor_Invoke(
|
|||
static HRESULT WINAPI xslprocessor_put_input( IXSLProcessor *iface, VARIANT input )
|
||||
{
|
||||
xslprocessor *This = impl_from_IXSLProcessor( iface );
|
||||
IXMLDOMNode *input_node;
|
||||
HRESULT hr;
|
||||
|
||||
FIXME("(%p): stub\n", This);
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_variant(&input));
|
||||
|
||||
/* try IXMLDOMNode directly first */
|
||||
if (V_VT(&input) == VT_UNKNOWN)
|
||||
hr = IUnknown_QueryInterface(V_UNKNOWN(&input), &IID_IXMLDOMNode, (void**)&input_node);
|
||||
else if (V_VT(&input) == VT_DISPATCH)
|
||||
hr = IDispatch_QueryInterface(V_DISPATCH(&input), &IID_IXMLDOMNode, (void**)&input_node);
|
||||
else
|
||||
{
|
||||
IXMLDOMDocument *doc;
|
||||
|
||||
hr = DOMDocument_create(&CLSID_DOMDocument, NULL, (void**)&doc);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
VARIANT_BOOL b;
|
||||
|
||||
hr = IXMLDOMDocument_load(doc, input, &b);
|
||||
if (hr == S_OK)
|
||||
hr = IXMLDOMDocument_QueryInterface(doc, &IID_IXMLDOMNode, (void**)&input_node);
|
||||
IXMLDOMDocument_Release(doc);
|
||||
}
|
||||
}
|
||||
|
||||
if (hr == S_OK)
|
||||
{
|
||||
if (This->input) IXMLDOMNode_Release(This->input);
|
||||
This->input = input_node;
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI xslprocessor_get_input( IXSLProcessor *iface, VARIANT *input )
|
||||
|
@ -554,6 +589,7 @@ HRESULT XSLProcessor_create(IXSLProcessor **ppObj)
|
|||
|
||||
This->IXSLProcessor_iface.lpVtbl = &xslprocessor_vtbl;
|
||||
This->ref = 1;
|
||||
This->input = NULL;
|
||||
|
||||
*ppObj = &This->IXSLProcessor_iface;
|
||||
|
||||
|
|
|
@ -7666,6 +7666,7 @@ static void test_xsltemplate(void)
|
|||
VARIANT_BOOL b;
|
||||
HRESULT hr;
|
||||
ULONG ref1, ref2;
|
||||
VARIANT v;
|
||||
|
||||
template = create_xsltemplate(&IID_IXSLTemplate);
|
||||
if (!template) return;
|
||||
|
@ -7724,6 +7725,15 @@ static void test_xsltemplate(void)
|
|||
|
||||
hr = IXSLTemplate_createProcessor(template, &processor);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
|
||||
/* input no set yet */
|
||||
V_VT(&v) = VT_BSTR;
|
||||
V_BSTR(&v) = NULL;
|
||||
hr = IXSLProcessor_get_input(processor, &v);
|
||||
todo_wine {
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
ok(V_VT(&v) == VT_EMPTY, "got %d\n", V_VT(&v));
|
||||
}
|
||||
IXSLProcessor_Release(processor);
|
||||
|
||||
/* drop reference */
|
||||
|
|
Loading…
Reference in New Issue