Adam Martinson : msxml3: Add XSLPattern nodeType() method.

Alexandre Julliard julliard at winehq.org
Wed Nov 3 11:37:07 CDT 2010


Module: wine
Branch: master
Commit: 42ccbc51322409aa20272651759c5434b6d0c1db
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=42ccbc51322409aa20272651759c5434b6d0c1db

Author: Adam Martinson <amartinson at codeweavers.com>
Date:   Tue Nov  2 16:11:49 2010 -0500

msxml3: Add XSLPattern nodeType() method.

---

 dlls/msxml3/queryresult.c  |    7 +++++++
 dlls/msxml3/tests/domdoc.c |   30 ++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/dlls/msxml3/queryresult.c b/dlls/msxml3/queryresult.c
index 96f9e6f..88fe39f 100644
--- a/dlls/msxml3/queryresult.c
+++ b/dlls/msxml3/queryresult.c
@@ -405,6 +405,12 @@ void XSLPattern_end(xmlXPathParserContextPtr pctx, int nargs)
     xmlXPathReturnBoolean(pctx, pos == last);
 }
 
+void XSLPattern_nodeType(xmlXPathParserContextPtr pctx, int nargs)
+{
+    XSLPATTERN_CHECK_ARGS(0);
+    xmlXPathReturnNumber(pctx, pctx->context->node->type);
+}
+
 void XSLPattern_OP_IEq(xmlXPathParserContextPtr pctx, int nargs)
 {
     xmlChar *arg1, *arg2;
@@ -528,6 +534,7 @@ HRESULT queryresult_create(xmlNodePtr node, LPCWSTR szQuery, IXMLDOMNodeList **o
 
         xmlXPathRegisterFunc(ctxt, (xmlChar const*)"index", XSLPattern_index);
         xmlXPathRegisterFunc(ctxt, (xmlChar const*)"end", XSLPattern_end);
+        xmlXPathRegisterFunc(ctxt, (xmlChar const*)"nodeType", XSLPattern_nodeType);
 
         xmlXPathRegisterFunc(ctxt, (xmlChar const*)"OP_IEq", XSLPattern_OP_IEq);
         xmlXPathRegisterFunc(ctxt, (xmlChar const*)"OP_INEq", XSLPattern_OP_INEq);
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 3ab6be3..e8f77cf 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -6702,6 +6702,36 @@ static void test_XSLPattern(void)
             expect_list_and_release(list, "P1.E3.E3.D1 C2.E3.E3.D1 T3.E3.E3.D1 E4.E3.E3.D1 E5.E3.E3.D1 E6.E3.E3.D1");
     }
 
+    /* nodeType() */
+    /* XML_ELEMENT_NODE */
+    ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//x/node()[nodeType()=1]"), &list));
+    len = 0;
+    ole_check(IXMLDOMNodeList_get_length(list, &len));
+    ok(len != 0, "expected filled list\n");
+    if (len)
+        expect_list_and_release(list, "E4.E3.E3.D1 E5.E3.E3.D1 E6.E3.E3.D1");
+    /* XML_TEXT_NODE */
+    ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//x/node()[nodeType()=3]"), &list));
+    len = 0;
+    ole_check(IXMLDOMNodeList_get_length(list, &len));
+    ok(len != 0, "expected filled list\n");
+    if (len)
+        expect_list_and_release(list, "T3.E3.E3.D1");
+    /* XML_PI_NODE */
+    ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//x/node()[nodeType()=7]"), &list));
+    len = 0;
+    ole_check(IXMLDOMNodeList_get_length(list, &len));
+    ok(len != 0, "expected filled list\n");
+    if (len)
+        expect_list_and_release(list, "P1.E3.E3.D1");
+    /* XML_COMMENT_NODE */
+    ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//x/node()[nodeType()=8]"), &list));
+    len = 0;
+    ole_check(IXMLDOMNodeList_get_length(list, &len));
+    ok(len != 0, "expected filled list\n");
+    if (len)
+        expect_list_and_release(list, "C2.E3.E3.D1");
+
     /* pi() */
     todo_wine ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("pi()"), &list));
     if (list)




More information about the wine-cvs mailing list