Jacek Caban : mshtml: Added comment and childNodes test.

Alexandre Julliard julliard at winehq.org
Thu May 1 06:38:40 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Apr 30 18:20:05 2008 +0200

mshtml: Added comment and childNodes test.

---

 dlls/mshtml/tests/dom.c |  102 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 98 insertions(+), 4 deletions(-)

diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 7a9b05d..e21a71f 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -40,7 +40,8 @@ static const char range_test2_str[] =
     "<html><body>abc<hr />123<br /><hr />def</body></html>";
 static const char elem_test_str[] =
     "<html><head><title>test</title><style>.body { margin-right: 0px; }</style>"
-    "<body>text test<a href=\"http://test\" name=\"x\">link</a>"
+    "<body>text test<!-- a comment -->"
+    "<a href=\"http://test\" name=\"x\">link</a>"
     "<input id=\"in\" />"
     "<select id=\"s\"><option id=\"x\">opt1</option><option id=\"y\">opt2</option></select>"
     "<textarea id=\"X\">text text</textarea>"
@@ -79,7 +80,8 @@ typedef enum {
     ET_TABLE,
     ET_TBODY,
     ET_SCRIPT,
-    ET_TEST
+    ET_TEST,
+    ET_COMMENT
 } elem_type_t;
 
 static REFIID const none_iids[] = {
@@ -208,6 +210,17 @@ static REFIID const window_iids[] = {
     NULL
 };
 
+static REFIID const comment_iids[] = {
+    &IID_IHTMLDOMNode,
+    &IID_IHTMLDOMNode2,
+    &IID_IHTMLElement,
+    &IID_IHTMLElement2,
+    &IID_IHTMLCommentElement,
+    &IID_IDispatchEx,
+    &IID_IConnectionPointContainer,
+    NULL
+};
+
 typedef struct {
     const char *tag;
     REFIID *iids;
@@ -232,7 +245,8 @@ static const elem_type_info_t elem_type_infos[] = {
     {"TABLE",     table_iids,       NULL},
     {"TBODY",     elem_iids,        NULL},
     {"SCRIPT",    script_iids,      NULL},
-    {"TEST",      elem_iids,        &DIID_DispHTMLUnknownElement}
+    {"TEST",      elem_iids,        &DIID_DispHTMLUnknownElement},
+    {"!",         comment_iids,     NULL}
 };
 
 static const char *dbgstr_w(LPCWSTR str)
@@ -795,6 +809,49 @@ static void _test_input_get_disabled(unsigned line, IHTMLInputElement *input, VA
     ok_(__FILE__,line) (disabled == exb, "disabled=%x, expected %x\n", disabled, exb);
 }
 
+#define get_child_nodes(u) _get_child_nodes(__LINE__,u)
+static IHTMLDOMChildrenCollection *_get_child_nodes(unsigned line, IUnknown *unk)
+{
+    IHTMLDOMChildrenCollection *col = NULL;
+    IHTMLDOMNode *node;
+    IDispatch *disp;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
+    if(FAILED(hres))
+        return NULL;
+
+    hres = IHTMLDOMNode_get_childNodes(node, &disp);
+    IHTMLDOMNode_Release(node);
+    ok_(__FILE__,line) (hres == S_OK, "get_childNodes failed: %08x\n", hres);
+    if(FAILED(hres))
+        return NULL;
+
+    hres = IDispatch_QueryInterface(disp, &IID_IHTMLDOMChildrenCollection, (void**)&col);
+    IDispatch_Release(disp);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMChildrenCollection: %08x\n", hres);
+
+    return col;
+}
+
+#define get_child_item(c,i) _get_child_item(__LINE__,c,i)
+static IHTMLDOMNode *_get_child_item(unsigned line, IHTMLDOMChildrenCollection *col, long idx)
+{
+    IHTMLDOMNode *node = NULL;
+    IDispatch *disp;
+    HRESULT hres;
+
+    hres = IHTMLDOMChildrenCollection_item(col, idx, &disp);
+    ok(hres == S_OK, "item failed: %08x\n", hres);
+
+    hres = IDispatch_QueryInterface(disp, &IID_IHTMLDOMNode, (void**)&node);
+    IDispatch_Release(disp);
+    ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
+
+    return node;
+}
+
 static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n,
         const elem_type_t *elem_types, long len)
 {
@@ -1435,6 +1492,7 @@ static void test_stylesheets(IHTMLDocument2 *doc)
 static void test_elems(IHTMLDocument2 *doc)
 {
     IHTMLElementCollection *col;
+    IHTMLDOMChildrenCollection *child_col;
     IHTMLElement *elem;
     IHTMLDOMNode *node, *node2;
     IDispatch *disp;
@@ -1453,6 +1511,7 @@ static void test_elems(IHTMLDocument2 *doc)
         ET_TITLE,
         ET_STYLE,
         ET_BODY,
+        ET_COMMENT,
         ET_A,
         ET_INPUT,
         ET_SELECT,
@@ -1462,7 +1521,7 @@ static void test_elems(IHTMLDocument2 *doc)
         ET_TABLE,
         ET_TBODY,
         ET_SCRIPT,
-        ET_TEST
+        ET_TEST,
     };
 
     static const elem_type_t item_types[] = {
@@ -1572,6 +1631,41 @@ static void test_elems(IHTMLDocument2 *doc)
         IHTMLDOMNode_Release(node);
     }
 
+    child_col = get_child_nodes((IUnknown*)elem);
+    ok(child_col != NULL, "child_coll == NULL\n");
+    if(child_col) {
+        long length = 0;
+
+        test_disp((IUnknown*)child_col, &DIID_DispDOMChildrenCollection);
+
+        hres = IHTMLDOMChildrenCollection_get_length(child_col, &length);
+        ok(hres == S_OK, "get_length failed: %08x\n", hres);
+        ok(length, "length=0\n");
+
+        node = get_child_item(child_col, 0);
+        ok(node != NULL, "node == NULL\n");
+        if(node) {
+            type = get_node_type((IUnknown*)node);
+            ok(type == 3, "type=%ld\n", type);
+            IHTMLDOMNode_Release(node);
+        }
+
+        node = get_child_item(child_col, 1);
+        ok(node != NULL, "node == NULL\n");
+        if(node) {
+            type = get_node_type((IUnknown*)node);
+            ok(type == 8, "type=%ld\n", type);
+            IHTMLDOMNode_Release(node);
+        }
+
+        disp = (void*)0xdeadbeef;
+        hres = IHTMLDOMChildrenCollection_item(child_col, 6000, &disp);
+        ok(hres == E_INVALIDARG, "item failed: %08x, expected E_INVALIDARG\n", hres);
+        ok(disp == (void*)0xdeadbeef, "disp=%p\n", disp);
+
+        IHTMLDOMChildrenCollection_Release(child_col);
+    }
+
     IHTMLElement_Release(elem);
 
     test_stylesheets(doc);




More information about the wine-cvs mailing list