From: <mgu...@us...> - 2013-02-21 14:29:58
|
Revision: 8127 http://sourceforge.net/p/htmlunit/code/8127 Author: mguillem Date: 2013-02-21 14:29:53 +0000 (Thu, 21 Feb 2013) Log Message: ----------- JavaScript: add support for window.onchange handler (FF10+ and Chrome) (thanks to Hartmut Arlt) Issue 1484 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-02-19 16:17:51 UTC (rev 8126) +++ trunk/htmlunit/src/changes/changes.xml 2013-02-21 14:29:53 UTC (rev 8127) @@ -8,7 +8,10 @@ <body> <release version="2.12" date="???" description="Bugfixes, CSS3 Selectors"> - <action type="fix"> + <action type="fix" dev="mguillem" issue="1484" due-to="Hartmut Arlt"> + JavaScript: add support for window.onchange handler (FF10+ and Chrome). + </action> + <action type="fix" dev="mguillem"> Fixed synchronization problem causing a task triggered by setTimeout to be executed to early, before event handlers. </action> <action type="fix" dev="mguillem"> 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 2013-02-19 16:17:51 UTC (rev 8126) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-02-21 14:29:53 UTC (rev 8127) @@ -2010,6 +2010,24 @@ final ScriptResult result = Node.fireEvent(this, event); return !event.isAborted(result); } + + /** + * Getter for the onchange event handler. + * @return the handler + */ + @JsxGetter({@WebBrowser(value = FF, minVersion = 10), @WebBrowser(CHROME) }) + public Object getOnchange() { + return getHandlerForJavaScript(Event.TYPE_CHANGE); + } + + /** + * Setter for the onchange event handler. + * @param onchange the handler + */ + @JsxSetter({@WebBrowser(value = FF, minVersion = 10), @WebBrowser(CHROME) }) + public void setOnchange(final Object onchange) { + setHandlerForJavaScript(Event.TYPE_CHANGE, onchange); + } } class HTMLCollectionFrames extends HTMLCollection { 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 2013-02-19 16:17:51 UTC (rev 8126) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java 2013-02-21 14:29:53 UTC (rev 8127) @@ -1122,4 +1122,43 @@ assertEquals(getDefaultUrl() + "page2", driver.getCurrentUrl()); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "true", "null" }, + FF3_6 = { "false", "undefined" }, + IE = { "false", "undefined" }) + public void onchange_noHandler() throws Exception { + final String html + = "<html><body><script>\n" + + "alert('onchange' in window);\n" + + "alert(window.onchange);\n" + + "</script></body></html>"; + loadPageWithAlerts2(html); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "changed" }, + FF3_6 = { }, + IE = { }) + public void onchange_withHandler() throws Exception { + final String html + = "<html><body>\n" + + "<input id='it'/>\n" + + "<script>\n" + + "window.onchange = function() {\n" + + " alert('changed');\n" + + "}\n" + + "</script></body></html>"; + final WebDriver driver = loadPage2(html); + driver.findElement(By.id("it")).sendKeys("hello"); + driver.findElement(By.tagName("body")).click(); + + assertEquals(getExpectedAlerts(), getCollectedAlerts(driver)); + } } |