diff --git a/src/changes/changes.xml b/src/changes/changes.xml index c2ecaeea52..6337b23e11 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -9,7 +9,7 @@ - DOMTokenList is now iterable, keys() method implemented. + DOMTokenList is now iterable, keys(), entries() method implemented. Implementation of DOMTokenList.forEach() added. diff --git a/src/main/java/org/htmlunit/javascript/host/dom/DOMTokenList.java b/src/main/java/org/htmlunit/javascript/host/dom/DOMTokenList.java index 1d3af74b76..67d4040fee 100644 --- a/src/main/java/org/htmlunit/javascript/host/dom/DOMTokenList.java +++ b/src/main/java/org/htmlunit/javascript/host/dom/DOMTokenList.java @@ -309,6 +309,15 @@ public Scriptable values() { return JavaScriptEngine.newArrayIteratorTypeValues(getParentScope(), this); } + /** + * Returns an Iterator allowing to go through all key/value pairs contained in this object. + * @return a NativeArrayIterator + */ + @JsxFunction + public Scriptable entries() { + return JavaScriptEngine.newArrayIteratorTypeEntries(getParentScope(), this); + } + /** * Calls the {@code callback} given in parameter once for each value in the list. * @param callback function to execute for each element diff --git a/src/test/java/org/htmlunit/general/ElementOwnPropertiesTest.java b/src/test/java/org/htmlunit/general/ElementOwnPropertiesTest.java index 72e7e1a0d1..52a974f9cb 100644 --- a/src/test/java/org/htmlunit/general/ElementOwnPropertiesTest.java +++ b/src/test/java/org/htmlunit/general/ElementOwnPropertiesTest.java @@ -17588,11 +17588,14 @@ public void abortSignal() throws Exception { FF_ESR = "add(),constructor(),contains(),entries(),forEach(),item(),keys(),length[GCE],remove(),replace()," + "supports(),toggle(),toString(),value[GSCE]," + "values()") - @HtmlUnitNYI(CHROME = "add(),constructor(),contains(),forEach(),item(),keys(),length[GCE],remove(),toggle()," - + "values()", - EDGE = "add(),constructor(),contains(),forEach(),item(),keys(),length[GCE],remove(),toggle(),values()", - FF = "add(),constructor(),contains(),forEach(),item(),keys(),length[GCE],remove(),toggle(),values()", - FF_ESR = "add(),constructor(),contains(),forEach(),item(),keys(),length[GCE],remove(),toggle(),values()") + @HtmlUnitNYI(CHROME = "add(),constructor(),contains(),entries(),forEach(),item(),keys(),length[GCE]," + + "remove(),toggle(),values()", + EDGE = "add(),constructor(),contains(),entries(),forEach(),item(),keys(),length[GCE]," + + "remove(),toggle(),values()", + FF = "add(),constructor(),contains(),entries(),forEach(),item(),keys(),length[GCE]," + + "remove(),toggle(),values()", + FF_ESR = "add(),constructor(),contains(),entries(),forEach(),item(),keys(),length[GCE]," + + "remove(),toggle(),values()") public void domTokenList() throws Exception { testString("", "document.body.classList"); } diff --git a/src/test/java/org/htmlunit/general/ElementPropertiesTest.java b/src/test/java/org/htmlunit/general/ElementPropertiesTest.java index 1ab9a4669b..fe95b2cb4c 100644 --- a/src/test/java/org/htmlunit/general/ElementPropertiesTest.java +++ b/src/test/java/org/htmlunit/general/ElementPropertiesTest.java @@ -8997,10 +8997,10 @@ public void abortSignal() throws Exception { FF_ESR = "add(),contains(),entries(),forEach(),item(),keys(),length,remove(),replace(),supports(),toggle()," + "toString(),value," + "values()") - @HtmlUnitNYI(CHROME = "add(),contains(),forEach(),item(),keys(),length,remove(),toggle(),values()", - EDGE = "add(),contains(),forEach(),item(),keys(),length,remove(),toggle(),values()", - FF = "add(),contains(),forEach(),item(),keys(),length,remove(),toggle(),values()", - FF_ESR = "add(),contains(),forEach(),item(),keys(),length,remove(),toggle(),values()") + @HtmlUnitNYI(CHROME = "add(),contains(),entries(),forEach(),item(),keys(),length,remove(),toggle(),values()", + EDGE = "add(),contains(),entries(),forEach(),item(),keys(),length,remove(),toggle(),values()", + FF = "add(),contains(),entries(),forEach(),item(),keys(),length,remove(),toggle(),values()", + FF_ESR = "add(),contains(),entries(),forEach(),item(),keys(),length,remove(),toggle(),values()") public void domTokenList() throws Exception { testString("", "document.body.classList"); } diff --git a/src/test/java/org/htmlunit/javascript/host/dom/DOMTokenListTest.java b/src/test/java/org/htmlunit/javascript/host/dom/DOMTokenListTest.java index 7f63507e16..b301fff65b 100644 --- a/src/test/java/org/htmlunit/javascript/host/dom/DOMTokenListTest.java +++ b/src/test/java/org/htmlunit/javascript/host/dom/DOMTokenListTest.java @@ -18,6 +18,7 @@ import org.htmlunit.html.HtmlPageTest; import org.htmlunit.junit.BrowserRunner; import org.htmlunit.junit.BrowserRunner.Alerts; +import org.htmlunit.junit.BrowserRunner.HtmlUnitNYI; import org.junit.Test; import org.junit.runner.RunWith; @@ -249,6 +250,161 @@ public void forEachWrongParam() throws Exception { loadPageVerifyTitle2(html); } + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"value", "done", "object", "0", "a"}) + public void entries() throws Exception { + final String html = "\n" + + "\n" + + "\n" + + "
\n" + + "\n"; + + loadPageVerifyTitle2(html); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"true", "undefined", "function", "undefined", "undefined", "true", "true", "true"}) + public void entriesPropertyDescriptor() throws Exception { + final String html = "\n" + + "\n" + + "\n" + + "
\n" + + "\n"; + + loadPageVerifyTitle2(html); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"0,a", "1,x"}) + public void entriesForOf() throws Exception { + final String html = "\n" + + "\n" + + "\n" + + "
\n" + + "\n"; + + loadPageVerifyTitle2(html); + } + + /** + * @throws Exception on test failure + */ + @Test + @Alerts("0,1,2,add,contains,entries,forEach,item,keys,length,remove,replace,supports,toggle,toString,value,values") + @HtmlUnitNYI(CHROME = "0,1,2,add,contains,entries,forEach,item,keys,length,remove,toggle,values", + EDGE = "0,1,2,add,contains,entries,forEach,item,keys,length,remove,toggle,values", + FF = "0,1,2,add,contains,entries,forEach,item,keys,length,remove,toggle,values", + FF_ESR = "0,1,2,add,contains,entries,forEach,item,keys,length,remove,toggle,values") + public void forIn() throws Exception { + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "\n" + + "\n" + + "\n" + + "
\n" + + ""; + + loadPageVerifyTitle2(html); + } + + /** + * @throws Exception on test failure + */ + @Test + @Alerts("add,contains,entries,forEach,item,keys,length,remove,replace,supports,toggle,toString,value,values") + @HtmlUnitNYI(CHROME = "add,contains,entries,forEach,item,keys,length,remove,toggle,values", + EDGE = "add,contains,entries,forEach,item,keys,length,remove,toggle,values", + FF = "add,contains,entries,forEach,item,keys,length,remove,toggle,values", + FF_ESR = "add,contains,entries,forEach,item,keys,length,remove,toggle,values") + public void forInEmptyList() throws Exception { + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "\n" + + "\n" + + "\n" + + "
\n" + + ""; + + loadPageVerifyTitle2(html); + } + /** * @throws Exception on test failure */