msxml: Implement setAttribute.
This commit is contained in:
parent
191f21c7d4
commit
65707fb940
|
@ -484,10 +484,39 @@ static HRESULT WINAPI domelem_getAttribute(
|
||||||
|
|
||||||
static HRESULT WINAPI domelem_setAttribute(
|
static HRESULT WINAPI domelem_setAttribute(
|
||||||
IXMLDOMElement *iface,
|
IXMLDOMElement *iface,
|
||||||
BSTR p, VARIANT var)
|
BSTR name, VARIANT value)
|
||||||
{
|
{
|
||||||
FIXME("\n");
|
domelem *This = impl_from_IXMLDOMElement( iface );
|
||||||
return E_NOTIMPL;
|
xmlNodePtr element;
|
||||||
|
xmlChar *xml_name, *xml_value;
|
||||||
|
HRESULT hr;
|
||||||
|
VARIANT var;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%s, var)\n", This, debugstr_w(name));
|
||||||
|
|
||||||
|
element = get_element( This );
|
||||||
|
if ( !element )
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
VariantInit(&var);
|
||||||
|
hr = VariantChangeType(&var, &value, 0, VT_BSTR);
|
||||||
|
if(hr != S_OK)
|
||||||
|
{
|
||||||
|
FIXME("VariantChangeType failed\n");
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
xml_name = xmlChar_from_wchar( name );
|
||||||
|
xml_value = xmlChar_from_wchar( V_BSTR(&var) );
|
||||||
|
|
||||||
|
if(!xmlSetNsProp(element, NULL, xml_name, xml_value))
|
||||||
|
hr = E_FAIL;
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, xml_value);
|
||||||
|
HeapFree(GetProcessHeap(), 0, xml_name);
|
||||||
|
VariantClear(&var);
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI domelem_removeAttribute(
|
static HRESULT WINAPI domelem_removeAttribute(
|
||||||
|
|
|
@ -72,6 +72,7 @@ static const WCHAR szdl[] = { 'd','l',0 };
|
||||||
static const WCHAR szlc[] = { 'l','c',0 };
|
static const WCHAR szlc[] = { 'l','c',0 };
|
||||||
static const WCHAR szbs[] = { 'b','s',0 };
|
static const WCHAR szbs[] = { 'b','s',0 };
|
||||||
static const WCHAR szstr1[] = { 's','t','r','1',0 };
|
static const WCHAR szstr1[] = { 's','t','r','1',0 };
|
||||||
|
static const WCHAR szstr2[] = { 's','t','r','2',0 };
|
||||||
|
|
||||||
void test_domdoc( void )
|
void test_domdoc( void )
|
||||||
{
|
{
|
||||||
|
@ -622,11 +623,13 @@ static void test_create(void)
|
||||||
{
|
{
|
||||||
HRESULT r;
|
HRESULT r;
|
||||||
VARIANT var;
|
VARIANT var;
|
||||||
BSTR str;
|
BSTR str, name;
|
||||||
IXMLDOMDocument *doc;
|
IXMLDOMDocument *doc;
|
||||||
|
IXMLDOMElement *element;
|
||||||
IXMLDOMNode *root, *node, *child;
|
IXMLDOMNode *root, *node, *child;
|
||||||
|
IXMLDOMNamedNodeMap *attr_map;
|
||||||
IUnknown *unk;
|
IUnknown *unk;
|
||||||
LONG ref;
|
LONG ref, num;
|
||||||
|
|
||||||
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
|
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
|
||||||
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
|
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
|
||||||
|
@ -682,6 +685,75 @@ static void test_create(void)
|
||||||
ok( node == child, "%p %p\n", node, child );
|
ok( node == child, "%p %p\n", node, child );
|
||||||
IXMLDOMNode_Release( child );
|
IXMLDOMNode_Release( child );
|
||||||
IXMLDOMNode_Release( node );
|
IXMLDOMNode_Release( node );
|
||||||
|
|
||||||
|
|
||||||
|
r = IXMLDOMNode_QueryInterface( root, &IID_IXMLDOMElement, (LPVOID*)&element );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
|
||||||
|
r = IXMLDOMElement_get_attributes( element, &attr_map );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
r = IXMLDOMNamedNodeMap_get_length( attr_map, &num );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
ok( num == 0, "num %ld\n", num );
|
||||||
|
IXMLDOMNamedNodeMap_Release( attr_map );
|
||||||
|
|
||||||
|
V_VT(&var) = VT_BSTR;
|
||||||
|
V_BSTR(&var) = SysAllocString( szstr1 );
|
||||||
|
name = SysAllocString( szdl );
|
||||||
|
r = IXMLDOMElement_setAttribute( element, name, var );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
r = IXMLDOMElement_get_attributes( element, &attr_map );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
r = IXMLDOMNamedNodeMap_get_length( attr_map, &num );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
ok( num == 1, "num %ld\n", num );
|
||||||
|
IXMLDOMNamedNodeMap_Release( attr_map );
|
||||||
|
VariantClear(&var);
|
||||||
|
|
||||||
|
V_VT(&var) = VT_BSTR;
|
||||||
|
V_BSTR(&var) = SysAllocString( szstr2 );
|
||||||
|
r = IXMLDOMElement_setAttribute( element, name, var );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
r = IXMLDOMElement_get_attributes( element, &attr_map );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
r = IXMLDOMNamedNodeMap_get_length( attr_map, &num );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
ok( num == 1, "num %ld\n", num );
|
||||||
|
IXMLDOMNamedNodeMap_Release( attr_map );
|
||||||
|
VariantClear(&var);
|
||||||
|
r = IXMLDOMElement_getAttribute( element, name, &var );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
ok( !lstrcmpW(V_BSTR(&var), szstr2), "wrong attr value\n");
|
||||||
|
VariantClear(&var);
|
||||||
|
SysFreeString(name);
|
||||||
|
|
||||||
|
V_VT(&var) = VT_BSTR;
|
||||||
|
V_BSTR(&var) = SysAllocString( szstr1 );
|
||||||
|
name = SysAllocString( szlc );
|
||||||
|
r = IXMLDOMElement_setAttribute( element, name, var );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
r = IXMLDOMElement_get_attributes( element, &attr_map );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
r = IXMLDOMNamedNodeMap_get_length( attr_map, &num );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
ok( num == 2, "num %ld\n", num );
|
||||||
|
IXMLDOMNamedNodeMap_Release( attr_map );
|
||||||
|
VariantClear(&var);
|
||||||
|
SysFreeString(name);
|
||||||
|
|
||||||
|
V_VT(&var) = VT_I4;
|
||||||
|
V_I4(&var) = 10;
|
||||||
|
name = SysAllocString( szbs );
|
||||||
|
r = IXMLDOMElement_setAttribute( element, name, var );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
VariantClear(&var);
|
||||||
|
r = IXMLDOMElement_getAttribute( element, name, &var );
|
||||||
|
ok( r == S_OK, "returns %08lx\n", r );
|
||||||
|
ok( V_VT(&var) == VT_BSTR, "variant type %x\n", V_VT(&var));
|
||||||
|
VariantClear(&var);
|
||||||
|
SysFreeString(name);
|
||||||
|
|
||||||
|
IXMLDOMElement_Release( element );
|
||||||
IXMLDOMNode_Release( root );
|
IXMLDOMNode_Release( root );
|
||||||
IXMLDOMDocument_Release( doc );
|
IXMLDOMDocument_Release( doc );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue