msxml: nextNode and reset functions.
This commit is contained in:
parent
8990a7c73b
commit
f57bf10024
|
@ -44,6 +44,7 @@ typedef struct _xmlnodemap
|
|||
const struct ISupportErrorInfoVtbl *lpSEIVtbl;
|
||||
LONG ref;
|
||||
IXMLDOMNode *node;
|
||||
long iterator;
|
||||
} xmlnodemap;
|
||||
|
||||
static inline xmlnodemap *impl_from_IXMLDOMNamedNodeMap( IXMLDOMNamedNodeMap *iface )
|
||||
|
@ -297,15 +298,42 @@ static HRESULT WINAPI xmlnodemap_nextNode(
|
|||
IXMLDOMNamedNodeMap *iface,
|
||||
IXMLDOMNode** nextItem)
|
||||
{
|
||||
FIXME("\n");
|
||||
return E_NOTIMPL;
|
||||
xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
|
||||
xmlNodePtr node;
|
||||
xmlAttrPtr curr;
|
||||
long attrIndex;
|
||||
|
||||
TRACE("%p %ld\n", This, This->iterator);
|
||||
|
||||
*nextItem = NULL;
|
||||
|
||||
node = xmlNodePtr_from_domnode( This->node, 0 );
|
||||
curr = node->properties;
|
||||
|
||||
for (attrIndex = 0; attrIndex < This->iterator; attrIndex++) {
|
||||
if (curr->next == NULL)
|
||||
return S_FALSE;
|
||||
else
|
||||
curr = curr->next;
|
||||
}
|
||||
|
||||
This->iterator++;
|
||||
|
||||
*nextItem = create_node( (xmlNodePtr) curr );
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI xmlnodemap_reset(
|
||||
IXMLDOMNamedNodeMap *iface )
|
||||
{
|
||||
FIXME("\n");
|
||||
return E_NOTIMPL;
|
||||
xmlnodemap *This = impl_from_IXMLDOMNamedNodeMap( iface );
|
||||
|
||||
TRACE("%p %ld\n", This, This->iterator);
|
||||
|
||||
This->iterator = 0;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI xmlnodemap__newEnum(
|
||||
|
@ -389,6 +417,7 @@ IXMLDOMNamedNodeMap *create_nodemap( IXMLDOMNode *node )
|
|||
nodemap->lpSEIVtbl = &support_error_vtbl;
|
||||
nodemap->node = node;
|
||||
nodemap->ref = 1;
|
||||
nodemap->iterator = 0;
|
||||
|
||||
IXMLDOMNode_AddRef( node );
|
||||
/* Since we AddRef a node here, we don't need to call xmldoc_add_ref() */
|
||||
|
|
|
@ -442,6 +442,23 @@ todo_wine
|
|||
ok ( str != NULL, "str is null\n");
|
||||
ok( !lstrcmpW( str, szdl ), "incorrect node name\n");
|
||||
SysFreeString( str );
|
||||
|
||||
/* test sequential access of attributes */
|
||||
node = NULL;
|
||||
r = IXMLDOMNamedNodeMap_nextNode( map, &node );
|
||||
ok ( r == S_OK, "nextNode (first time) wrong code\n");
|
||||
ok ( node != NULL, "nextNode, should be attribute\n");
|
||||
|
||||
r = IXMLDOMNamedNodeMap_nextNode( map, &node );
|
||||
ok ( r != S_OK, "nextNode (second time) wrong code\n");
|
||||
ok ( node == NULL, "nextNode, there is no attribute\n");
|
||||
|
||||
r = IXMLDOMNamedNodeMap_reset( map );
|
||||
ok ( r == S_OK, "reset should return S_OK\n");
|
||||
|
||||
r = IXMLDOMNamedNodeMap_nextNode( map, &node );
|
||||
ok ( r == S_OK, "nextNode (third time) wrong code\n");
|
||||
ok ( node != NULL, "nextNode, should be attribute\n");
|
||||
}
|
||||
else
|
||||
ok( FALSE, "no map\n");
|
||||
|
|
Loading…
Reference in New Issue