From: <mgu...@us...> - 2013-01-11 14:14:24
|
Revision: 7989 http://sourceforge.net/p/htmlunit/code/7989 Author: mguillem Date: 2013-01-11 14:14:18 +0000 (Fri, 11 Jan 2013) Log Message: ----------- JavaScript: fixed wrong trigger of focus event in special cases when field loses focus. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-01-11 14:10:25 UTC (rev 7988) +++ trunk/htmlunit/src/changes/changes.xml 2013-01-11 14:14:18 UTC (rev 7989) @@ -9,6 +9,9 @@ <body> <release version="2.12" date="???" description="Bugfixes, CSS3 Selectors"> <action type="fix" dev="mguillem"> + JavaScript: fixed wrong trigger of focus event in special cases when field loses focus. + </action> + <action type="fix" dev="mguillem"> JavaScript: ignore invalid indexes for History.go. </action> <action type="fix" dev="asashour"> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2013-01-11 14:10:25 UTC (rev 7988) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2013-01-11 14:14:18 UTC (rev 7989) @@ -452,6 +452,9 @@ return getPage(); } + // make enclosing window the current one + getPage().getWebClient().setCurrentWindow(getPage().getEnclosingWindow()); + final HtmlPage page = (HtmlPage) getPage(); if (page.getFocusedElement() != this) { focus(); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement2Test.java 2013-01-11 14:10:25 UTC (rev 7988) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement2Test.java 2013-01-11 14:14:18 UTC (rev 7989) @@ -16,6 +16,9 @@ import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.FF; +import java.util.ArrayList; +import java.util.List; + import org.junit.Test; import org.junit.runner.RunWith; @@ -61,4 +64,29 @@ assertEquals("me te", input.getSelectedText()); } + /** + * @throws Exception if an error occurs + */ + @Test + @Alerts("initial") + public void focus() throws Exception { + final String html = "<html><body>\n" + + "<iframe name='theFrame' src='" + URL_SECOND + "'></iframe>\n" + + "</body></html>"; + final String frame = "<html><body>\n" + + "<input id='input' value='initial' onfocus='alert(this.value)'>\n" + + "<div id='div'>click me</div>\n" + + "</body></html>"; + + getMockWebConnection().setResponse(URL_SECOND, frame); + + final List<String> collectedAlerts = new ArrayList<String>(); + final HtmlPage page = loadPage(html, collectedAlerts); + final HtmlPage framePage = (HtmlPage) page.getFrames().get(0).getEnclosedPage(); + + framePage.getHtmlElementById("input").type("foo"); + + framePage.getHtmlElementById("div").click(); + assertEquals(getExpectedAlerts(), collectedAlerts); + } } |