You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(10) |
Aug
(30) |
Sep
(15) |
Oct
(26) |
Nov
(12) |
Dec
(17) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(7) |
Feb
(27) |
Mar
(73) |
Apr
(17) |
May
(17) |
Jun
(78) |
Jul
(67) |
Aug
(60) |
Sep
(89) |
Oct
(140) |
Nov
(173) |
Dec
(46) |
2004 |
Jan
(39) |
Feb
(7) |
Mar
(21) |
Apr
(31) |
May
(13) |
Jun
(86) |
Jul
(14) |
Aug
(14) |
Sep
(53) |
Oct
(184) |
Nov
(186) |
Dec
(319) |
2005 |
Jan
(336) |
Feb
(274) |
Mar
(226) |
Apr
(102) |
May
(196) |
Jun
(130) |
Jul
(119) |
Aug
(143) |
Sep
(76) |
Oct
(85) |
Nov
(70) |
Dec
(159) |
2006 |
Jan
(125) |
Feb
(100) |
Mar
(80) |
Apr
(39) |
May
(55) |
Jun
(58) |
Jul
(50) |
Aug
(76) |
Sep
(55) |
Oct
(101) |
Nov
(163) |
Dec
(85) |
2007 |
Jan
(56) |
Feb
(53) |
Mar
(180) |
Apr
(221) |
May
(290) |
Jun
(199) |
Jul
(322) |
Aug
(515) |
Sep
(121) |
Oct
(297) |
Nov
(177) |
Dec
(103) |
2008 |
Jan
(516) |
Feb
(315) |
Mar
(586) |
Apr
(615) |
May
(197) |
Jun
(381) |
Jul
(390) |
Aug
(195) |
Sep
(603) |
Oct
(499) |
Nov
(622) |
Dec
(350) |
2009 |
Jan
(313) |
Feb
(338) |
Mar
(507) |
Apr
(317) |
May
(197) |
Jun
(375) |
Jul
(235) |
Aug
(424) |
Sep
(410) |
Oct
(338) |
Nov
(286) |
Dec
(306) |
2010 |
Jan
(367) |
Feb
(339) |
Mar
(371) |
Apr
(172) |
May
(233) |
Jun
(264) |
Jul
(421) |
Aug
(110) |
Sep
(218) |
Oct
(189) |
Nov
(185) |
Dec
(168) |
2011 |
Jan
(145) |
Feb
(213) |
Mar
(205) |
Apr
(64) |
May
(159) |
Jun
(67) |
Jul
(104) |
Aug
(126) |
Sep
(144) |
Oct
(106) |
Nov
(154) |
Dec
(225) |
2012 |
Jan
(111) |
Feb
(87) |
Mar
(131) |
Apr
(102) |
May
(180) |
Jun
(160) |
Jul
(412) |
Aug
(315) |
Sep
(311) |
Oct
(369) |
Nov
(464) |
Dec
(284) |
2013 |
Jan
(343) |
Feb
(165) |
Mar
(174) |
Apr
(120) |
May
(153) |
Jun
(134) |
Jul
(202) |
Aug
(105) |
Sep
(228) |
Oct
(332) |
Nov
(192) |
Dec
(219) |
2014 |
Jan
(348) |
Feb
(194) |
Mar
(189) |
Apr
(188) |
May
(297) |
Jun
(206) |
Jul
(79) |
Aug
(279) |
Sep
(111) |
Oct
(159) |
Nov
(61) |
Dec
(78) |
2015 |
Jan
(152) |
Feb
(145) |
Mar
(239) |
Apr
(223) |
May
(248) |
Jun
(296) |
Jul
(172) |
Aug
(189) |
Sep
(338) |
Oct
(217) |
Nov
(131) |
Dec
(184) |
2016 |
Jan
(118) |
Feb
(221) |
Mar
(414) |
Apr
(412) |
May
(303) |
Jun
(133) |
Jul
(129) |
Aug
(121) |
Sep
(136) |
Oct
(67) |
Nov
(89) |
Dec
(245) |
2017 |
Jan
(349) |
Feb
(90) |
Mar
(328) |
Apr
(430) |
May
(284) |
Jun
(199) |
Jul
(164) |
Aug
(120) |
Sep
(57) |
Oct
(105) |
Nov
(108) |
Dec
(146) |
2018 |
Jan
(85) |
Feb
(48) |
Mar
(97) |
Apr
(62) |
May
(64) |
Jun
(136) |
Jul
(123) |
Aug
(87) |
Sep
(17) |
Oct
(27) |
Nov
(9) |
Dec
(16) |
2019 |
Jan
(9) |
Feb
(17) |
Mar
(18) |
Apr
(14) |
May
(8) |
Jun
|
Jul
(6) |
Aug
(12) |
Sep
(5) |
Oct
|
Nov
(2) |
Dec
|
2020 |
Jan
(8) |
Feb
|
Mar
(6) |
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
(4) |
Oct
(1) |
Nov
|
Dec
|
2021 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(4) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(4) |
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
|
2023 |
Jan
|
Feb
(6) |
Mar
(9) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2024 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: RBRi <rb...@us...> - 2018-06-30 12:51:28
|
- **status**: open --> accepted - **assigned_to**: RBRi --- ** [bugs:#1956] java.lang.StackOverflowError when div.style.length = 100** **Status:** accepted **Group:** Latest SVN **Created:** Mon Mar 12, 2018 04:04 AM UTC by Atsushi Nakagawa **Last Updated:** Sat Mar 17, 2018 04:53 PM UTC **Owner:** RBRi This bug report encompasses three problems caused by the same root cause. I'll first outline the problems, then go over what I think is the cause, and then offer my suggested fix. ## Problems * Setting `length` field of `CSSStyleDeclaration` in *non-strict mode* causes `java.lang.StackOverflowError`. * Setting the `size` field of a `Map` should not be allowed but is possible in HtmlUnit in *non-strict mode*. * Setting the `length` field of `javascript.host.dom.AbstractList` should not be allowed, but is possible in HtmlUnit, in both *strict mode* and *non-strict mode*. ## Test case This test is for demonstrating the behaviour in both conventional browsers and HtmlUnit. ```html <!DOCTYPE html> <html> <head> <script> function check(tn, func) { try { console.log(tn + ':', func()) } catch (e) { console.log(tn + ':', e.message) } } function test() { check('t1', function () { 'use strict'; var x = document.body.style; x.length = 100; return x.length }) check('t2', function () { var x = document.body.style; x.length = 100; return x.length }) check('t3', function () { 'use strict'; var x = new Map(); x.size = 100; return x.size }) check('t4', function () { var x = new Map(); x.size = 100; return x.size }) check('t5', function () { 'use strict'; var x = document.children; x.length = 100; return x.length }) check('t6', function () { var x = document.children; x.length = 100; return x.length }) } </script> </head> <body> <input type="button" onclick="test()" value="test"/> </body> </html> ``` ### Result in browsers #### Chrome: ```text t1: Cannot assign to read only property 'length' of object '#<CSSStyleDeclaration>' t2: 0 t3: Cannot set property size of #<Map> which has only a getter t4: 0 t5: Cannot assign to read only property 'length' of object '#<HTMLCollection>' t6: 1 ``` #### Firefox: Odd lines differ as follows: ```text t1: setting getter-only property "length" t3: setting getter-only property "size" t5: setting getter-only property "length" ``` #### Edge: Odd lines differ as follows: ```text t1: Assignment to read-only properties is not allowed in strict mode t3: Assignment to read-only properties is not allowed in strict mode t5: Assignment to read-only properties is not allowed in strict mode ``` ### Result in HtmlUnit ```text t1: Cannot set property [CSSStyleDeclaration].length that has only a getter to 100. t3: Cannot set property [Map].size that has only a getter to 100. t4: 100.0 t5. 100.0 t6. 100.0 ``` `t2` doesn't complete but instead throws `java.lang.StackOverflowException`. ## Possible cause 1) The problem appears to be caused foremost by HtmlUnit's rhino fork [attempting to `setValue()` in a `ScriptableObject$GetterSlot` that has no setter](https://github.com/HtmlUnit/htmlunit-rhino-fork/blob/f41c211235de141394bff2ca1bf9ee02dfc3e58f/src/org/mozilla/javascript/ScriptableObject.java#L271). As to *why* it's doing that, I think it's partially caused by a regression in [this commit](https://github.com/HtmlUnit/htmlunit-rhino-fork/commit/d01bf85dd0149d73e6c057d1c64c0fa2b780daae). This commit message says *"Remove unused parameters"* but it appears to be removing it in the logically opposite manner for the three parameters `FEATURE_HTMLUNIT_ASK_OBJECT_TO_WRITE_READONLY`, `FEATURE_HTMLUNIT_FUNCTION_NULL_SETTER` and `FEATURE_HTMLUNIT_EVAL_LOCAL_SCOPE`. For example, the literal value of `FEATURE_HTMLUNIT_ASK_OBJECT_TO_WRITE_READONLY` was `false`. So logically, "`if (FEATURE_HTMLUNIT_ASK_OBJECT_TO_WRITE_READONLY) { ... } else { ... }`" blocks should leave the "`else`" part. The commit however leaves "`if`" part. 2) A follow up problem is that just reverting commit won't suffice as the previous code throws `TypeError` even in *non-strict mode*. Judging from [surround code](https://github.com/HtmlUnit/htmlunit-rhino-fork/blob/f41c211235de141394bff2ca1bf9ee02dfc3e58f/src/org/mozilla/javascript/ScriptableObject.java#L2736), it should just `return true` in *non-strict mode*. 3) Lastly, a problem that will still break t5 and t6 is this line in [`AbstractList.has(String, Scriptable)`](https://sourceforge.net/p/htmlunit/code/15163/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/AbstractList.java#l468) which makes HtmlUnit look for the `length` field in the *object* instance even though it should be looking at the *prototype* instance. This simple test in Chrone / FF / Edge shows there is no `"length"` field on the object for `document.children` but there is on `__proto__`. ```text > Object.getOwnPropertyDescriptor(document.children, 'length') < undefined > Object.getOwnPropertyDescriptor(document.children.__proto__, 'length') < {get: ƒ, set: undefined, enumerable: true, configurable: true} ``` ## Suggested fix These are the fixes we're using locally. #### Fix for `GetterSlot.setValue(Object value, Scriptable owner, Scriptable start)`. This change to [`ScriptableObject$GetterSlot.setValue()`](https://github.com/HtmlUnit/htmlunit-rhino-fork/blob/f41c211235de141394bff2ca1bf9ee02dfc3e58f/src/org/mozilla/javascript/ScriptableObject.java#L260) puts it more in line with [`ScriptableObject$Slot.setValue()`]( https://github.com/HtmlUnit/htmlunit-rhino-fork/blob/f41c211235de141394bff2ca1bf9ee02dfc3e58f/src/org/mozilla/javascript/ScriptableObject.java#L180). ```diff @@ -286,32 +286,14 @@ ScriptableObject getPropertyDescriptor(Context cx, Scriptable scope) { @Override boolean setValue(Object value, Scriptable owner, Scriptable start) { if (setter == null) { if (getter != null) { Context cx = Context.getContext(); - if (cx.isStrictMode() || - // Based on TC39 ES3.1 Draft of 9-Feb-2009, 8.12.4, step 2, - // we should throw a TypeError in this case. - cx.hasFeature(Context.FEATURE_STRICT_MODE)) { - + if (cx.isStrictMode()) { throw ScriptRuntime.typeError3("msg.set.prop.no.setter", name, start.getClassName(), Context.toString(value)); } - Scriptable scriptable = start; - - if (scriptable instanceof Delegator) { - scriptable = ((Delegator) scriptable).getDelegee(); - } - - if (scriptable instanceof ScriptableObject) { - boolean allowSetting = ((ScriptableObject) scriptable).isReadOnlySettable(name, value); - if (!allowSetting) { - return true; - } - } - if (owner == start) { - getter = null; - } + return true; } } else { Context cx = Context.getContext(); if (setter instanceof MemberBox) { MemberBox nativeSetter = (MemberBox)setter; ``` This change obseletes [`ScriptableObject.isReadOnlySettable()`](https://github.com/HtmlUnit/htmlunit-rhino-fork/blob/f41c211235de141394bff2ca1bf9ee02dfc3e58f/src/org/mozilla/javascript/ScriptableObject.java#L3288), [`SimpleScriptable.isReadOnlySettable()`](https://sourceforge.net/p/htmlunit/code/15163/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/SimpleScriptable.java#l392) and the annotation [`CanSetReadOnly`](https://sourceforge.net/p/htmlunit/code/15163/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/CanSetReadOnly.java) as they become unused code. They might be salvagable but `isReadOnlySettable()`'s default return value is `true` which isn't easy to work with, and I don't know the use case. #### Extra fix for `AbstractList.has(final String name, final Scriptable start)`. This is the extra fix to [`AbstractList.has(final String name, final Scriptable start)`](https://sourceforge.net/p/htmlunit/code/15163/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/AbstractList.java#l455) is needed for t5 and t6. ```diff @@ -457,13 +457,10 @@ public boolean has(final String name, final Scriptable start) { } catch (final NumberFormatException e) { // Ignore. } - if ("length".equals(name)) { - return true; - } final BrowserVersion browserVersion = getBrowserVersion(); if (browserVersion.hasFeature(JS_NODE_LIST_ENUMERATE_FUNCTIONS)) { final JavaScriptConfiguration jsConfig = getWindow().getWebWindow().getWebClient() .getJavaScriptEngine().getJavaScriptConfiguration(); if (jsConfig.getClassConfiguration(getClassName()).getFunctionKeys().contains(name)) { ``` --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-06-30 12:40:47
|
- **status**: open --> pending - **assigned_to**: RBRi - **Comment**: Hi Ganesh, HtmlUnit uses only commons-logging for all the log output. It is up to you to configure commons-logging + log4j correctly. Usually it should be sufficient to do something like ~~~ Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); ~~~ Make sure this code gets really executes and the logger is the one from commons-logging. Sometimes other configurations are overwriting your configuration. Sorry i only have this kind of hints for you.... --- ** [feature-requests:#254] Disable HtmlUnit logging** **Status:** pending **Group:** 2.19 **Created:** Thu Jun 14, 2018 04:35 AM UTC by Ganesh Prakash Barshile **Last Updated:** Thu Jun 14, 2018 04:35 AM UTC **Owner:** RBRi **Attachments:** - [Logger.png](https://sourceforge.net/p/htmlunit/feature-requests/254/attachment/Logger.png) (132.4 kB; image/png) We want to disable all logs of htmlunit unit. We tried it using log4j & commons logging but unable to do it. We tried following code:- Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF); Logger.getLogger("com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter").setLevel(Level.OFF); Logger.getLogger("com.gargoylesoftware.htmlunit.javascript.host.ActiveXObject").setLevel(Level.OFF);Logger.getLogger("com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument").setLevel(Level.OFF); Logger.getLogger("com.gargoylesoftware.htmlunit.html.HtmlScript").setLevel(Level.OFF); Logger.getLogger("com.gargoylesoftware.htmlunit.javascript.host.WindowProxy").setLevel(Level.OFF); Logger.getLogger("org.apache").setLevel(Level.OFF); Logger.getRootLogger().setLevel(Level.OFF); is there any solution to disable all logs from htmlunit? --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/feature-requests/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/feature-requests/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-06-30 12:34:05
|
- **status**: open --> pending - **assigned_to**: RBRi --- ** [bugs:#1971] Scraping ASPX pages with HtmlUnit** **Status:** pending **Group:** 2.31 **Labels:** web scraping micrsoft asp.net aspx **Created:** Fri Jun 29, 2018 08:27 PM UTC by Trevor Maliborski **Last Updated:** Sat Jun 30, 2018 12:33 PM UTC **Owner:** RBRi I'm currently trying to set up a web scraping tool for sites that present information from medical license databases. Many of the sites I've found and wish to use are .aspx sites. I haven't found much online that discusses scraping .aspx sites with HtmlUnit, and the information I have found has not been helpful. The issue I'm having is similar to that which occurs on sites with AJAX: dynamic results are attached to the DOM when they arrive, but the DOM that HtmlUnit pulls from the headless browser only contains the static elements. I've tried pausing the scraper's main thread, tried using `waitForBackgroundJavascript()`, and using more explicit waiting techniques, e.g. something like this, which is copied from the HtmlUnit site: ~~~ for (int i = 0; i < 20; i++) { if (condition_to_happen_after_js_execution) { break; } synchronized (page) { page.wait(500); } } ~~~ Here's the code I have right now for scraping one of the sites: ~~~ private static String scrapeTexasDatabase(String firstName, String lastName) { try { WebClient webClient = new WebClient(BrowserVersion.CHROME); HtmlPage homePage = webClient.getPage("https://www.bon.texas.gov/forms/apninq.asp"); HtmlTextInput firstNameField = homePage.getForms().get(1).getInputByName("firstname"); HtmlTextInput lastNameField = homePage.getForms().get(1).getInputByName("lastname"); firstNameField.setValueAttribute(firstName); lastNameField.setValueAttribute(lastName); HtmlSubmitInput searchButton = homePage.getForms().get(1).getInputByValue("Submit"); HtmlPage resultsPage = searchButton.click(); // this should be the inner text of a heading tag which includes the name of someone // from the Texas database, but instead no h2 elements are found at all String str = resultsPage.getElementsByTagName("h2").get(0).getTextContent(); return str.trim(); } catch (Exception e) { System.out.println("Caught exception: " + e); } return null; } ~~~ Searching for "Joesph Smith" on the Texas Nursing License site being used here yields a single result. After looking through the page source, I've found that an <h2> element is placed at the top of each result, a heading which holds a given license holder's name. This information is added dynamically but I still need to be able to scrape the information for each search result. Any help would be appreciated! --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-06-30 12:33:48
|
Hi Trevor, i think the user list is a better place for questions. HtmlUnit has no special code inside for aspx page and this is not needed at all (your browser also does not know what kind of server technologie is used to generate the Html). And finally you problem is really common. You can't interact with an control that is not visible (this is the same in real browsers). Have tuned your code a bit and at least with the latest HtmlUnit code this works fine. Please try and report if you still have problems. ~~~ String url = "https://www.bon.texas.gov/forms/apninq.asp"; try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60)) { final HtmlPage page = webClient.getPage(url); webClient.waitForBackgroundJavaScript(1000); // HtmlUnit does not interact with invisible elements // we have to switch the tab first HtmlAnchor nameTabAnchor = page.getAnchorByText("First & Last Name"); nameTabAnchor.click(); HtmlTextInput firstNameField = page.getForms().get(1).getInputByName("firstname"); HtmlTextInput lastNameField = page.getForms().get(1).getInputByName("lastname"); // System.out.println(firstNameField.isDisplayed()); now this is visible firstNameField.type("Joseph"); lastNameField.type("Smith"); HtmlSubmitInput searchButton = page.getForms().get(1).getInputByValue("Submit"); HtmlPage resultsPage = searchButton.click(); // this should be the inner text of a heading tag which includes the name of someone // from the Texas database, but instead no h2 elements are found at all String str = resultsPage.getElementsByTagName("h2").get(0).getTextContent(); System.out.println(str); } ~~~ Thanks for your report and thanks for using HtmlUnit. Hope it is helpful for you. --- ** [bugs:#1971] Scraping ASPX pages with HtmlUnit** **Status:** open **Group:** 2.31 **Labels:** web scraping micrsoft asp.net aspx **Created:** Fri Jun 29, 2018 08:27 PM UTC by Trevor Maliborski **Last Updated:** Sat Jun 30, 2018 12:18 PM UTC **Owner:** nobody I'm currently trying to set up a web scraping tool for sites that present information from medical license databases. Many of the sites I've found and wish to use are .aspx sites. I haven't found much online that discusses scraping .aspx sites with HtmlUnit, and the information I have found has not been helpful. The issue I'm having is similar to that which occurs on sites with AJAX: dynamic results are attached to the DOM when they arrive, but the DOM that HtmlUnit pulls from the headless browser only contains the static elements. I've tried pausing the scraper's main thread, tried using `waitForBackgroundJavascript()`, and using more explicit waiting techniques, e.g. something like this, which is copied from the HtmlUnit site: ~~~ for (int i = 0; i < 20; i++) { if (condition_to_happen_after_js_execution) { break; } synchronized (page) { page.wait(500); } } ~~~ Here's the code I have right now for scraping one of the sites: ~~~ private static String scrapeTexasDatabase(String firstName, String lastName) { try { WebClient webClient = new WebClient(BrowserVersion.CHROME); HtmlPage homePage = webClient.getPage("https://www.bon.texas.gov/forms/apninq.asp"); HtmlTextInput firstNameField = homePage.getForms().get(1).getInputByName("firstname"); HtmlTextInput lastNameField = homePage.getForms().get(1).getInputByName("lastname"); firstNameField.setValueAttribute(firstName); lastNameField.setValueAttribute(lastName); HtmlSubmitInput searchButton = homePage.getForms().get(1).getInputByValue("Submit"); HtmlPage resultsPage = searchButton.click(); // this should be the inner text of a heading tag which includes the name of someone // from the Texas database, but instead no h2 elements are found at all String str = resultsPage.getElementsByTagName("h2").get(0).getTextContent(); return str.trim(); } catch (Exception e) { System.out.println("Caught exception: " + e); } return null; } ~~~ Searching for "Joesph Smith" on the Texas Nursing License site being used here yields a single result. After looking through the page source, I've found that an <h2> element is placed at the top of each result, a heading which holds a given license holder's name. This information is added dynamically but I still need to be able to scrape the information for each search result. Any help would be appreciated! --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-06-30 12:27:06
|
Yes that is one of the nice features sourceforge has. No idea why... --- ** [bugs:#1971] Scraping ASPX pages with HtmlUnit** **Status:** open **Group:** 2.31 **Labels:** web scraping micrsoft asp.net aspx **Created:** Fri Jun 29, 2018 08:27 PM UTC by Trevor Maliborski **Last Updated:** Sat Jun 30, 2018 12:18 PM UTC **Owner:** nobody I'm currently trying to set up a web scraping tool for sites that present information from medical license databases. Many of the sites I've found and wish to use are .aspx sites. I haven't found much online that discusses scraping .aspx sites with HtmlUnit, and the information I have found has not been helpful. The issue I'm having is similar to that which occurs on sites with AJAX: dynamic results are attached to the DOM when they arrive, but the DOM that HtmlUnit pulls from the headless browser only contains the static elements. I've tried pausing the scraper's main thread, tried using `waitForBackgroundJavascript()`, and using more explicit waiting techniques, e.g. something like this, which is copied from the HtmlUnit site: ~~~ for (int i = 0; i < 20; i++) { if (condition_to_happen_after_js_execution) { break; } synchronized (page) { page.wait(500); } } ~~~ Here's the code I have right now for scraping one of the sites: ~~~ private static String scrapeTexasDatabase(String firstName, String lastName) { try { WebClient webClient = new WebClient(BrowserVersion.CHROME); HtmlPage homePage = webClient.getPage("https://www.bon.texas.gov/forms/apninq.asp"); HtmlTextInput firstNameField = homePage.getForms().get(1).getInputByName("firstname"); HtmlTextInput lastNameField = homePage.getForms().get(1).getInputByName("lastname"); firstNameField.setValueAttribute(firstName); lastNameField.setValueAttribute(lastName); HtmlSubmitInput searchButton = homePage.getForms().get(1).getInputByValue("Submit"); HtmlPage resultsPage = searchButton.click(); // this should be the inner text of a heading tag which includes the name of someone // from the Texas database, but instead no h2 elements are found at all String str = resultsPage.getElementsByTagName("h2").get(0).getTextContent(); return str.trim(); } catch (Exception e) { System.out.println("Caught exception: " + e); } return null; } ~~~ Searching for "Joesph Smith" on the Texas Nursing License site being used here yields a single result. After looking through the page source, I've found that an <h2> element is placed at the top of each result, a heading which holds a given license holder's name. This information is added dynamically but I still need to be able to scrape the information for each search result. Any help would be appreciated! --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-06-30 12:18:28
|
- Description has changed: Diff: ~~~~ --- old +++ new @@ -42,6 +42,6 @@ } ~~~ -Searching for "Joesph Smith" on the Texas Nursing License site being used here yields a single result. After looking through the page source, I've found that an <h2> element is placed at the top of each result, a heading which holds a given license holder's name. This information is added dynamically but I still need to be able to scrape the information for each search result. +Searching for "Joesph Smith" on the Texas Nursing License site being used here yields a single result. After looking through the page source, I've found that an <h2> element is placed at the top of each result, a heading which holds a given license holder's name. This information is added dynamically but I still need to be able to scrape the information for each search result. Any help would be appreciated! ~~~~ --- ** [bugs:#1971] Scraping ASPX pages with HtmlUnit** **Status:** open **Group:** 2.31 **Labels:** web scraping micrsoft asp.net aspx **Created:** Fri Jun 29, 2018 08:27 PM UTC by Trevor Maliborski **Last Updated:** Fri Jun 29, 2018 08:30 PM UTC **Owner:** nobody I'm currently trying to set up a web scraping tool for sites that present information from medical license databases. Many of the sites I've found and wish to use are .aspx sites. I haven't found much online that discusses scraping .aspx sites with HtmlUnit, and the information I have found has not been helpful. The issue I'm having is similar to that which occurs on sites with AJAX: dynamic results are attached to the DOM when they arrive, but the DOM that HtmlUnit pulls from the headless browser only contains the static elements. I've tried pausing the scraper's main thread, tried using `waitForBackgroundJavascript()`, and using more explicit waiting techniques, e.g. something like this, which is copied from the HtmlUnit site: ~~~ for (int i = 0; i < 20; i++) { if (condition_to_happen_after_js_execution) { break; } synchronized (page) { page.wait(500); } } ~~~ Here's the code I have right now for scraping one of the sites: ~~~ private static String scrapeTexasDatabase(String firstName, String lastName) { try { WebClient webClient = new WebClient(BrowserVersion.CHROME); HtmlPage homePage = webClient.getPage("https://www.bon.texas.gov/forms/apninq.asp"); HtmlTextInput firstNameField = homePage.getForms().get(1).getInputByName("firstname"); HtmlTextInput lastNameField = homePage.getForms().get(1).getInputByName("lastname"); firstNameField.setValueAttribute(firstName); lastNameField.setValueAttribute(lastName); HtmlSubmitInput searchButton = homePage.getForms().get(1).getInputByValue("Submit"); HtmlPage resultsPage = searchButton.click(); // this should be the inner text of a heading tag which includes the name of someone // from the Texas database, but instead no h2 elements are found at all String str = resultsPage.getElementsByTagName("h2").get(0).getTextContent(); return str.trim(); } catch (Exception e) { System.out.println("Caught exception: " + e); } return null; } ~~~ Searching for "Joesph Smith" on the Texas Nursing License site being used here yields a single result. After looking through the page source, I've found that an <h2> element is placed at the top of each result, a heading which holds a given license holder's name. This information is added dynamically but I still need to be able to scrape the information for each search result. Any help would be appreciated! --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: <rb...@us...> - 2018-06-30 12:07:13
|
Revision: 15421 http://sourceforge.net/p/htmlunit/code/15421 Author: rbri Date: 2018-06-30 12:06:58 +0000 (Sat, 30 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/WebKitCSSMatrix.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/file/FileSystemDirectoryEntry.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/file/FileSystemFileEntry.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/AudioBufferSourceNode.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/OfflineAudioContext.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/OscillatorNode.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/performance/PerformanceNavigationTiming.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOf.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfATest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfBTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfCTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfDTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfFTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfHTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfITest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfMTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfPTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfSTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfTTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfWTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/WebKitCSSMatrix.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/WebKitCSSMatrix.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/WebKitCSSMatrix.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -18,9 +18,9 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.EDGE; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMMatrix; /** * A JavaScript object for {@code WebKitCSSMatrix}. @@ -29,7 +29,7 @@ * @author Ronald Brill */ @JsxClass({CHROME, EDGE, FF}) -public class WebKitCSSMatrix extends SimpleScriptable { +public class WebKitCSSMatrix extends DOMMatrix { /** * Creates an instance. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/file/FileSystemDirectoryEntry.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/file/FileSystemDirectoryEntry.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/file/FileSystemDirectoryEntry.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -16,7 +16,6 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; @@ -26,7 +25,7 @@ * @author Ronald Brill */ @JsxClass(FF) -public class FileSystemDirectoryEntry extends SimpleScriptable { +public class FileSystemDirectoryEntry extends FileSystemEntry { /** * Creates a new instance. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/file/FileSystemFileEntry.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/file/FileSystemFileEntry.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/file/FileSystemFileEntry.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -16,7 +16,6 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; @@ -26,7 +25,7 @@ * @author Ronald Brill */ @JsxClass(FF) -public class FileSystemFileEntry extends SimpleScriptable { +public class FileSystemFileEntry extends FileSystemEntry { /** * Creates a new instance. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/AudioBufferSourceNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/AudioBufferSourceNode.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/AudioBufferSourceNode.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -20,14 +20,16 @@ import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; +import com.gargoylesoftware.htmlunit.javascript.host.AudioScheduledSourceNode; /** * A JavaScript object for {@code AudioBufferSourceNode}. * * @author Ahmed Ashour + * @author Ronald Brill */ @JsxClass({CHROME, FF, EDGE}) -public class AudioBufferSourceNode extends AudioNode { +public class AudioBufferSourceNode extends AudioScheduledSourceNode { /** * Creates an instance. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/OfflineAudioContext.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/OfflineAudioContext.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/OfflineAudioContext.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -25,9 +25,10 @@ * A JavaScript object for {@code OfflineAudioContext}. * * @author Ahmed Ashour + * @author Ronald Brill */ @JsxClass({CHROME, FF, EDGE}) -public class OfflineAudioContext extends AudioContext { +public class OfflineAudioContext extends BaseAudioContext { /** * Creates an instance. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/OscillatorNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/OscillatorNode.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/media/OscillatorNode.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -20,14 +20,16 @@ import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; +import com.gargoylesoftware.htmlunit.javascript.host.AudioScheduledSourceNode; /** * A JavaScript object for {@code OscillatorNode}. * * @author Ahmed Ashour + * @author Ronald Brill */ @JsxClass({CHROME, FF, EDGE}) -public class OscillatorNode extends AudioNode { +public class OscillatorNode extends AudioScheduledSourceNode { /** * Creates an instance. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/performance/PerformanceNavigationTiming.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/performance/PerformanceNavigationTiming.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/performance/PerformanceNavigationTiming.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -18,7 +18,6 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF60; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE; -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; @@ -29,7 +28,7 @@ * @author Ronald Brill */ @JsxClass({CHROME, FF60, IE}) -public class PerformanceNavigationTiming extends SimpleScriptable { +public class PerformanceNavigationTiming extends PerformanceResourceTiming { /** * Creates an instance. Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOf.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOf.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOf.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -32,6 +32,7 @@ * Tests two Host classes, if one prototype is parent of another. * * @author Ahmed Ashour + * @author Ronald Brill */ public abstract class HostParentOf extends WebDriverTestCase { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfATest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfATest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfATest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.general.huge; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.CHROME; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF52; import java.util.Collection; @@ -33,6 +34,7 @@ * This class handles all host names which starts by character 'A'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfATest extends HostParentOf { @@ -180,7 +182,7 @@ @Test @Alerts(DEFAULT = "true", IE = "false") - @NotYetImplemented({CHROME, FF52}) + @NotYetImplemented({CHROME, FF}) public void _Audio_HTMLAudioElement() throws Exception { test("Audio", "HTMLAudioElement"); } @@ -221,7 +223,7 @@ @Test @Alerts(DEFAULT = "false", FF52 = "true") - @NotYetImplemented(CHROME) + @NotYetImplemented(FF52) public void _AudioContext_OfflineAudioContext() throws Exception { test("AudioContext", "OfflineAudioContext"); } @@ -495,7 +497,6 @@ @Alerts(DEFAULT = "false", CHROME = "true", FF60 = "true") - @NotYetImplemented(CHROME) public void _AudioScheduledSourceNode_AudioBufferSourceNode() throws Exception { test("AudioScheduledSourceNode", "AudioBufferSourceNode"); } @@ -529,7 +530,6 @@ @Alerts(DEFAULT = "false", CHROME = "true", FF60 = "true") - @NotYetImplemented(CHROME) public void _AudioScheduledSourceNode_OscillatorNode() throws Exception { test("AudioScheduledSourceNode", "OscillatorNode"); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfBTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfBTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfBTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -29,6 +29,7 @@ * This class handles all host names which starts by character 'B'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfBTest extends HostParentOf { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfCTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfCTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfCTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -32,6 +32,7 @@ * This class handles all host names which starts by character 'C'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfCTest extends HostParentOf { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfDTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfDTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfDTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.general.huge; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.CHROME; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF52; import java.util.Collection; @@ -256,7 +257,6 @@ @Test @Alerts(DEFAULT = "true", IE = "false") - @NotYetImplemented({CHROME, FF52}) public void _DOMMatrix_WebKitCSSMatrix() throws Exception { test("DOMMatrix", "WebKitCSSMatrix"); } @@ -287,7 +287,6 @@ @Test @Alerts(DEFAULT = "true", IE = "false") - @NotYetImplemented({CHROME, FF52}) public void _DOMMatrixReadOnly_WebKitCSSMatrix() throws Exception { test("DOMMatrixReadOnly", "WebKitCSSMatrix"); } @@ -1938,7 +1937,7 @@ @Test @Alerts(DEFAULT = "true", IE = "false") - @NotYetImplemented({CHROME, FF52}) + @NotYetImplemented({CHROME, FF}) public void _Error_DOMException() throws Exception { test("Error", "DOMException"); } @@ -4141,7 +4140,7 @@ @Test @Alerts(DEFAULT = "false", FF = "true") - @NotYetImplemented(FF52) + @NotYetImplemented(FF) public void _EventTarget_Screen() throws Exception { test("EventTarget", "Screen"); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfFTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfFTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfFTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -14,6 +14,8 @@ */ package com.gargoylesoftware.htmlunit.general.huge; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF52; + import java.util.Collection; import org.junit.Test; @@ -22,6 +24,7 @@ import com.gargoylesoftware.htmlunit.BrowserParameterizedRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; +import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; /** * Tests two Host classes, if one prototype is parent of another. @@ -29,6 +32,7 @@ * This class handles all host names which starts by character 'F' to 'G'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfFTest extends HostParentOf { @@ -119,6 +123,7 @@ @Test @Alerts(DEFAULT = "false", FF60 = "true") + @NotYetImplemented(FF52) public void _FileSystemEntry_FileSystemDirectoryEntry() throws Exception { test("FileSystemEntry", "FileSystemDirectoryEntry"); } @@ -139,6 +144,7 @@ @Test @Alerts(DEFAULT = "false", FF60 = "true") + @NotYetImplemented(FF52) public void _FileSystemEntry_FileSystemFileEntry() throws Exception { test("FileSystemEntry", "FileSystemFileEntry"); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfHTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfHTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfHTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -33,6 +33,7 @@ * This class handles all host names which starts by character 'H'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfHTest extends HostParentOf { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfITest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfITest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfITest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -32,6 +32,7 @@ * This class handles all host names which starts by character 'I' to 'L'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfITest extends HostParentOf { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfMTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfMTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfMTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -33,6 +33,7 @@ * This class handles all host names which starts by character 'M' to 'O'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfMTest extends HostParentOf { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfPTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfPTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfPTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -16,6 +16,7 @@ import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.CHROME; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.IE; import java.util.Collection; @@ -33,6 +34,7 @@ * This class handles all host names which starts by character 'P' to 'R'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfPTest extends HostParentOf { @@ -175,7 +177,7 @@ @Alerts(DEFAULT = "false", CHROME = "true", FF60 = "true") - @NotYetImplemented(CHROME) + @NotYetImplemented(IE) public void _PerformanceEntry_PerformanceNavigationTiming() throws Exception { test("PerformanceEntry", "PerformanceNavigationTiming"); } @@ -262,7 +264,7 @@ @Alerts(DEFAULT = "false", CHROME = "true", FF60 = "true") - @NotYetImplemented(CHROME) + @NotYetImplemented(IE) public void _PerformanceResourceTiming_PerformanceNavigationTiming() throws Exception { test("PerformanceResourceTiming", "PerformanceNavigationTiming"); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfSTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfSTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfSTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -16,6 +16,7 @@ import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.CHROME; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF60; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.IE; import java.util.Collection; @@ -34,6 +35,7 @@ * This class handles all host names which starts by character 'S'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfSTest extends HostParentOf { @@ -1585,6 +1587,7 @@ @Test @Alerts(DEFAULT = "false", CHROME = "true") + @NotYetImplemented(FF60) public void _SVGGeometryElement_SVGCircleElement() throws Exception { test("SVGGeometryElement", "SVGCircleElement"); } @@ -1595,6 +1598,7 @@ @Test @Alerts(DEFAULT = "false", CHROME = "true") + @NotYetImplemented(FF60) public void _SVGGeometryElement_SVGEllipseElement() throws Exception { test("SVGGeometryElement", "SVGEllipseElement"); } @@ -1616,6 +1620,7 @@ @Test @Alerts(DEFAULT = "false", CHROME = "true") + @NotYetImplemented(FF60) public void _SVGGeometryElement_SVGLineElement() throws Exception { test("SVGGeometryElement", "SVGLineElement"); } @@ -1637,6 +1642,7 @@ @Test @Alerts(DEFAULT = "false", CHROME = "true") + @NotYetImplemented(FF60) public void _SVGGeometryElement_SVGPolygonElement() throws Exception { test("SVGGeometryElement", "SVGPolygonElement"); } @@ -1647,6 +1653,7 @@ @Test @Alerts(DEFAULT = "false", CHROME = "true") + @NotYetImplemented(FF60) public void _SVGGeometryElement_SVGPolylineElement() throws Exception { test("SVGGeometryElement", "SVGPolylineElement"); } @@ -1657,6 +1664,7 @@ @Test @Alerts(DEFAULT = "false", CHROME = "true") + @NotYetImplemented(FF60) public void _SVGGeometryElement_SVGRectElement() throws Exception { test("SVGGeometryElement", "SVGRectElement"); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfTTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfTTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfTTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -29,6 +29,7 @@ * This class handles all host names which starts by character 'T' to 'V'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfTTest extends HostParentOf { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfWTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfWTest.java 2018-06-30 11:31:19 UTC (rev 15420) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/HostParentOfWTest.java 2018-06-30 12:06:58 UTC (rev 15421) @@ -33,6 +33,7 @@ * This class handles all host names which starts by character 'W' to 'Z'. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserParameterizedRunner.class) public class HostParentOfWTest extends HostParentOf { |
From: <rb...@us...> - 2018-06-30 11:31:22
|
Revision: 15420 http://sourceforge.net/p/htmlunit/code/15420 Author: rbri Date: 2018-06-30 11:31:19 +0000 (Sat, 30 Jun 2018) Log Message: ----------- Correct handling of additional parameters provided in functions setTimeout/setInterval. Modified Paths: -------------- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java 2018-06-29 20:48:01 UTC (rev 15419) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java 2018-06-30 11:31:19 UTC (rev 15420) @@ -1369,7 +1369,6 @@ */ @Test @Alerts({"number", "done", "42"}) - @NotYetImplemented public void setTimeoutWithParams() throws Exception { final String html = "<html>\n" + "<head>\n" @@ -1399,8 +1398,38 @@ * @throws Exception if an error occurs */ @Test - @Alerts({"true", "done 2"}) - @NotYetImplemented + @Alerts({"done 2", "7"}) + public void setTimeoutCode() throws Exception { + final String html = "<html>\n" + + "<head>\n" + + " <script>\n" + + " function test() {\n" + + " try{\n" + + " var id = window.setTimeout('log(7)');\n" + + " log('done 2');\n" + + " } catch(e) { log(e); }\n" + + " }\n" + + "\n" + + " function log(x) {\n" + + " document.getElementById('log').value += x + '\\n';\n" + + " }\n" + + "</script></head>\n" + + "<body onload='test()'>\n" + + " <textarea id='log' cols='80' rows='40'></textarea>\n" + + "</body>\n" + + "</html>\n"; + + final WebDriver driver = loadPage2(html); + Thread.sleep(200); + final String text = driver.findElement(By.id("log")).getAttribute("value").trim().replaceAll("\r", ""); + assertEquals(String.join("\n", getExpectedAlerts()), text); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts("true") public void setTimeoutWrongParams() throws Exception { final String html = "<html>\n" + "<head>\n" @@ -1410,11 +1439,6 @@ + " window.setTimeout();\n" + " log('done');\n" + " } catch(e) { log(e instanceof TypeError); }\n" - // TypeError: Failed to execute 'setTimeout' on 'Window': 1 argument required, but only 0 present. - + " try{\n" - + " window.setTimeout('100');\n" - + " log('done 2');\n" - + " } catch(e) { log(e); }\n" + " }\n" + "\n" + " function log(x) {\n" @@ -1465,9 +1489,168 @@ } /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"number", "done", "result"}) + public void setInterval() throws Exception { + final String html = "<html>\n" + + "<head>\n" + + " <script>\n" + + " var id;\n" + + " function test() {\n" + + " id = window.setInterval( function() { log('result'); clearInterval(id); }, 20);\n" + + " log(typeof id);\n" + + " log('done');\n" + + " }\n" + + "\n" + + " function log(x) {\n" + + " document.getElementById('log').value += x + '\\n';\n" + + " }\n" + + "</script></head>\n" + + "<body onload='test()'>\n" + + " <textarea id='log' cols='80' rows='40'></textarea>\n" + + "</body>\n" + + "</html>\n"; + + final WebDriver driver = loadPage2(html); + Thread.sleep(200); + final String text = driver.findElement(By.id("log")).getAttribute("value").trim().replaceAll("\r", ""); + assertEquals(String.join("\n", getExpectedAlerts()), text); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"number", "done", "42"}) + public void setIntervalWithParams() throws Exception { + final String html = "<html>\n" + + "<head>\n" + + " <script>\n" + + " var id;\n" + + " function test() {\n" + + " id = window.setInterval( function(p1) { log(p1); clearInterval(id); }, 20, 42);\n" + + " log(typeof id);\n" + + " log('done');\n" + + " }\n" + + "\n" + + " function log(x) {\n" + + " document.getElementById('log').value += x + '\\n';\n" + + " }\n" + + "</script></head>\n" + + "<body onload='test()'>\n" + + " <textarea id='log' cols='80' rows='40'></textarea>\n" + + "</body>\n" + + "</html>\n"; + + final WebDriver driver = loadPage2(html); + Thread.sleep(200); + final String text = driver.findElement(By.id("log")).getAttribute("value").trim().replaceAll("\r", ""); + assertEquals(String.join("\n", getExpectedAlerts()), text); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts({"done 2", "7"}) + public void setIntervalCode() throws Exception { + final String html = "<html>\n" + + "<head>\n" + + " <script>\n" + + " var id;\n" + + " function test() {\n" + + " try{\n" + + " id = window.setInterval('log(7); clearInterval(id);' );\n" + + " log('done 2');\n" + + " } catch(e) { log(e); }\n" + + " }\n" + + "\n" + + " function log(x) {\n" + + " document.getElementById('log').value += x + '\\n';\n" + + " }\n" + + "</script></head>\n" + + "<body onload='test()'>\n" + + " <textarea id='log' cols='80' rows='40'></textarea>\n" + + "</body>\n" + + "</html>\n"; + + final WebDriver driver = loadPage2(html); + Thread.sleep(200); + final String text = driver.findElement(By.id("log")).getAttribute("value").trim().replaceAll("\r", ""); + assertEquals(String.join("\n", getExpectedAlerts()), text); + } + + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts("true") + public void setIntervalWrongParams() throws Exception { + final String html = "<html>\n" + + "<head>\n" + + " <script>\n" + + " function test() {\n" + + " try{\n" + + " window.setInterval();\n" + + " log('done');\n" + + " } catch(e) { log(e instanceof TypeError); }\n" + + " }\n" + + "\n" + + " function log(x) {\n" + + " document.getElementById('log').value += x + '\\n';\n" + + " }\n" + + "</script></head>\n" + + "<body onload='test()'>\n" + + " <textarea id='log' cols='80' rows='40'></textarea>\n" + + "</body>\n" + + "</html>\n"; + + final WebDriver driver = loadPage2(html); + Thread.sleep(200); + final String text = driver.findElement(By.id("log")).getAttribute("value").trim().replaceAll("\r", ""); + assertEquals(String.join("\n", getExpectedAlerts()), text); + } + + /** + * As of 19.02.2013, a task started by setInterval in an event handler could be executed before + * all events handlers have been executed due to a missing synchronization. * @throws Exception if the test fails */ @Test + public void setIntervalShouldNotBeExecutedBeforeHandlers() throws Exception { + final String html + = "<html><body><script>\n" + + "var id;\n" + + "function stop() {\n" + + " window.stopIt = true;\n" + + " clearInterval(id);\n" + + "}\n" + + "for (var i = 0; i < 1000; i++) {\n" + + " var handler = function(e) {\n" + + " if (window.stopIt) {\n" + + " e.preventDefault ? e.preventDefault() : e.returnValue = false;\n" + + " }\n" + + " }\n" + + " window.addEventListener('click', handler, false);\n" + + "}\n" + + "</script>\n" + + "<form action='page2' method='post'>\n" + + "<input id='it' type='submit' onclick='id = setInterval(stop, 0)'>\n" + + "</form>\n" + + "</body></html>"; + + final WebDriver driver = loadPage2(html); + driver.findElement(By.id("it")).click(); + + assertEquals(URL_FIRST + "page2", driver.getCurrentUrl()); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts({"true", "null"}) public void onchange_noHandler() throws Exception { final String html |
From: <rb...@us...> - 2018-06-29 20:48:05
|
Revision: 15419 http://sourceforge.net/p/htmlunit/code/15419 Author: rbri Date: 2018-06-29 20:48:01 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/ElementClosesElementTest.java Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/ElementClosesElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/ElementClosesElementTest.java 2018-06-29 19:51:23 UTC (rev 15418) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/huge/ElementClosesElementTest.java 2018-06-29 20:48:01 UTC (rev 15419) @@ -17,6 +17,8 @@ import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.CHROME; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.EDGE; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF52; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF60; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.IE; import java.util.ArrayList; @@ -235,7 +237,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _a_isindex() throws Exception { test("a", "isindex"); } @@ -419,7 +421,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _abbr_isindex() throws Exception { test("abbr", "isindex"); } @@ -603,7 +605,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _acronym_isindex() throws Exception { test("acronym", "isindex"); } @@ -787,7 +789,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _address_isindex() throws Exception { test("address", "isindex"); } @@ -971,7 +973,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _applet_isindex() throws Exception { test("applet", "isindex"); } @@ -2415,7 +2417,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _article_isindex() throws Exception { test("article", "isindex"); } @@ -2599,7 +2601,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _aside_isindex() throws Exception { test("aside", "isindex"); } @@ -2783,7 +2785,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _audio_isindex() throws Exception { test("audio", "isindex"); } @@ -2967,7 +2969,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _b_isindex() throws Exception { test("b", "isindex"); } @@ -5671,7 +5673,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _bdi_isindex() throws Exception { test("bdi", "isindex"); } @@ -5855,7 +5857,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _bdo_isindex() throws Exception { test("bdo", "isindex"); } @@ -7299,7 +7301,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _big_isindex() throws Exception { test("big", "isindex"); } @@ -7483,7 +7485,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _blink_isindex() throws Exception { test("blink", "isindex"); } @@ -7667,7 +7669,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _blockquote_isindex() throws Exception { test("blockquote", "isindex"); } @@ -8283,7 +8285,7 @@ @Alerts(DEFAULT = "3", CHROME = "2", FF60 = "2") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _body_isindex() throws Exception { test("body", "isindex"); } @@ -10267,7 +10269,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _button_isindex() throws Exception { test("button", "isindex"); } @@ -10451,7 +10453,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _canvas_isindex() throws Exception { test("canvas", "isindex"); } @@ -11896,7 +11898,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _center_isindex() throws Exception { test("center", "isindex"); } @@ -12080,7 +12082,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _cite_isindex() throws Exception { test("cite", "isindex"); } @@ -12264,7 +12266,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _code_isindex() throws Exception { test("code", "isindex"); } @@ -15540,7 +15542,7 @@ @Alerts(DEFAULT = "0", FF52 = "2", FF60 = "1") - @NotYetImplemented({FF, EDGE}) + @NotYetImplemented({FF52, EDGE}) public void _command_isindex() throws Exception { test("command", "isindex"); } @@ -16373,7 +16375,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _content_isindex() throws Exception { test("content", "isindex"); } @@ -16557,7 +16559,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _data_isindex() throws Exception { test("data", "isindex"); } @@ -16741,7 +16743,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _datalist_isindex() throws Exception { test("datalist", "isindex"); } @@ -16943,7 +16945,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _dd_isindex() throws Exception { test("dd", "isindex"); } @@ -17127,7 +17129,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _del_isindex() throws Exception { test("del", "isindex"); } @@ -17311,7 +17313,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _details_isindex() throws Exception { test("details", "isindex"); } @@ -17495,7 +17497,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _dfn_isindex() throws Exception { test("dfn", "isindex"); } @@ -17679,7 +17681,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _dialog_isindex() throws Exception { test("dialog", "isindex"); } @@ -17863,7 +17865,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _dir_isindex() throws Exception { test("dir", "isindex"); } @@ -18047,7 +18049,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _div_isindex() throws Exception { test("div", "isindex"); } @@ -18231,7 +18233,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _dl_isindex() throws Exception { test("dl", "isindex"); } @@ -18433,7 +18435,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _dt_isindex() throws Exception { test("dt", "isindex"); } @@ -18617,7 +18619,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _em_isindex() throws Exception { test("em", "isindex"); } @@ -20062,7 +20064,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _fieldset_isindex() throws Exception { test("fieldset", "isindex"); } @@ -20246,7 +20248,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _figcaption_isindex() throws Exception { test("figcaption", "isindex"); } @@ -20430,7 +20432,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _figure_isindex() throws Exception { test("figure", "isindex"); } @@ -20614,7 +20616,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _font_isindex() throws Exception { test("font", "isindex"); } @@ -20798,7 +20800,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _footer_isindex() throws Exception { test("footer", "isindex"); } @@ -23730,7 +23732,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _h1_isindex() throws Exception { test("h1", "isindex"); } @@ -23968,7 +23970,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _h2_isindex() throws Exception { test("h2", "isindex"); } @@ -24206,7 +24208,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _h3_isindex() throws Exception { test("h3", "isindex"); } @@ -24444,7 +24446,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _h4_isindex() throws Exception { test("h4", "isindex"); } @@ -24682,7 +24684,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _h5_isindex() throws Exception { test("h5", "isindex"); } @@ -24920,7 +24922,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _h6_isindex() throws Exception { test("h6", "isindex"); } @@ -26365,7 +26367,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _header_isindex() throws Exception { test("header", "isindex"); } @@ -29071,7 +29073,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _i_isindex() throws Exception { test("i", "isindex"); } @@ -33038,7 +33040,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _ins_isindex() throws Exception { test("ins", "isindex"); } @@ -33122,7 +33124,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_a() throws Exception { test("isindex", "a"); } @@ -33134,7 +33136,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_abbr() throws Exception { test("isindex", "abbr"); } @@ -33146,7 +33148,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_acronym() throws Exception { test("isindex", "acronym"); } @@ -33158,7 +33160,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_address() throws Exception { test("isindex", "address"); } @@ -33170,7 +33172,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_applet() throws Exception { test("isindex", "applet"); } @@ -33182,7 +33184,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_area() throws Exception { test("isindex", "area"); } @@ -33194,7 +33196,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_article() throws Exception { test("isindex", "article"); } @@ -33206,7 +33208,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_aside() throws Exception { test("isindex", "aside"); } @@ -33218,7 +33220,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_audio() throws Exception { test("isindex", "audio"); } @@ -33230,7 +33232,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_b() throws Exception { test("isindex", "b"); } @@ -33242,7 +33244,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_base() throws Exception { test("isindex", "base"); } @@ -33254,7 +33256,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_basefont() throws Exception { test("isindex", "basefont"); } @@ -33266,7 +33268,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_bdi() throws Exception { test("isindex", "bdi"); } @@ -33278,7 +33280,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_bdo() throws Exception { test("isindex", "bdo"); } @@ -33290,7 +33292,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_bgsound() throws Exception { test("isindex", "bgsound"); } @@ -33302,7 +33304,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_big() throws Exception { test("isindex", "big"); } @@ -33314,7 +33316,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_blink() throws Exception { test("isindex", "blink"); } @@ -33326,7 +33328,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_blockquote() throws Exception { test("isindex", "blockquote"); } @@ -33338,7 +33340,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_body() throws Exception { test("isindex", "body"); } @@ -33350,7 +33352,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_br() throws Exception { test("isindex", "br"); } @@ -33362,7 +33364,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_button() throws Exception { test("isindex", "button"); } @@ -33374,7 +33376,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_canvas() throws Exception { test("isindex", "canvas"); } @@ -33386,7 +33388,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_caption() throws Exception { test("isindex", "caption"); } @@ -33398,7 +33400,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_center() throws Exception { test("isindex", "center"); } @@ -33410,7 +33412,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_cite() throws Exception { test("isindex", "cite"); } @@ -33422,7 +33424,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_code() throws Exception { test("isindex", "code"); } @@ -33434,7 +33436,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_col() throws Exception { test("isindex", "col"); } @@ -33446,7 +33448,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_colgroup() throws Exception { test("isindex", "colgroup"); } @@ -33458,7 +33460,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_command() throws Exception { test("isindex", "command"); } @@ -33470,7 +33472,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_content() throws Exception { test("isindex", "content"); } @@ -33482,7 +33484,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_data() throws Exception { test("isindex", "data"); } @@ -33494,7 +33496,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_datalist() throws Exception { test("isindex", "datalist"); } @@ -33506,7 +33508,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_dd() throws Exception { test("isindex", "dd"); } @@ -33518,7 +33520,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_del() throws Exception { test("isindex", "del"); } @@ -33530,7 +33532,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_details() throws Exception { test("isindex", "details"); } @@ -33542,7 +33544,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_dfn() throws Exception { test("isindex", "dfn"); } @@ -33554,7 +33556,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_dialog() throws Exception { test("isindex", "dialog"); } @@ -33566,7 +33568,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_dir() throws Exception { test("isindex", "dir"); } @@ -33578,7 +33580,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_div() throws Exception { test("isindex", "div"); } @@ -33590,7 +33592,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_dl() throws Exception { test("isindex", "dl"); } @@ -33602,7 +33604,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_dt() throws Exception { test("isindex", "dt"); } @@ -33614,7 +33616,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_em() throws Exception { test("isindex", "em"); } @@ -33626,7 +33628,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_embed() throws Exception { test("isindex", "embed"); } @@ -33638,7 +33640,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_fieldset() throws Exception { test("isindex", "fieldset"); } @@ -33650,7 +33652,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_figcaption() throws Exception { test("isindex", "figcaption"); } @@ -33662,7 +33664,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_figure() throws Exception { test("isindex", "figure"); } @@ -33674,7 +33676,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_font() throws Exception { test("isindex", "font"); } @@ -33686,7 +33688,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_footer() throws Exception { test("isindex", "footer"); } @@ -33698,7 +33700,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_form() throws Exception { test("isindex", "form"); } @@ -33710,7 +33712,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_frame() throws Exception { test("isindex", "frame"); } @@ -33722,7 +33724,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_frameset() throws Exception { test("isindex", "frameset"); } @@ -33734,7 +33736,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_h1() throws Exception { test("isindex", "h1"); } @@ -33746,7 +33748,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_h2() throws Exception { test("isindex", "h2"); } @@ -33758,7 +33760,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_h3() throws Exception { test("isindex", "h3"); } @@ -33770,7 +33772,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_h4() throws Exception { test("isindex", "h4"); } @@ -33782,7 +33784,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_h5() throws Exception { test("isindex", "h5"); } @@ -33794,7 +33796,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_h6() throws Exception { test("isindex", "h6"); } @@ -33806,7 +33808,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_head() throws Exception { test("isindex", "head"); } @@ -33818,7 +33820,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_header() throws Exception { test("isindex", "header"); } @@ -33830,7 +33832,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_hr() throws Exception { test("isindex", "hr"); } @@ -33842,7 +33844,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_html() throws Exception { test("isindex", "html"); } @@ -33854,7 +33856,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_i() throws Exception { test("isindex", "i"); } @@ -33866,7 +33868,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_iframe() throws Exception { test("isindex", "iframe"); } @@ -33878,7 +33880,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_image() throws Exception { test("isindex", "image"); } @@ -33890,7 +33892,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_img() throws Exception { test("isindex", "img"); } @@ -33902,7 +33904,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_input() throws Exception { test("isindex", "input"); } @@ -33914,7 +33916,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_ins() throws Exception { test("isindex", "ins"); } @@ -33937,7 +33939,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_kbd() throws Exception { test("isindex", "kbd"); } @@ -33949,7 +33951,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_keygen() throws Exception { test("isindex", "keygen"); } @@ -33961,7 +33963,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_label() throws Exception { test("isindex", "label"); } @@ -33973,7 +33975,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_layer() throws Exception { test("isindex", "layer"); } @@ -33985,7 +33987,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_legend() throws Exception { test("isindex", "legend"); } @@ -33997,7 +33999,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_li() throws Exception { test("isindex", "li"); } @@ -34009,7 +34011,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_link() throws Exception { test("isindex", "link"); } @@ -34021,7 +34023,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_listing() throws Exception { test("isindex", "listing"); } @@ -34033,7 +34035,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_main() throws Exception { test("isindex", "main"); } @@ -34045,7 +34047,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_map() throws Exception { test("isindex", "map"); } @@ -34057,7 +34059,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_mark() throws Exception { test("isindex", "mark"); } @@ -34069,7 +34071,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_marquee() throws Exception { test("isindex", "marquee"); } @@ -34081,7 +34083,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_menu() throws Exception { test("isindex", "menu"); } @@ -34093,7 +34095,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_menuitem() throws Exception { test("isindex", "menuitem"); } @@ -34105,7 +34107,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_meta() throws Exception { test("isindex", "meta"); } @@ -34117,7 +34119,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_meter() throws Exception { test("isindex", "meter"); } @@ -34129,7 +34131,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_multicol() throws Exception { test("isindex", "multicol"); } @@ -34141,7 +34143,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_nav() throws Exception { test("isindex", "nav"); } @@ -34153,7 +34155,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_nextid() throws Exception { test("isindex", "nextid"); } @@ -34165,7 +34167,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_nobr() throws Exception { test("isindex", "nobr"); } @@ -34177,7 +34179,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_noembed() throws Exception { test("isindex", "noembed"); } @@ -34189,7 +34191,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_noframes() throws Exception { test("isindex", "noframes"); } @@ -34201,7 +34203,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_nolayer() throws Exception { test("isindex", "nolayer"); } @@ -34213,7 +34215,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_noscript() throws Exception { test("isindex", "noscript"); } @@ -34225,7 +34227,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_object() throws Exception { test("isindex", "object"); } @@ -34237,7 +34239,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_ol() throws Exception { test("isindex", "ol"); } @@ -34249,7 +34251,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_optgroup() throws Exception { test("isindex", "optgroup"); } @@ -34261,7 +34263,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_option() throws Exception { test("isindex", "option"); } @@ -34273,7 +34275,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_output() throws Exception { test("isindex", "output"); } @@ -34285,7 +34287,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_p() throws Exception { test("isindex", "p"); } @@ -34297,7 +34299,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_param() throws Exception { test("isindex", "param"); } @@ -34309,7 +34311,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_picture() throws Exception { test("isindex", "picture"); } @@ -34321,7 +34323,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _isindex_plaintext() throws Exception { test("isindex", "plaintext"); } @@ -34333,7 +34335,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_pre() throws Exception { test("isindex", "pre"); } @@ -34345,7 +34347,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_progress() throws Exception { test("isindex", "progress"); } @@ -34357,7 +34359,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_q() throws Exception { test("isindex", "q"); } @@ -34369,7 +34371,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_rp() throws Exception { test("isindex", "rp"); } @@ -34381,7 +34383,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_rt() throws Exception { test("isindex", "rt"); } @@ -34393,7 +34395,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_ruby() throws Exception { test("isindex", "ruby"); } @@ -34405,7 +34407,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_s() throws Exception { test("isindex", "s"); } @@ -34417,7 +34419,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_samp() throws Exception { test("isindex", "samp"); } @@ -34429,7 +34431,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_script() throws Exception { test("isindex", "script"); } @@ -34441,7 +34443,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_section() throws Exception { test("isindex", "section"); } @@ -34453,7 +34455,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_select() throws Exception { test("isindex", "select"); } @@ -34465,7 +34467,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _isindex_slot() throws Exception { test("isindex", "slot"); } @@ -34477,7 +34479,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_small() throws Exception { test("isindex", "small"); } @@ -34489,7 +34491,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_source() throws Exception { test("isindex", "source"); } @@ -34501,7 +34503,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_span() throws Exception { test("isindex", "span"); } @@ -34513,7 +34515,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_strike() throws Exception { test("isindex", "strike"); } @@ -34525,7 +34527,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_strong() throws Exception { test("isindex", "strong"); } @@ -34537,7 +34539,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_style() throws Exception { test("isindex", "style"); } @@ -34549,7 +34551,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_sub() throws Exception { test("isindex", "sub"); } @@ -34561,7 +34563,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_summary() throws Exception { test("isindex", "summary"); } @@ -34573,7 +34575,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_sup() throws Exception { test("isindex", "sup"); } @@ -34585,7 +34587,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_table() throws Exception { test("isindex", "table"); } @@ -34597,7 +34599,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_tbody() throws Exception { test("isindex", "tbody"); } @@ -34609,7 +34611,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_td() throws Exception { test("isindex", "td"); } @@ -34621,7 +34623,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_template() throws Exception { test("isindex", "template"); } @@ -34633,7 +34635,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_textarea() throws Exception { test("isindex", "textarea"); } @@ -34645,7 +34647,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_tfoot() throws Exception { test("isindex", "tfoot"); } @@ -34657,7 +34659,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_th() throws Exception { test("isindex", "th"); } @@ -34669,7 +34671,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_thead() throws Exception { test("isindex", "thead"); } @@ -34681,7 +34683,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_time() throws Exception { test("isindex", "time"); } @@ -34693,7 +34695,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_title() throws Exception { test("isindex", "title"); } @@ -34705,7 +34707,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_tr() throws Exception { test("isindex", "tr"); } @@ -34717,7 +34719,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_track() throws Exception { test("isindex", "track"); } @@ -34729,7 +34731,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_tt() throws Exception { test("isindex", "tt"); } @@ -34741,7 +34743,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_u() throws Exception { test("isindex", "u"); } @@ -34753,7 +34755,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_ul() throws Exception { test("isindex", "ul"); } @@ -34765,7 +34767,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_var() throws Exception { test("isindex", "var"); } @@ -34777,7 +34779,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_video() throws Exception { test("isindex", "video"); } @@ -34789,7 +34791,7 @@ @Alerts(DEFAULT = "0", CHROME = "2", FF60 = "2") - @NotYetImplemented({IE, FF, EDGE}) + @NotYetImplemented({IE, FF52, EDGE}) public void _isindex_wbr() throws Exception { test("isindex", "wbr"); } @@ -34801,7 +34803,7 @@ @Alerts(DEFAULT = "0", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE, EDGE}) + @NotYetImplemented({FF52, IE, EDGE}) public void _isindex_xmp() throws Exception { test("isindex", "xmp"); } @@ -34913,7 +34915,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _kbd_isindex() throws Exception { test("kbd", "isindex"); } @@ -36498,7 +36500,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _label_isindex() throws Exception { test("label", "isindex"); } @@ -36682,7 +36684,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _layer_isindex() throws Exception { test("layer", "isindex"); } @@ -36866,7 +36868,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _legend_isindex() throws Exception { test("legend", "isindex"); } @@ -37050,7 +37052,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _li_isindex() throws Exception { test("li", "isindex"); } @@ -38504,7 +38506,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _listing_isindex() throws Exception { test("listing", "isindex"); } @@ -38688,7 +38690,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _main_isindex() throws Exception { test("main", "isindex"); } @@ -38872,7 +38874,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _map_isindex() throws Exception { test("map", "isindex"); } @@ -39056,7 +39058,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _mark_isindex() throws Exception { test("mark", "isindex"); } @@ -39240,7 +39242,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _marquee_isindex() throws Exception { test("marquee", "isindex"); } @@ -39424,7 +39426,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _menu_isindex() throws Exception { test("menu", "isindex"); } @@ -39608,7 +39610,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _menuitem_isindex() throws Exception { test("menuitem", "isindex"); } @@ -41053,7 +41055,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _meter_isindex() throws Exception { test("meter", "isindex"); } @@ -41237,7 +41239,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _multicol_isindex() throws Exception { test("multicol", "isindex"); } @@ -41421,7 +41423,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _nav_isindex() throws Exception { test("nav", "isindex"); } @@ -41605,7 +41607,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _nextid_isindex() throws Exception { test("nextid", "isindex"); } @@ -41789,7 +41791,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _nobr_isindex() throws Exception { test("nobr", "isindex"); } @@ -42172,7 +42174,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _nolayer_isindex() throws Exception { test("nolayer", "isindex"); } @@ -42356,7 +42358,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _object_isindex() throws Exception { test("object", "isindex"); } @@ -42540,7 +42542,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({IE, FF}) + @NotYetImplemented({IE, FF52}) public void _ol_isindex() throws Exception { test("ol", "isindex"); } @@ -42724,7 +42726,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _optgroup_isindex() throws Exception { test("optgroup", "isindex"); } @@ -42908,7 +42910,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _option_isindex() throws Exception { test("option", "isindex"); } @@ -43110,7 +43112,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _output_isindex() throws Exception { test("output", "isindex"); } @@ -43312,6 +43314,7 @@ @Test @Alerts(DEFAULT = "1", FF60 = "0") + @NotYetImplemented(FF60) public void _p_dialog() throws Exception { test("p", "dialog"); } @@ -45076,7 +45079,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _picture_isindex() throws Exception { test("picture", "isindex"); } @@ -45261,7 +45264,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _pre_isindex() throws Exception { test("pre", "isindex"); } @@ -45446,7 +45449,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYetImplemented({FF52, IE}) public void _progress_isindex() throws Exception { test("progress", "isindex"); } @@ -45631,7 +45634,7 @@ @Alerts(DEFAULT = "2", CHROME = "1", FF60 = "1") - @NotYetImplemented({FF, IE}) + @NotYet... [truncated message content] |
From: RBRi <rb...@us...> - 2018-06-29 19:53:51
|
- **status**: accepted --> closed - **Comment**: Hi Atsushi, many thanks for your detailed error report and the patch. Have implemented this now (similar to your impl). BTW there was already a test case for this marked as NYI. Sorry for the long delay but i was busy with the FF60 update (and my real work also). If FF60 is ready i will post a new release. Again thanks for the report and for using HtmlUnit. --- ** [bugs:#1966] setTimeout/setInterval() does not honour [param1, param2, ...] argument** **Status:** closed **Group:** 2.31 **Created:** Tue Jun 05, 2018 02:47 PM UTC by Atsushi Nakagawa **Last Updated:** Fri Jun 29, 2018 05:39 PM UTC **Owner:** RBRi ## Problem in brief HtmlUnit 2.31's `window.setTimeout()` and `window.setInterval()` do not honour the `[param1, param2, ...]` part of their respective definitions[1][2]: ``` var timeoutID = scope.setTimeout(function[, delay[, param1, param2, ...]]); var intervalID = scope.setInterval(func, delay[, param1, param2, ...]); ``` [1] https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout [2] https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval To be precise, it appears to be implementing this *"`language`"* parameter instead[3][4]. [3] https://sourceforge.net/p/htmlunit/code/15299/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java#l493 [4] https://sourceforge.net/p/htmlunit/code/15299/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java#l1500 This *`language`* parameter appears to be an outdated parameter from MSIE's DHTML era. Other than that I've found find very little documentation[5][6][7]. [5] [https://msdn.microsoft.com/en-us/ie/ms536749(v=vs.94)](https://msdn.microsoft.com/en-us/ie/ms536749(v=vs.94)) [6] https://msdn.microsoft.com/ja-jp/library/cc428172.aspx [7] https://blogs.msdn.microsoft.com/irenak/2007/03/20/sysk-310-the-difference-between-setinterval-and-settimeout/ ## Code to reproduce ```html <!DOCTYPE html> <html> <head> <script type="text/javascript"> function test() { setTimeout(function (x, y) { console.log("setTimeout(x = " + x + ", y = " + y + ")") }, 1, "abc", 123) var intervalID = setInterval(function (x, y) { console.log("setInterval(x = " + x + ", y = " + y + ")") clearInterval(intervalID) }, 1, "def", 456) } </script> </head> <body> <input type="button" onclick="test()" value="test"/> </body> </html> ``` Major browsers, including IE 11, prints: ``` setTimeout(x = abc, y = 123) setInterval(x = def, y = 456) ``` HtmlUnit 2.31 prints: ``` setTimeout(x = undefined, y = undefined) setInterval(x = undefined, y = undefined) ``` --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: <rb...@us...> - 2018-06-29 19:51:30
|
Revision: 15418 http://sourceforge.net/p/htmlunit/code/15418 Author: rbri Date: 2018-06-29 19:51:23 +0000 (Fri, 29 Jun 2018) Log Message: ----------- Correct handling of additional parameters provided in functions setTimeout/setInterval. Issue 1966 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/background/BackgroundJavaScriptFactory.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/background/JavaScriptFunctionJob.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2018-06-29 17:33:58 UTC (rev 15417) +++ trunk/htmlunit/src/changes/changes.xml 2018-06-29 19:51:23 UTC (rev 15418) @@ -14,6 +14,9 @@ <action type="remove" dev="rbri"> FF45 support removed. </action> + <action type="fix" dev="rbri" issue="1966" due-to="Atsushi Nakagawa"> + Correct handling of additional parameters provided in functions setTimeout/setInterval. + </action> <action type="fix" dev="rbri" issue="1964"> NPE in HtmlTextArea.removeFocus(). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/background/BackgroundJavaScriptFactory.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/background/BackgroundJavaScriptFactory.java 2018-06-29 17:33:58 UTC (rev 15417) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/background/BackgroundJavaScriptFactory.java 2018-06-29 19:51:23 UTC (rev 15418) @@ -28,6 +28,7 @@ * JavaScript engine. * * @author Ronald Brill + * @author Atsushi Nakagawa */ public class BackgroundJavaScriptFactory { @@ -73,13 +74,14 @@ * @param label the label for the job * @param window the window to which the job belongs * @param function the JavaScript code to execute + * @param args the arguments to pass into the function call * * @return JavaScriptJob the created job */ public JavaScriptFunctionJob createJavaScriptJob(final int initialDelay, final Integer period, final String label, - final WebWindow window, final Function function) { - return new JavaScriptFunctionJob(initialDelay, period, label, window, function); + final WebWindow window, final Function function, final Object[] args) { + return new JavaScriptFunctionJob(initialDelay, period, label, window, function, args); } /** Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/background/JavaScriptFunctionJob.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/background/JavaScriptFunctionJob.java 2018-06-29 17:33:58 UTC (rev 15417) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/background/JavaScriptFunctionJob.java 2018-06-29 19:51:23 UTC (rev 15418) @@ -24,11 +24,14 @@ /** * A {@link JavaScriptJob} created from a {@link Function} object. * @author Brad Clarke + * @author Ronald Brill + * @author Atsushi Nakagawa */ class JavaScriptFunctionJob extends JavaScriptExecutionJob { /** The JavaScript code to execute. */ private final Function function_; + private final Object[] args_; /** * Creates a new JavaScript execution job, where the JavaScript code to execute is a function. @@ -37,11 +40,13 @@ * @param label the label for the job * @param window the window to which the job belongs * @param function the JavaScript code to execute + * @param args the arguments to pass into the function call */ JavaScriptFunctionJob(final int initialDelay, final Integer period, final String label, - final WebWindow window, final Function function) { + final WebWindow window, final Function function, final Object[] args) { super(initialDelay, period, label, window); function_ = function; + args_ = args; } /** {@inheritDoc} */ @@ -49,7 +54,7 @@ protected void runJavaScript(final HtmlPage page) { final DomElement doc = page.getDocumentElement(); final Scriptable scriptable = page.getEnclosingWindow().getScriptableObject(); - page.executeJavaScriptFunction(function_, scriptable, new Object[0], doc); + page.executeJavaScriptFunction(function_, scriptable, args_, doc); } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2018-06-29 17:33:58 UTC (rev 15417) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2018-06-29 19:51:23 UTC (rev 15418) @@ -24,8 +24,8 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.EDGE; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; +import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF52; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF60; -import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF52; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE; import java.io.IOException; @@ -155,6 +155,7 @@ * @author Frank Danek * @author Carsten Steul * @author Colin Alworth + * @author Atsushi Nakagawa * @see <a href="http://msdn.microsoft.com/en-us/library/ms535873.aspx">MSDN documentation</a> */ @JsxClass @@ -483,32 +484,77 @@ * The invocation occurs only if the window is opened after the delay * and does not contain an other page than the one that originated the setTimeout. * - * @param code specifies the function pointer or string that indicates the code to be executed - * when the specified interval has elapsed - * @param timeout specifies the number of milliseconds - * @param language specifies language + * @see <a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout"> + * MDN web docs</a> + * + * @param context the JavaScript context + * @param thisObj the scriptable + * @param args the arguments passed into the method + * @param function the function * @return the id of the created timer */ @JsxFunction - public int setTimeout(final Object code, int timeout, final Object language) { + public static Object setTimeout(final Context context, final Scriptable thisObj, + final Object[] args, final Function function) { + if (args.length < 1) { + throw ScriptRuntime.typeError("Function not provided"); + } + + final int timeout = ScriptRuntime.toInt32((args.length > 1) ? args[1] : Undefined.instance); + final Object[] params = (args.length > 2) + ? Arrays.copyOfRange(args, 2, args.length) + : ScriptRuntime.emptyArgs; + return ((Window) thisObj).setTimeoutIntervalImpl(args[0], timeout, true, params); + } + + /** + * Sets a chunk of JavaScript to be invoked each time a specified number of milliseconds has elapsed. + * + * @see <a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval"> + * MDN web docs</a> + * @param context the JavaScript context + * @param thisObj the scriptable + * @param args the arguments passed into the method + * @param function the function + * @return the id of the created interval + */ + @JsxFunction + public static Object setInterval(final Context context, final Scriptable thisObj, + final Object[] args, final Function function) { + if (args.length < 1) { + throw ScriptRuntime.typeError("Function not provided"); + } + + final int timeout = ScriptRuntime.toInt32((args.length > 1) ? args[1] : Undefined.instance); + final Object[] params = (args.length > 2) + ? Arrays.copyOfRange(args, 2, args.length) + : ScriptRuntime.emptyArgs; + return ((Window) thisObj).setTimeoutIntervalImpl(args[0], timeout, false, params); + } + + private int setTimeoutIntervalImpl(final Object code, int timeout, final boolean isTimeout, final Object[] params) { if (timeout < MIN_TIMER_DELAY) { timeout = MIN_TIMER_DELAY; } - if (code == null) { - throw Context.reportRuntimeError("Function not provided."); - } - final int id; final WebWindow webWindow = getWebWindow(); final Page page = (Page) getDomNodeOrNull(); + Integer period = null; + if (!isTimeout) { + period = Integer.valueOf(timeout); + } + if (code instanceof String) { final String s = (String) code; - final String description = "window.setTimeout(" + s + ", " + timeout + ")"; + final String description = "window.set" + + (isTimeout ? "Timeout" : "Interval") + + "(" + s + ", " + timeout + ")"; final JavaScriptJob job = BackgroundJavaScriptFactory.theFactory(). - createJavaScriptJob(timeout, null, description, webWindow, s); - id = webWindow.getJobManager().addJob(job, page); + createJavaScriptJob(timeout, period, description, webWindow, s); + return webWindow.getJobManager().addJob(job, page); } - else if (code instanceof Function) { + + if (code instanceof Function) { final Function f = (Function) code; final String functionName; if (f instanceof FunctionObject) { @@ -518,15 +564,15 @@ functionName = String.valueOf(f); // can this happen? } - final String description = "window.setTimeout(" + functionName + ", " + timeout + ")"; + final String description = "window.set" + + (isTimeout ? "Timeout" : "Interval") + + "(" + functionName + ", " + timeout + ")"; final JavaScriptJob job = BackgroundJavaScriptFactory.theFactory(). - createJavaScriptJob(timeout, null, description, webWindow, f); - id = webWindow.getJobManager().addJob(job, page); + createJavaScriptJob(timeout, period, description, webWindow, f, params); + return webWindow.getJobManager().addJob(job, page); } - else { - throw Context.reportRuntimeError("Unknown type for function."); - } - return id; + + throw Context.reportRuntimeError("Unknown type for function."); } /** @@ -543,6 +589,21 @@ } /** + * Cancels the interval previously started using the {@link #setInterval(Object, int, Object)} method. + * Current implementation does nothing. + * @param intervalID specifies the interval to cancel as returned by the + * {@link #setInterval(Object, int, Object)} method + * @see <a href="http://msdn.microsoft.com/en-us/library/ms536353.aspx">MSDN documentation</a> + */ + @JsxFunction + public void clearInterval(final int intervalID) { + if (LOG.isDebugEnabled()) { + LOG.debug("clearInterval(" + intervalID + ")"); + } + getWebWindow().getJobManager().removeJob(intervalID); + } + + /** * Returns the JavaScript property {@code navigator}. * @return the navigator */ @@ -1487,61 +1548,6 @@ } /** - * Sets a chunk of JavaScript to be invoked each time a specified number of milliseconds has elapsed. - * - * @see <a href="http://msdn.microsoft.com/en-us/library/ms536749.aspx">MSDN documentation</a> - * @param code specifies the function pointer or string that indicates the code to be executed - * when the specified interval has elapsed - * @param timeout specifies the number of milliseconds - * @param language specifies language - * @return the id of the created interval - */ - @JsxFunction - public int setInterval(final Object code, int timeout, final Object language) { - if (timeout < MIN_TIMER_DELAY) { - timeout = MIN_TIMER_DELAY; - } - final int id; - final WebWindow w = getWebWindow(); - final Page page = (Page) getDomNodeOrNull(); - final String description = "window.setInterval(" + timeout + ")"; - if (code == null) { - throw Context.reportRuntimeError("Function not provided."); - } - else if (code instanceof String) { - final String s = (String) code; - final JavaScriptJob job = BackgroundJavaScriptFactory.theFactory(). - createJavaScriptJob(timeout, Integer.valueOf(timeout), description, w, s); - id = w.getJobManager().addJob(job, page); - } - else if (code instanceof Function) { - final Function f = (Function) code; - final JavaScriptJob job = BackgroundJavaScriptFactory.theFactory(). - createJavaScriptJob(timeout, Integer.valueOf(timeout), description, w, f); - id = w.getJobManager().addJob(job, page); - } - else { - throw Context.reportRuntimeError("Unknown type for function."); - } - return id; - } - - /** - * Cancels the interval previously started using the {@link #setInterval(Object, int, Object)} method. - * Current implementation does nothing. - * @param intervalID specifies the interval to cancel as returned by the - * {@link #setInterval(Object, int, Object)} method - * @see <a href="http://msdn.microsoft.com/en-us/library/ms536353.aspx">MSDN documentation</a> - */ - @JsxFunction - public void clearInterval(final int intervalID) { - if (LOG.isDebugEnabled()) { - LOG.debug("clearInterval(" + intervalID + ")"); - } - getWebWindow().getJobManager().removeJob(intervalID); - } - - /** * Returns the {@code innerWidth}. * @return the {@code innerWidth} * @see <a href="http://www.mozilla.org/docs/dom/domref/dom_window_ref28.html">Mozilla doc</a> |
From: RBRi <rb...@us...> - 2018-06-29 17:39:57
|
- **status**: open --> accepted - **assigned_to**: RBRi --- ** [bugs:#1966] setTimeout/setInterval() does not honour [param1, param2, ...] argument** **Status:** accepted **Group:** 2.31 **Created:** Tue Jun 05, 2018 02:47 PM UTC by Atsushi Nakagawa **Last Updated:** Wed Jun 06, 2018 02:31 AM UTC **Owner:** RBRi ## Problem in brief HtmlUnit 2.31's `window.setTimeout()` and `window.setInterval()` do not honour the `[param1, param2, ...]` part of their respective definitions[1][2]: ``` var timeoutID = scope.setTimeout(function[, delay[, param1, param2, ...]]); var intervalID = scope.setInterval(func, delay[, param1, param2, ...]); ``` [1] https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout [2] https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval To be precise, it appears to be implementing this *"`language`"* parameter instead[3][4]. [3] https://sourceforge.net/p/htmlunit/code/15299/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java#l493 [4] https://sourceforge.net/p/htmlunit/code/15299/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java#l1500 This *`language`* parameter appears to be an outdated parameter from MSIE's DHTML era. Other than that I've found find very little documentation[5][6][7]. [5] [https://msdn.microsoft.com/en-us/ie/ms536749(v=vs.94)](https://msdn.microsoft.com/en-us/ie/ms536749(v=vs.94)) [6] https://msdn.microsoft.com/ja-jp/library/cc428172.aspx [7] https://blogs.msdn.microsoft.com/irenak/2007/03/20/sysk-310-the-difference-between-setinterval-and-settimeout/ ## Code to reproduce ```html <!DOCTYPE html> <html> <head> <script type="text/javascript"> function test() { setTimeout(function (x, y) { console.log("setTimeout(x = " + x + ", y = " + y + ")") }, 1, "abc", 123) var intervalID = setInterval(function (x, y) { console.log("setInterval(x = " + x + ", y = " + y + ")") clearInterval(intervalID) }, 1, "def", 456) } </script> </head> <body> <input type="button" onclick="test()" value="test"/> </body> </html> ``` Major browsers, including IE 11, prints: ``` setTimeout(x = abc, y = 123) setInterval(x = def, y = 456) ``` HtmlUnit 2.31 prints: ``` setTimeout(x = undefined, y = undefined) setInterval(x = undefined, y = undefined) ``` --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: <rb...@us...> - 2018-06-29 17:34:09
|
Revision: 15417 http://sourceforge.net/p/htmlunit/code/15417 Author: rbri Date: 2018-06-29 17:33:58 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclaration.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclaration.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclaration.java 2018-06-29 17:10:26 UTC (rev 15416) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/ComputedCSSStyleDeclaration.java 2018-06-29 17:33:58 UTC (rev 15417) @@ -16,6 +16,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.CSS_COMPUTED_BLOCK_IF_NOT_ATTACHED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.CSS_COMPUTED_NO_Z_INDEX; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLDEFINITION_INLINE_IN_QUIRKS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_CLIENTHIGHT_INPUT_17; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_CLIENTWIDTH_INPUT_TEXT_143; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_CLIENTWIDTH_INPUT_TEXT_169; @@ -105,6 +106,7 @@ import com.gargoylesoftware.htmlunit.html.HtmlButton; import com.gargoylesoftware.htmlunit.html.HtmlButtonInput; import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput; +import com.gargoylesoftware.htmlunit.html.HtmlDefinitionDescription; import com.gargoylesoftware.htmlunit.html.HtmlDivision; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlFileInput; @@ -568,7 +570,10 @@ if (browserVersion.hasFeature(CSS_COMPUTED_NO_Z_INDEX)) { return ""; } - if (!ignoreBlockIfNotAttached && browserVersion.hasFeature(CSS_COMPUTED_BLOCK_IF_NOT_ATTACHED)) { + if (!ignoreBlockIfNotAttached + && (browserVersion.hasFeature(CSS_COMPUTED_BLOCK_IF_NOT_ATTACHED) + || (domElem instanceof HtmlDefinitionDescription + && browserVersion.hasFeature(HTMLDEFINITION_INLINE_IN_QUIRKS)))) { changeValueIfEmpty = true; } } @@ -1830,7 +1835,7 @@ * @see #pixelString(Element, CSSStyleDeclaration.CssValue) */ protected String pixelString(final String value) { - if (value == EMPTY_FINAL || value.endsWith("px")) { + if (EMPTY_FINAL == value || value.endsWith("px")) { return value; } return pixelValue(value) + "px"; |
From: <rb...@us...> - 2018-06-29 17:10:30
|
Revision: 15416 http://sourceforge.net/p/htmlunit/code/15416 Author: rbri Date: 2018-06-29 17:10:26 +0000 (Fri, 29 Jun 2018) Log Message: ----------- code style Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionToStringFunction.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionToStringFunction.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionToStringFunction.java 2018-06-29 14:18:41 UTC (rev 15415) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionToStringFunction.java 2018-06-29 17:10:26 UTC (rev 15416) @@ -103,6 +103,7 @@ return s.replace("function anonymous() {", "function anonymous(\n) {"); } } + static class NativeFunctionToStringFunctionFF extends FunctionWrapper { NativeFunctionToStringFunctionFF(final Function wrapped) { |
From: RBRi <rb...@us...> - 2018-06-29 14:20:05
|
- **status**: open --> closed --- ** [bugs:#1964] NPE HtmlTextArea.removeFocus()** **Status:** closed **Group:** Latest SVN **Labels:** textarea NPE **Created:** Fri Jun 01, 2018 08:35 AM UTC by Flake **Last Updated:** Fri Jun 29, 2018 02:19 PM UTC **Owner:** RBRi Hi Ron, I encountered a NPE that I didn't expect (haha). (2.32-SNAPSHOT) Assume you have a textarea t. You type something in and then you need to blur it in order for some js to trigger. ~~~java WebClient webClient = new WebClient(BrowserVersion.CHROME); HtmlPage page = webClient.getPage("http://localhost:8080"); HtmlTextArea ta = HtmlPageTools.getHtmlElementById("ta", page); ta.type("test"); ta.removeFocus(); webClient.close(); ~~~ This is how I did it. I used the `removeFocus()` public API beause I didn't know there was `blur()` for textarea, too. However, by doing this you get a NPE because `valueAtFocus_` ain't seem to be set (because you didn't manually `focus()` it). I assumed it was focused after typing something in and it probably is but not via textarea's `focus()`. Actually, after taking a quick look im not sure if it's even focused. The problematic line is this: https://sourceforge.net/p/htmlunit/code/HEAD/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java#l515 The fix should be as easy as this: ~~~java public void removeFocus() { super.removeFocus(); if (valueAtFocus_ != null && !valueAtFocus_.equals(getText())) { HtmlInput.executeOnChangeHandlerIfAppropriate(this); } valueAtFocus_ = null; } ~~~ Best, Ron2 --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: RBRi <rb...@us...> - 2018-06-29 14:19:51
|
fixed in SVN. Will inform via Twitter if a new snapshot is available. Thanks for this report and sorry for the delay; FF60 support was a huge effort. --- ** [bugs:#1964] NPE HtmlTextArea.removeFocus()** **Status:** open **Group:** Latest SVN **Labels:** textarea NPE **Created:** Fri Jun 01, 2018 08:35 AM UTC by Flake **Last Updated:** Fri Jun 01, 2018 08:35 AM UTC **Owner:** RBRi Hi Ron, I encountered a NPE that I didn't expect (haha). (2.32-SNAPSHOT) Assume you have a textarea t. You type something in and then you need to blur it in order for some js to trigger. ~~~java WebClient webClient = new WebClient(BrowserVersion.CHROME); HtmlPage page = webClient.getPage("http://localhost:8080"); HtmlTextArea ta = HtmlPageTools.getHtmlElementById("ta", page); ta.type("test"); ta.removeFocus(); webClient.close(); ~~~ This is how I did it. I used the `removeFocus()` public API beause I didn't know there was `blur()` for textarea, too. However, by doing this you get a NPE because `valueAtFocus_` ain't seem to be set (because you didn't manually `focus()` it). I assumed it was focused after typing something in and it probably is but not via textarea's `focus()`. Actually, after taking a quick look im not sure if it's even focused. The problematic line is this: https://sourceforge.net/p/htmlunit/code/HEAD/tree/trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java#l515 The fix should be as easy as this: ~~~java public void removeFocus() { super.removeFocus(); if (valueAtFocus_ != null && !valueAtFocus_.equals(getText())) { HtmlInput.executeOnChangeHandlerIfAppropriate(this); } valueAtFocus_ = null; } ~~~ Best, Ron2 --- Sent from sourceforge.net because htm...@li... is subscribed to https://sourceforge.net/p/htmlunit/bugs/ To unsubscribe from further messages, a project admin can change settings at https://sourceforge.net/p/htmlunit/admin/bugs/options. Or, if this is a mailing list, you can unsubscribe from the mailing list. |
From: <rb...@us...> - 2018-06-29 14:18:49
|
Revision: 15415 http://sourceforge.net/p/htmlunit/code/15415 Author: rbri Date: 2018-06-29 14:18:41 +0000 (Fri, 29 Jun 2018) Log Message: ----------- NPE in HtmlTextArea.removeFocus() Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextAreaTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2018-06-29 14:05:13 UTC (rev 15414) +++ trunk/htmlunit/src/changes/changes.xml 2018-06-29 14:18:41 UTC (rev 15415) @@ -8,6 +8,15 @@ <body> <release version="2.32" date="xx 2018" description="Bugfixes, FIREFOX_45 removed, FIREFOX_60 added"> + <action type="add" dev="rbri"> + FF60 ESR support. + </action> + <action type="remove" dev="rbri"> + FF45 support removed. + </action> + <action type="fix" dev="rbri" issue="1964"> + NPE in HtmlTextArea.removeFocus(). + </action> <action type="fix" dev="rbri" issue="1970"> WebClient default request header should not overwrite request-specific ones. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java 2018-06-29 14:05:13 UTC (rev 15414) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTextArea.java 2018-06-29 14:18:41 UTC (rev 15415) @@ -512,7 +512,7 @@ @Override public void removeFocus() { super.removeFocus(); - if (!valueAtFocus_.equals(getText())) { + if (valueAtFocus_ != null && !valueAtFocus_.equals(getText())) { HtmlInput.executeOnChangeHandlerIfAppropriate(this); } valueAtFocus_ = null; Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextAreaTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextAreaTest.java 2018-06-29 14:05:13 UTC (rev 15414) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlTextAreaTest.java 2018-06-29 14:18:41 UTC (rev 15415) @@ -279,4 +279,17 @@ t.type(KeyboardEvent.DOM_VK_DELETE); assertEquals("tt", t.getText()); } + + /** + * Make sure removeFocus does not throw. + * + * @throws Exception if the test fails + */ + @Test + public void removeFocus() throws Exception { + final String html = "<html><head></head><body><textarea id='t'></textarea></body></html>"; + final HtmlPage page = loadPage(html, null); + final HtmlTextArea t = page.getHtmlElementById("t"); + t.removeFocus(); + } } |
From: <rb...@us...> - 2018-06-29 14:05:18
|
Revision: 15414 http://sourceforge.net/p/htmlunit/code/15414 Author: rbri Date: 2018-06-29 14:05:13 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/SimpleScriptable2Test.java Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/SimpleScriptable2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/SimpleScriptable2Test.java 2018-06-29 14:01:31 UTC (rev 15413) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/SimpleScriptable2Test.java 2018-06-29 14:05:13 UTC (rev 15414) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.javascript; import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.CHROME; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -326,7 +327,7 @@ @Alerts(DEFAULT = {"function", "true", "function get length() {\n [native code]\n}", "0", "0"}, CHROME = {"undefined", "false", "undefined", "exception"}, IE = {"function", "true", "\nfunction length() {\n [native code]\n}\n", "0", "0"}) - @NotYetImplemented(CHROME) + @NotYetImplemented({CHROME, FF}) public void lookupGetter() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><script>\n" |
From: <rb...@us...> - 2018-06-29 14:01:37
|
Revision: 15413 http://sourceforge.net/p/htmlunit/code/15413 Author: rbri Date: 2018-06-29 14:01:31 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionToStringFunction.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/ElementChildNodesTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-29 13:28:37 UTC (rev 15412) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-29 14:01:31 UTC (rev 15413) @@ -1093,6 +1093,10 @@ @BrowserFeature(IE) JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE, + /** Indicates if the String representation of a native function has a newline for empty parameter list. */ + @BrowserFeature(FF60) + JS_NATIVE_FUNCTION_TOSTRING_NL, + /** Navigator.doNotTrack returns unspecified if not set. */ @BrowserFeature(FF) JS_NAVIGATOR_DO_NOT_TRACK_UNSPECIFIED, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionToStringFunction.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionToStringFunction.java 2018-06-29 13:28:37 UTC (rev 15412) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionToStringFunction.java 2018-06-29 14:01:31 UTC (rev 15413) @@ -16,6 +16,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_NATIVE_FUNCTION_TOSTRING_COMPACT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_NATIVE_FUNCTION_TOSTRING_NL; import com.gargoylesoftware.htmlunit.BrowserVersion; @@ -55,6 +56,13 @@ final Function newToString = new NativeFunctionToStringFunctionChrome(originalToString); ScriptableObject.putProperty(fnPrototype, "toString", newToString); } + else if (browserVersion.hasFeature(JS_NATIVE_FUNCTION_TOSTRING_NL)) { + final ScriptableObject fnPrototype = + (ScriptableObject) ScriptableObject.getClassPrototype(window, "Function"); + final Function originalToString = (Function) ScriptableObject.getProperty(fnPrototype, "toString"); + final Function newToString = new NativeFunctionToStringFunctionFF(originalToString); + ScriptableObject.putProperty(fnPrototype, "toString", newToString); + } } NativeFunctionToStringFunction(final Function wrapped) { @@ -92,7 +100,22 @@ final String functionName = ((BaseFunction) thisObj).getFunctionName(); return "function " + functionName + "() { [native code] }"; } - return s; + return s.replace("function anonymous() {", "function anonymous(\n) {"); } } + static class NativeFunctionToStringFunctionFF extends FunctionWrapper { + + NativeFunctionToStringFunctionFF(final Function wrapped) { + super(wrapped); + } + + /** + * {@inheritDoc} + */ + @Override + public Object call(final Context cx, final Scriptable scope, final Scriptable thisObj, final Object[] args) { + final String s = (String) super.call(cx, scope, thisObj, args); + return s.replace("function anonymous() {", "function anonymous(\n) {"); + } + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/ElementChildNodesTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/ElementChildNodesTest.java 2018-06-29 13:28:37 UTC (rev 15412) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/general/ElementChildNodesTest.java 2018-06-29 14:01:31 UTC (rev 15413) @@ -14,11 +14,14 @@ */ package com.gargoylesoftware.htmlunit.general; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF60; + import org.junit.Test; import org.junit.runner.RunWith; import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; +import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; import com.gargoylesoftware.htmlunit.WebDriverTestCase; /** @@ -415,6 +418,7 @@ @Test @Alerts(DEFAULT = {"3", "2", "2", "3", "2", "2"}, FF60 = {"1", "0", "1", "1", "0", "1"}) + @NotYetImplemented(FF60) public void dialog() throws Exception { loadPageWithAlerts2(test("dialog")); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElementTest.java 2018-06-29 13:28:37 UTC (rev 15412) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElementTest.java 2018-06-29 14:01:31 UTC (rev 15413) @@ -267,7 +267,7 @@ + "</form>\n" + "</body></html>"; - loadPageWithAlerts2(html, 7777777); + loadPageWithAlerts2(html, 2 * DEFAULT_WAIT_TIME); } /** |
From: <rb...@us...> - 2018-06-29 13:28:42
|
Revision: 15412 http://sourceforge.net/p/htmlunit/code/15412 Author: rbri Date: 2018-06-29 13:28:37 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLMenuElement.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-29 13:18:27 UTC (rev 15411) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-29 13:28:37 UTC (rev 15412) @@ -1081,6 +1081,10 @@ @BrowserFeature(IE) JS_MENU_TYPE_EMPTY, + /** Type property of menu returns the current (maybe invalid) value. */ + @BrowserFeature(FF60) + JS_MENU_TYPE_PASS, + /** Indicates if the String representation of a native function is without newline. */ @BrowserFeature({CHROME, EDGE}) JS_NATIVE_FUNCTION_TOSTRING_COMPACT, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLMenuElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLMenuElement.java 2018-06-29 13:18:27 UTC (rev 15411) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLMenuElement.java 2018-06-29 13:28:37 UTC (rev 15412) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.javascript.host.html; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_MENU_TYPE_EMPTY; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_MENU_TYPE_PASS; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.EDGE; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; @@ -62,6 +63,10 @@ } final String type = getDomNodeOrDie().getAttributeDirect("type"); + if (getBrowserVersion().hasFeature(JS_MENU_TYPE_PASS)) { + return type; + } + if ("context".equalsIgnoreCase(type)) { return "context"; } @@ -68,6 +73,7 @@ if ("toolbar".equalsIgnoreCase(type)) { return "toolbar"; } + return "list"; } @@ -85,6 +91,11 @@ throw Context.reportRuntimeError("Cannot set the type property to invalid value: '" + type + "'"); } + if (getBrowserVersion().hasFeature(JS_MENU_TYPE_PASS)) { + getDomNodeOrDie().setAttribute("type", type); + return; + } + if ("context".equalsIgnoreCase(type)) { getDomNodeOrDie().setAttribute("type", "context"); return; |
From: <rb...@us...> - 2018-06-29 13:18:43
|
Revision: 15411 http://sourceforge.net/p/htmlunit/code/15411 Author: rbri Date: 2018-06-29 13:18:27 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlDateTimeLocalInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlMonthInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTimeInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlWeekInput.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-29 11:57:58 UTC (rev 15410) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-29 13:18:27 UTC (rev 15411) @@ -443,6 +443,14 @@ @BrowserFeature({CHROME, FF60, IE}) HTMLINPUT_FILE_VALUE_FAKEPATH, + /** HTMLInputElement date and time types are supported. */ + @BrowserFeature({CHROME, FF60}) + HTMLINPUT_TYPE_DATETIME_SUPPORTED, + + /** HTMLInputElement date and time types are supported. */ + @BrowserFeature(FF60) + HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED, + /** Should the HTMLElement of {@code keygen} have no end tag. */ @BrowserFeature(IE) HTMLKEYGEN_END_TAG_FORBIDDEN, @@ -1000,7 +1008,7 @@ @BrowserFeature(IE) JS_INPUT_SET_TYPE_LOWERCASE, - /** Setting the value of an Input Date to blank will result in an empty value. */ + /** Setting the value of an Input Date will check for correct format. */ @BrowserFeature({CHROME, FF60}) JS_INPUT_SET_VALUE_DATE_SUPPORTED, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlDateTimeLocalInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlDateTimeLocalInput.java 2018-06-29 11:57:58 UTC (rev 15410) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlDateTimeLocalInput.java 2018-06-29 13:18:27 UTC (rev 15411) @@ -14,7 +14,8 @@ */ package com.gargoylesoftware.htmlunit.html; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INPUT_SET_VALUE_DATE_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_DATETIME_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -49,7 +50,8 @@ @Override public void setValueAttribute(final String newValue) { try { - if (hasFeature(JS_INPUT_SET_VALUE_DATE_SUPPORTED)) { + if (hasFeature(HTMLINPUT_TYPE_DATETIME_SUPPORTED) + && !hasFeature(HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED)) { FORMATTER_.parse(newValue); } super.setValueAttribute(newValue); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlMonthInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlMonthInput.java 2018-06-29 11:57:58 UTC (rev 15410) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlMonthInput.java 2018-06-29 13:18:27 UTC (rev 15411) @@ -14,7 +14,8 @@ */ package com.gargoylesoftware.htmlunit.html; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INPUT_SET_VALUE_DATE_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_DATETIME_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -49,7 +50,8 @@ @Override public void setValueAttribute(final String newValue) { try { - if (hasFeature(JS_INPUT_SET_VALUE_DATE_SUPPORTED)) { + if (hasFeature(HTMLINPUT_TYPE_DATETIME_SUPPORTED) + && !hasFeature(HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED)) { FORMATTER_.parse(newValue); } super.setValueAttribute(newValue); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTimeInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTimeInput.java 2018-06-29 11:57:58 UTC (rev 15410) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlTimeInput.java 2018-06-29 13:18:27 UTC (rev 15411) @@ -14,7 +14,7 @@ */ package com.gargoylesoftware.htmlunit.html; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INPUT_SET_VALUE_DATE_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_DATETIME_SUPPORTED; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -49,7 +49,7 @@ @Override public void setValueAttribute(final String newValue) { try { - if (hasFeature(JS_INPUT_SET_VALUE_DATE_SUPPORTED)) { + if (hasFeature(HTMLINPUT_TYPE_DATETIME_SUPPORTED)) { FORMATTER_.parse(newValue); } super.setValueAttribute(newValue); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlWeekInput.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlWeekInput.java 2018-06-29 11:57:58 UTC (rev 15410) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlWeekInput.java 2018-06-29 13:18:27 UTC (rev 15411) @@ -14,7 +14,8 @@ */ package com.gargoylesoftware.htmlunit.html; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INPUT_SET_VALUE_DATE_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_DATETIME_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -49,7 +50,8 @@ @Override public void setValueAttribute(final String newValue) { try { - if (hasFeature(JS_INPUT_SET_VALUE_DATE_SUPPORTED)) { + if (hasFeature(HTMLINPUT_TYPE_DATETIME_SUPPORTED) + && !hasFeature(HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED)) { FORMATTER_.parse(newValue); } super.setValueAttribute(newValue); Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java 2018-06-29 11:57:58 UTC (rev 15410) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java 2018-06-29 13:18:27 UTC (rev 15411) @@ -18,16 +18,16 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_FILES_UNDEFINED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_FILE_SELECTION_START_END_NULL; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_FILE_VALUE_FAKEPATH; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_DATETIME_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_ALIGN_FOR_INPUT_IGNORES_VALUES; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INPUT_NUMBER_SELECTION_START_END_NULL; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INPUT_SET_TYPE_LOWERCASE; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INPUT_SET_VALUE_DATE_SUPPORTED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_SELECT_FILE_THROWS; import static com.gargoylesoftware.htmlunit.html.DomElement.ATTRIBUTE_NOT_DEFINED; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.EDGE; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; -import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF52; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF60; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE; @@ -100,7 +100,7 @@ if (!InputElementFactory.isSupported(type)) { type = "text"; } - else if (!browserVersion.hasFeature(JS_INPUT_SET_VALUE_DATE_SUPPORTED)) { + else if (!browserVersion.hasFeature(HTMLINPUT_TYPE_DATETIME_SUPPORTED)) { switch (type) { case "date": case "time": @@ -113,6 +113,17 @@ default: } } + else if (browserVersion.hasFeature(HTMLINPUT_TYPE_MONTH_NOT_SUPPORTED)) { + switch (type) { + case "datetime-local": + case "month": + case "week": + type = "text"; + break; + + default: + } + } if ("color".equals(type) && browserVersion.hasFeature(HTMLINPUT_FILES_UNDEFINED)) { type = "text"; } @@ -425,7 +436,7 @@ * Gets the {@code minLength}. * @return the {@code minLength} */ - @JsxGetter({CHROME, FF52}) + @JsxGetter({CHROME, FF}) public int getMinLength() { final String attrValue = getDomNodeOrDie().getAttribute("minLength"); return NumberUtils.toInt(attrValue, -1); @@ -435,7 +446,7 @@ * Sets the value of {@code minLength} attribute. * @param length the new value */ - @JsxSetter({CHROME, FF52}) + @JsxSetter({CHROME, FF}) public void setMinLength(final int length) { getDomNodeOrDie().setMinLength(length); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElementTest.java 2018-06-29 11:57:58 UTC (rev 15410) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElementTest.java 2018-06-29 13:18:27 UTC (rev 15411) @@ -267,7 +267,7 @@ + "</form>\n" + "</body></html>"; - loadPageWithAlerts2(html, 2 * DEFAULT_WAIT_TIME); + loadPageWithAlerts2(html, 7777777); } /** |
From: <rb...@us...> - 2018-06-29 11:58:04
|
Revision: 15410 http://sourceforge.net/p/htmlunit/code/15410 Author: rbri Date: 2018-06-29 11:57:58 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/canvas/IntersectionObserverTest.java Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/canvas/IntersectionObserverTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/canvas/IntersectionObserverTest.java 2018-06-29 11:37:26 UTC (rev 15409) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/canvas/IntersectionObserverTest.java 2018-06-29 11:57:58 UTC (rev 15410) @@ -25,16 +25,42 @@ * Unit tests for {@link IntersectionObserver}. * * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserRunner.class) public class IntersectionObserverTest extends WebDriverTestCase { /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = "true", + FF52 = "false", + IE = "false") + public void inWindow() throws Exception { + final String html + = "<html>\n" + + "<head>\n" + + " <script>\n" + + " function test() {\n" + + " alert('IntersectionObserver' in window);\n" + + " }\n" + + " </script>\n" + + "</head>\n" + + "<body onload='test()'>\n" + + "</body>\n" + + "</html>"; + + loadPageWithAlerts2(html); + } + + /** * @throws Exception if an error occurs */ @Test - @Alerts(DEFAULT = {}, - CHROME = {"function", "function", "function", "function"}) + @Alerts(DEFAULT = "no IntersectionObserver", + CHROME = {"function", "function", "function", "function"}, + FF60 = {"function", "function", "function", "function"}) public void functions() throws Exception { final String html = "<html><head><script>\n" @@ -46,7 +72,7 @@ + " alert(typeof observer.unobserve);\n" + " alert(typeof observer.disconnect);\n" + " alert(typeof observer.takeRecords);\n" - + " }\n" + + " } else { alert('no IntersectionObserver'); }\n" + "}\n" + "</script>\n" + "</head>\n" |
From: <rb...@us...> - 2018-06-29 11:37:30
|
Revision: 15409 http://sourceforge.net/p/htmlunit/code/15409 Author: rbri Date: 2018-06-29 11:37:26 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEventTest.java Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEventTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEventTest.java 2018-06-29 11:20:25 UTC (rev 15408) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/KeyboardEventTest.java 2018-06-29 11:37:26 UTC (rev 15409) @@ -14,6 +14,8 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.event; +import static com.gargoylesoftware.htmlunit.BrowserRunner.TestedBrowser.FF60; + import java.util.Arrays; import org.junit.Test; @@ -133,6 +135,7 @@ */ @Test @Alerts("32, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ") + @BuggyWebDriver(FF60) public void keyCodes_keyup() throws Exception { final String html = "<html><head>\n" + "<script>\n" @@ -188,6 +191,7 @@ */ @Test @Alerts("32, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, ") + @BuggyWebDriver(FF60) public void keyCodes_keydown() throws Exception { final String html = "<html><head>\n" + "<script>\n" @@ -300,8 +304,7 @@ */ @Test @Alerts(DEFAULT = {"13", "13", "13"}, - FF52 = {"0", "13", "13"}, - FF60 = {"10", "0", "10"}) + FF = {"0", "13", "13"}) public void keyCodeEnter_keypress() throws Exception { final String html = "<html>\n" + "<head>\n" @@ -321,7 +324,7 @@ final WebDriver driver = loadPage2(html); final WebElement field = driver.findElement(By.id("t")); - field.sendKeys("\n"); + field.sendKeys(Keys.ENTER); verifyAlerts(driver, getExpectedAlerts()); } |
From: <rb...@us...> - 2018-06-29 11:20:31
|
Revision: 15408 http://sourceforge.net/p/htmlunit/code/15408 Author: rbri Date: 2018-06-29 11:20:25 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/speech/SpeechSynthesisErrorEvent.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserParameterizedRunner.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/speech/SpeechSynthesisErrorEvent.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/speech/SpeechSynthesisErrorEvent.java 2018-06-29 09:33:09 UTC (rev 15407) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/speech/SpeechSynthesisErrorEvent.java 2018-06-29 11:20:25 UTC (rev 15408) @@ -16,10 +16,9 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstant; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; +import com.gargoylesoftware.htmlunit.javascript.host.event.SpeechSynthesisEvent; /** * A JavaScript object for {@code SpeechSynthesisErrorEvent}. @@ -27,40 +26,8 @@ * @author Ronald Brill */ @JsxClass(FF) -public class SpeechSynthesisErrorEvent extends SimpleScriptable { +public class SpeechSynthesisErrorEvent extends SpeechSynthesisEvent { - /** Constant. */ - @JsxConstant(FF) - public static final int ALT_MASK = 0x1; - - /** Constant. */ - @JsxConstant(FF) - public static final int CONTROL_MASK = 0x2; - - /** Constant. */ - @JsxConstant(FF) - public static final int SHIFT_MASK = 0x4; - - /** Constant. */ - @JsxConstant(FF) - public static final int META_MASK = 0x8; - - /** The first event phase: the capturing phase. */ - @JsxConstant(FF) - public static final short CAPTURING_PHASE = 1; - - /** The second event phase: at the event target. */ - @JsxConstant(FF) - public static final short AT_TARGET = 2; - - /** The third (and final) event phase: the bubbling phase. */ - @JsxConstant(FF) - public static final short BUBBLING_PHASE = 3; - - /** No event phase. */ - @JsxConstant(FF) - public static final short NONE = 0; - /** * Creates a new instance. */ Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserParameterizedRunner.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserParameterizedRunner.java 2018-06-29 09:33:09 UTC (rev 15407) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserParameterizedRunner.java 2018-06-29 11:20:25 UTC (rev 15408) @@ -156,7 +156,7 @@ runners_.add(new BrowserVersionClassRunnerWithParameters( klass, BrowserVersion.CHROME, false, tests)); } - if (browsers.contains("hu_ff60")) { + if (browsers.contains("hu-ff60")) { runners_.add(new BrowserVersionClassRunnerWithParameters( klass, BrowserVersion.FIREFOX_60, false, tests)); } |
From: <rb...@us...> - 2018-06-29 09:33:13
|
Revision: 15407 http://sourceforge.net/p/htmlunit/code/15407 Author: rbri Date: 2018-06-29 09:33:09 +0000 (Fri, 29 Jun 2018) Log Message: ----------- ff60 support (wip) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/PopStateEvent.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/PopStateEventTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-29 08:40:51 UTC (rev 15406) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2018-06-29 09:33:09 UTC (rev 15407) @@ -230,6 +230,10 @@ @BrowserFeature(IE) EVENT_ONMOUSEUP_NOT_FOR_SELECT_OPTION, + /** <code>PopStateEvent</code> can not be created by calling document.createEvent('PopStateEvent'). */ + @BrowserFeature(FF60) + EVENT_ONPOPSTATE_DOCUMENT_CREATE_NOT_SUPPORTED, + /** Supports event type 'BeforeUnloadEvent'. */ @BrowserFeature({CHROME, FF}) EVENT_TYPE_BEFOREUNLOADEVENT, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java 2018-06-29 08:40:51 UTC (rev 15406) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/Document.java 2018-06-29 09:33:09 UTC (rev 15407) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.javascript.host.dom; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.EVENT_ONCLOSE_DOCUMENT_CREATE_NOT_SUPPORTED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.EVENT_ONPOPSTATE_DOCUMENT_CREATE_NOT_SUPPORTED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.EVENT_TYPE_BEFOREUNLOADEVENT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.EVENT_TYPE_HASHCHANGEEVENT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.EVENT_TYPE_KEY_EVENTS; @@ -1208,6 +1209,11 @@ || "ProgressEvent".equals(eventType) && getBrowserVersion().hasFeature(EVENT_TYPE_PROGRESSEVENT))) { clazz = SUPPORTED_VENDOR_EVENT_TYPE_MAP.get(eventType); + + if (PopStateEvent.class == clazz + && getBrowserVersion().hasFeature(EVENT_ONPOPSTATE_DOCUMENT_CREATE_NOT_SUPPORTED)) { + clazz = null; + } } if (clazz == null) { Context.throwAsScriptRuntimeEx(new DOMException(DOMException.NOT_SUPPORTED_ERR, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/PopStateEvent.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/PopStateEvent.java 2018-06-29 08:40:51 UTC (rev 15406) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/event/PopStateEvent.java 2018-06-29 09:33:09 UTC (rev 15407) @@ -18,9 +18,11 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.EDGE; import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.FF; +import static com.gargoylesoftware.htmlunit.javascript.configuration.SupportedBrowser.IE; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxFunction; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; import net.sourceforge.htmlunit.corejs.javascript.Context; @@ -92,6 +94,20 @@ } /** + * Initializes this event. + * @param type the event type + * @param bubbles whether or not the event should bubble + * @param cancelable whether or not the event the event should be cancelable + * @param state the state + */ + @JsxFunction(IE) + public void initPopStateEvent(final String type, final boolean bubbles, + final boolean cancelable, final Object state) { + initEvent(type, bubbles, cancelable); + state_ = state; + } + + /** * Return the state object. * @return the state object */ Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/PopStateEventTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/PopStateEventTest.java 2018-06-29 08:40:51 UTC (rev 15406) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/event/PopStateEventTest.java 2018-06-29 09:33:09 UTC (rev 15407) @@ -100,7 +100,8 @@ * @throws Exception if the test fails */ @Test - @Alerts({"[object PopStateEvent]", "null", "", "false", "false", "null"}) + @Alerts(DEFAULT = {"[object PopStateEvent]", "null", "", "false", "false", "null"}, + FF60 = "exception") public void create_createEvent() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>foo</title><script>\n" @@ -121,7 +122,8 @@ * @throws Exception if the test fails */ @Test - @Alerts({"[object PopStateEvent]", "null", "", "false", "false", "null"}) + @Alerts(DEFAULT = {"[object PopStateEvent]", "null", "", "false", "false", "null"}, + FF60 = "exception") public void setState() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>foo</title><script>\n" @@ -143,8 +145,8 @@ * @throws Exception if the test fails */ @Test - @Alerts("exception") - @NotYetImplemented({IE, CHROME, FF52}) + @Alerts(DEFAULT = "dispatched", + FF60 = "exception ctor") public void dispatchEvent() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head><title>foo</title><script>\n" @@ -151,8 +153,42 @@ + " function test() {\n" + " try {\n" + " var event = document.createEvent('PopStateEvent');\n" + + " event.initEvent('', true, true);\n" + + " } catch (e) { alert('exception ctor'); return; }\n" + + + " try {\n" + " dispatchEvent(event);\n" + " alert('dispatched');\n" + + " } catch (e) { alert('exception' + e) }\n" + + " }\n" + + DUMP_EVENT_FUNCTION + + " try {\n" + + " window.addEventListener('popstate',dump);\n" + + " } catch (e) { }\n" + + "</script></head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = "exception", + FF60 = "exception ctor") + @NotYetImplemented({CHROME, FF52, IE}) + public void dispatchEventWithoutInit() throws Exception { + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + + "<html><head><title>foo</title><script>\n" + + " function test() {\n" + + " try {\n" + + " var event = document.createEvent('PopStateEvent');\n" + + " } catch (e) { alert('exception ctor') }\n" + + + " try {\n" + + " dispatchEvent(event);\n" + + " alert('dispatched');\n" + " } catch (e) { alert('exception') }\n" + " }\n" + DUMP_EVENT_FUNCTION @@ -164,4 +200,33 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = "no initPopStateEvent", + FF60 = "exception ctor", + IE = {"[object PopStateEvent]", "null", "PopState", "true", "false", "html"}) + public void initPopStateEvent() throws Exception { + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + + "<html><head><title>foo</title><script>\n" + + " function test() {\n" + + " try {\n" + + " var event = document.createEvent('PopStateEvent');\n" + + " } catch (e) { alert('exception ctor') }\n" + + + " try {\n" + + " if (event.initPopStateEvent) {\n" + + " event.initPopStateEvent('PopState', true, false, 'html');\n" + + " dump(event);\n" + + " } else { alert('no initPopStateEvent'); }\n" + + " } catch (e) { alert('exception') }\n" + + " }\n" + + DUMP_EVENT_FUNCTION + + "</script></head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } } |