diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2015-10-21 18:46:43 +0200 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2015-10-21 18:46:43 +0200 |
commit | 2f52338328e694e3ba1141424cbf3f413bcfbaf9 (patch) | |
tree | 8bf2aaf678bab53dd37d778273deafde741775df | |
parent | 79068dd50f8617186822d871e292c726e7f85658 (diff) | |
download | netsurf-2f52338328e694e3ba1141424cbf3f413bcfbaf9.tar.gz netsurf-2f52338328e694e3ba1141424cbf3f413bcfbaf9.tar.bz2 |
Fix up Element to return null rather than undefined, add tests
-rw-r--r-- | javascript/duktape/Element.bnd | 44 | ||||
-rw-r--r-- | test/js/dom-element-firstElementChild.html | 2 | ||||
-rw-r--r-- | test/js/dom-element-lastElementChild.html | 2 | ||||
-rw-r--r-- | test/js/dom-element-next_prev_ElementSibling.html | 3 |
4 files changed, 35 insertions, 16 deletions
diff --git a/javascript/duktape/Element.bnd b/javascript/duktape/Element.bnd index bd11e2aa1..07a059fbe 100644 --- a/javascript/duktape/Element.bnd +++ b/javascript/duktape/Element.bnd @@ -31,9 +31,7 @@ getter Element::firstElementChild() exc = dom_node_get_node_type(element, &node_type); if ((exc == DOM_NO_ERR) && (node_type == DOM_ELEMENT_NODE)) { /* found it */ - dukky_push_node(ctx, (dom_node *)element); - dom_node_unref(element); - return 1; + break; } exc = dom_node_get_next_sibling(element, &next_node); @@ -44,7 +42,12 @@ getter Element::firstElementChild() element = NULL; } } - return 0; + if (dukky_push_node(ctx, (dom_node *)element) == false) { + dom_node_unref(element); + return 0; + } + dom_node_unref(element); + return 1; %} getter Element::lastElementChild() @@ -63,9 +66,7 @@ getter Element::lastElementChild() exc = dom_node_get_node_type(element, &node_type); if ((exc == DOM_NO_ERR) && (node_type == DOM_ELEMENT_NODE)) { /* found it */ - dukky_push_node(ctx, (dom_node *)element); - dom_node_unref(element); - return 1; + break; } exc = dom_node_get_previous_sibling(element, &next_node); @@ -76,7 +77,12 @@ getter Element::lastElementChild() element = NULL; } } - return 0; + if (dukky_push_node(ctx, (dom_node *)element) == false) { + dom_node_unref(element); + return 0; + } + dom_node_unref(element); + return 1; %} getter Element::previousElementSibling() @@ -95,9 +101,7 @@ getter Element::previousElementSibling() exc = dom_node_get_node_type(element, &node_type); if ((exc == DOM_NO_ERR) && (node_type == DOM_ELEMENT_NODE)) { /* found it */ - dukky_push_node(ctx, (dom_node *)element); - dom_node_unref(element); - return 1; + break; } exc = dom_node_get_previous_sibling(element, &sib_node); @@ -108,7 +112,12 @@ getter Element::previousElementSibling() element = NULL; } } - return 0; + if (dukky_push_node(ctx, (dom_node *)element) == false) { + dom_node_unref(element); + return 0; + } + dom_node_unref(element); + return 1; %} getter Element::nextElementSibling() @@ -127,9 +136,7 @@ getter Element::nextElementSibling() exc = dom_node_get_node_type(element, &node_type); if ((exc == DOM_NO_ERR) && (node_type == DOM_ELEMENT_NODE)) { /* found it */ - dukky_push_node(ctx, (dom_node *)element); - dom_node_unref(element); - return 1; + break; } exc = dom_node_get_next_sibling(element, &sib_node); @@ -140,7 +147,12 @@ getter Element::nextElementSibling() element = NULL; } } - return 0; + if (dukky_push_node(ctx, (dom_node *)element) == false) { + dom_node_unref(element); + return 0; + } + dom_node_unref(element); + return 1; %} getter Element::childElementCount() diff --git a/test/js/dom-element-firstElementChild.html b/test/js/dom-element-firstElementChild.html index e3ff9bb59..d240310d0 100644 --- a/test/js/dom-element-firstElementChild.html +++ b/test/js/dom-element-firstElementChild.html @@ -7,5 +7,7 @@ <h1>DOM firstElementChild reference (body)</h1> <p><b>head.firstElementChild:</b> <script>document.write(document.head.firstElementChild.textContent);</script></p> <p><b>body.firstElementChild:</b> <script>document.write(document.body.firstElementChild.textContent);</script></p> +<h1>DOM nodes should be 'null' if not present</h1> +<p><b>head.firstElementChild.firstElementChild:</b> <script>document.write(document.head.firstElementChild.firstElementChild);</script></p> </body> </html> diff --git a/test/js/dom-element-lastElementChild.html b/test/js/dom-element-lastElementChild.html index e4e9f11cb..a99b2e298 100644 --- a/test/js/dom-element-lastElementChild.html +++ b/test/js/dom-element-lastElementChild.html @@ -7,5 +7,7 @@ <h1>DOM lastElementChild reference</h1> <p><b>head.lastElementChild:</b> <script>document.write(document.head.lastElementChild.textContent);</script></p> <p><b>body.lastElementChild:</b> <script>document.write(document.body.lastElementChild.textContent);</script></p> +<h1>DOM nodes should be 'null' if not present</h1> +<p><b>head.firstElementChild.lastElementChild:</b> <script>document.write(document.head.firstElementChild.lastElementChild);</script></p> </body> </html> diff --git a/test/js/dom-element-next_prev_ElementSibling.html b/test/js/dom-element-next_prev_ElementSibling.html index 85263cc17..168319dc8 100644 --- a/test/js/dom-element-next_prev_ElementSibling.html +++ b/test/js/dom-element-next_prev_ElementSibling.html @@ -10,5 +10,8 @@ <p><b>head.lastElementChild.previousElementSibling:</b> <script>document.write(document.head.lastElementChild.previousElementSibling.textContent);</script></p> <!-- comment node should be skipped --> <p><b>body.firstElementChild.nextElementSibling:</b> <script>document.write(document.body.firstElementChild.nextElementSibling.textContent);</script></p> +<h1>DOM nodes should be 'null' if not present</h1> +<p><b>head.firstElementChild.previousElementSibling:</b> <script>document.write(document.head.firstElementChild.previousElementSibling);</script></p> +<p><b>head.firstElementChild.nextElementSibling.nextElementSibling:</b> <script>document.write(document.head.firstElementChild.nextElementSibling.nextElementSibling);</script></p> </body> </html> |