wine/dlls/msxml3 tests/domdoc.c nodelist.c node.c

Alexandre Julliard julliard at wine.codeweavers.com
Sat Nov 5 04:42:45 CST 2005


ChangeSet ID:	21119
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at winehq.org	2005/11/05 04:42:45

Modified files:
	dlls/msxml3/tests: domdoc.c 
	dlls/msxml3    : nodelist.c node.c 

Log message:
	Huw Davies <huw at codeweavers.com>
	Filter out CTEXT nodes when building element child lists.
	get_item and get_length should honour the filter.
	Add some '\n's to the tests so that libxml2 lists CTEXT nodes.

Patch: http://cvs.winehq.org/patch.py?id=21119

Old revision  New revision  Changes     Path
 1.5           1.6           +13 -9      wine/dlls/msxml3/tests/domdoc.c
 1.4           1.5           +17 -12     wine/dlls/msxml3/nodelist.c
 1.11          1.12          +16 -1      wine/dlls/msxml3/node.c

Index: wine/dlls/msxml3/tests/domdoc.c
diff -u -p wine/dlls/msxml3/tests/domdoc.c:1.5 wine/dlls/msxml3/tests/domdoc.c:1.6
--- wine/dlls/msxml3/tests/domdoc.c:1.5	5 Nov 2005 10:42:45 -0000
+++ wine/dlls/msxml3/tests/domdoc.c	5 Nov 2005 10:42:45 -0000
@@ -50,15 +50,15 @@ static const WCHAR szComplete3[] = {
     '<','a','>','<','/','a','>','\n',0
 };
 static const WCHAR szComplete4[] = {
-    '<','?','x','m','l',' ',
-    'v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>',
-    '<','l','c',' ','d','l','=','\'','s','t','r','1','\'','>',
-    '<','b','s',' ','v','r','=','\'','s','t','r','2','\'',' ',
-    's','z','=','\'','1','2','3','4','\'','>','f','n','1','.','t','x','t','<','/','b','s','>',
-    '<','p','r',' ','i','d','=','\'','s','t','r','3','\'',' ',
-    'v','r','=','\'','1','.','2','.','3','\'',' ',
-    'p','n','=','\'','w','i','n','e',' ','2','0','0','5','0','8','0','4','\'','>',
-    'f','n','2','.','t','x','t','<','/','p','r','>',
+    '<','?','x','m','l',' ','v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>','\n',
+    '<','l','c',' ','d','l','=','\'','s','t','r','1','\'','>','\n',
+        '<','b','s',' ','v','r','=','\'','s','t','r','2','\'',' ','s','z','=','\'','1','2','3','4','\'','>',
+            'f','n','1','.','t','x','t','\n',
+        '<','/','b','s','>','\n',
+        '<','p','r',' ','i','d','=','\'','s','t','r','3','\'',' ','v','r','=','\'','1','.','2','.','3','\'',' ',
+                    'p','n','=','\'','w','i','n','e',' ','2','0','0','5','0','8','0','4','\'','>','\n',
+            'f','n','2','.','t','x','t','\n',
+        '<','/','p','r','>','\n',
     '<','/','l','c','>','\n',0
 };
 static const WCHAR szNonExistentFile[] = {
@@ -439,6 +439,10 @@ void test_domnode( void )
 
     if (list)
     {
+        r = IXMLDOMNodeList_get_length( list, &count );
+        ok( r == S_OK, "get_length returns %08lx\n", r );
+        ok( count == 2, "get_length got %ld\n", count );
+
         r = IXMLDOMNodeList_nextNode( list, &node );
         ok( r == S_OK, "nextNode returned wrong code\n");
     }
Index: wine/dlls/msxml3/nodelist.c
diff -u -p wine/dlls/msxml3/nodelist.c:1.4 wine/dlls/msxml3/nodelist.c:1.5
--- wine/dlls/msxml3/nodelist.c:1.4	5 Nov 2005 10:42:45 -0000
+++ wine/dlls/msxml3/nodelist.c	5 Nov 2005 10:42:45 -0000
@@ -254,6 +254,7 @@ static HRESULT WINAPI xmlnodelist_get_it
     xmlnodelist *This = impl_from_IXMLDOMNodeList( iface );
     xmlNodePtr curr;
     long nodeIndex = 0;
+    HRESULT r;
 
     TRACE("%p %ld\n", This, index);
  
@@ -263,14 +264,16 @@ static HRESULT WINAPI xmlnodelist_get_it
         return S_FALSE;
 
     curr = This->node;
-    
-    for (nodeIndex = 0; nodeIndex < index; nodeIndex++) {
-        if (curr->next == NULL)
-            return S_FALSE;
-        else
-            curr = curr->next;
+
+    while(curr)
+    {
+        r = xslt_next_match( &This->xinfo, &curr );
+        if(FAILED(r) || !curr) return S_FALSE;
+        if(nodeIndex++ == index) break;
+        curr = curr->next;
     }
-    
+    if(!curr) return S_FALSE;
+
     *listItem = create_node( curr );
 
     return S_OK;
@@ -283,6 +286,7 @@ static HRESULT WINAPI xmlnodelist_get_le
 
     xmlNodePtr curr;
     long nodeCount = 0;
+    HRESULT r;
 
     xmlnodelist *This = impl_from_IXMLDOMNodeList( iface );
 
@@ -293,13 +297,14 @@ static HRESULT WINAPI xmlnodelist_get_le
 	return S_OK;
     }
         
-    curr = This->node;
-    nodeCount = 1;
-    while (curr->next != NULL) {
+    for(curr = This->node; curr; curr = curr->next)
+    {
+        r = xslt_next_match( &This->xinfo, &curr );
+        if(FAILED(r) || !curr) break;
         nodeCount++;
-        curr = curr->next;
     }
-   *listLength = nodeCount;
+
+    *listLength = nodeCount;
     return S_OK;
 }
 
Index: wine/dlls/msxml3/node.c
diff -u -p wine/dlls/msxml3/node.c:1.11 wine/dlls/msxml3/node.c:1.12
--- wine/dlls/msxml3/node.c:1.11	5 Nov 2005 10:42:45 -0000
+++ wine/dlls/msxml3/node.c	5 Nov 2005 10:42:45 -0000
@@ -319,7 +319,22 @@ static HRESULT WINAPI xmlnode_get_childN
 
     if ( !childList )
         return E_INVALIDARG;
-    *childList = create_nodelist( This->node->children );
+
+    switch(This->node->type)
+    {
+    case XML_ELEMENT_NODE:
+        *childList = create_filtered_nodelist( This->node->children, (const xmlChar *)"*" );
+        break;
+
+    case XML_ATTRIBUTE_NODE:
+        *childList = create_filtered_nodelist( This->node->children, (const xmlChar *)"node()" );
+        break;
+
+    default:
+        FIXME("unhandled node type %d\n", This->node->type);
+        break;
+    }
+
     if (!*childList)
         return S_FALSE;
     return S_OK;



More information about the wine-cvs mailing list