From: <rb...@us...> - 2013-07-26 16:42:09
|
Revision: 8423 http://sourceforge.net/p/htmlunit/code/8423 Author: rbri Date: 2013-07-26 16:42:06 +0000 (Fri, 26 Jul 2013) Log Message: ----------- node.text is unsupported for text nodes in xml documents. Issue 1523 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Text.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLDocument2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-07-25 18:36:28 UTC (rev 8422) +++ trunk/htmlunit/src/changes/changes.xml 2013-07-26 16:42:06 UTC (rev 8423) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="rbri" issue="1523" due-to="Chuck Dumont"> + node.text is unsupported for text nodes in xml documents. + </action> <action type="fix" dev="rbri" issue="1528" due-to="Chuck Dumont"> XPathEvaluator.evaluate() ignores namespace resolver. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Text.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Text.java 2013-07-25 18:36:28 UTC (rev 8422) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Text.java 2013-07-26 16:42:06 UTC (rev 8423) @@ -16,12 +16,16 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; +import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; +import net.sourceforge.htmlunit.corejs.javascript.Undefined; +import com.gargoylesoftware.htmlunit.html.DomNode; import com.gargoylesoftware.htmlunit.html.DomText; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxFunction; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; +import com.gargoylesoftware.htmlunit.xml.XmlPage; /** * A JavaScript object for Text. @@ -30,6 +34,8 @@ * @author David K. Taylor * @author Chris Erskine * @author Ahmed Ashour + * @author Chuck Dumont + * @author Ronald Brill */ @JsxClass(domClasses = DomText.class) public class Text extends CharacterDataImpl { @@ -41,12 +47,6 @@ } /** - * Initialize this object. - */ - public void initialize() { - } - - /** * Split a Text node in two. * @param offset the character position at which to split the Text node * @return the Text node that was split from this node @@ -65,4 +65,17 @@ public String getWholeText() { return ((DomText) getDomNodeOrDie()).getWholeText(); } + + /** + * Returns the value of the node. + * @return the value of the node + */ + @JsxGetter(@WebBrowser(IE)) + public Object getText() { + final DomNode node = getDomNodeOrDie(); + if (node.getPage() instanceof XmlPage) { + return ((DomText) node).getWholeText(); + } + return Undefined.instance; + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLDocument2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLDocument2Test.java 2013-07-25 18:36:28 UTC (rev 8422) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLDocument2Test.java 2013-07-26 16:42:06 UTC (rev 8423) @@ -21,7 +21,6 @@ import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; import com.gargoylesoftware.htmlunit.BrowserRunner.Browser; import com.gargoylesoftware.htmlunit.BrowserRunner.Browsers; -import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; import com.gargoylesoftware.htmlunit.WebDriverTestCase; /** @@ -187,7 +186,6 @@ @Test @Alerts({ "content", "content" }) @Browsers(Browser.IE) - @NotYetImplemented public void text() throws Exception { final String html = "<html><head><script>\n" + " function test() {\n" |
From: <rb...@us...> - 2013-07-26 19:25:30
|
Revision: 8424 http://sourceforge.net/p/htmlunit/code/8424 Author: rbri Date: 2013-07-26 19:25:24 +0000 (Fri, 26 Jul 2013) Log Message: ----------- node.baseName not supported for XML nodes (IE) Issue 1525 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Attr.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLAttr.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/AttrTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-07-26 16:42:06 UTC (rev 8423) +++ trunk/htmlunit/src/changes/changes.xml 2013-07-26 19:25:24 UTC (rev 8424) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="rbri" issue="1525"> + node.baseName not supported for XML nodes (IE). + </action> <action type="fix" dev="rbri" issue="1523" due-to="Chuck Dumont"> node.text is unsupported for text nodes in xml documents. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Attr.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Attr.java 2013-07-26 16:42:06 UTC (rev 8423) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Attr.java 2013-07-26 19:25:24 UTC (rev 8424) @@ -19,6 +19,7 @@ import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; import net.sourceforge.htmlunit.corejs.javascript.Scriptable; import net.sourceforge.htmlunit.corejs.javascript.ScriptableObject; +import net.sourceforge.htmlunit.corejs.javascript.Undefined; import com.gargoylesoftware.htmlunit.html.DomAttr; import com.gargoylesoftware.htmlunit.html.DomElement; @@ -178,4 +179,12 @@ public DomAttr getDomNodeOrDie() throws IllegalStateException { return super.getDomNodeOrDie(); } + + /** + * {@inheritDoc} + */ + @Override + public Object getBaseName() { + return Undefined.instance; + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLAttr.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLAttr.java 2013-07-26 16:42:06 UTC (rev 8423) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLAttr.java 2013-07-26 19:25:24 UTC (rev 8424) @@ -58,6 +58,15 @@ } /** + * Returns the base name of this element. + * @return the base name of this element + */ + @JsxGetter(@WebBrowser(IE)) + public Object getBaseName() { + return getDomNodeOrDie().getLocalName(); + } + + /** * {@inheritDoc} */ @Override Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/AttrTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/AttrTest.java 2013-07-26 16:42:06 UTC (rev 8423) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/AttrTest.java 2013-07-26 19:25:24 UTC (rev 8424) @@ -278,4 +278,102 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = {"[object], undefined" }, + DEFAULT = {"[object Attr], undefined" }) + public void html_baseName() throws Exception { + html("baseName"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = {"[object], undefined" }, + DEFAULT = {"[object Attr], undefined" }) + public void html_baseURI() throws Exception { + html("baseURI"); + } + + private void html(final String methodName) throws Exception { + final String html + = "<html>\n" + + "<script>\n" + + " function test() {\n" + + " debug(document.getElementById('tester').attributes.item(0));\n" + + " }\n" + + " function debug(e) {\n" + + " alert(e);\n" + + " alert(e." + methodName + ");\n" + + " }\n" + + "</script>\n" + + "</head>\n" + + "<body onload='test()'>\n" + + "<div id='tester' testAttr='test'></div>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = {"[object]", "testAttr" }, + DEFAULT = {"[object Attr]", "undefined" }) + public void xml_baseName() throws Exception { + xml("baseName"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = {"[object]", "testAttr" }, + DEFAULT = {"[object Attr]", "undefined" }) + public void xml_baseURI() throws Exception { + xml("baseURI"); + } + + private void xml(final String methodName) throws Exception { + final String html = + "<html>\n" + + " <head>\n" + + " <script>\n" + + " function test() {\n" + + " var request;\n" + + " if (window.XMLHttpRequest) {\n" + + " request = new XMLHttpRequest();\n" + + " } else if (window.ActiveXObject) {\n" + + " request = new ActiveXObject('Microsoft.XMLHTTP');\n" + + " }\n" + + " request.open('GET', 'foo.xml', false);\n" + + " request.send('');\n" + + " var doc = request.responseXML;\n" + + " debug(doc.documentElement.childNodes[0].attributes.item(0));\n" + + " }\n" + + " function debug(e) {\n" + + " try {\n" + + " alert(e);\n" + + " } catch(ex) {alert(ex)};\n" + + " alert(e." + methodName + ");\n" + + " }\n" + + " </script>\n" + + " </head>\n" + + " <body onload='test()'>\n" + + " </body>\n" + + "</html>"; + + final String xml = + "<xml>" + + "<div testAttr='test'></div>" + + "</xml>"; + + getMockWebConnection().setDefaultResponse(xml, "text/xml"); + loadPageWithAlerts2(html); + } } |
From: <rb...@us...> - 2013-07-27 09:15:27
|
Revision: 8426 http://sourceforge.net/p/htmlunit/code/8426 Author: rbri Date: 2013-07-27 09:15:21 +0000 (Sat, 27 Jul 2013) Log Message: ----------- attr.baseURI not supported for FF; more test cases added Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Attr.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/AttrTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-07-27 06:28:42 UTC (rev 8425) +++ trunk/htmlunit/src/changes/changes.xml 2013-07-27 09:15:21 UTC (rev 8426) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="rbri"> + attr.baseURI not supported for FF. + </action> <action type="fix" dev="rbri" issue="1525"> node.baseName not supported for XML nodes (IE). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Attr.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Attr.java 2013-07-27 06:28:42 UTC (rev 8425) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Attr.java 2013-07-27 09:15:21 UTC (rev 8426) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.javascript.host; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_ATTR_FIRST_LAST_CHILD_RETURNS_NULL; +import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; import net.sourceforge.htmlunit.corejs.javascript.Scriptable; @@ -187,4 +188,13 @@ public Object getBaseName() { return Undefined.instance; } + + /** + * Returns the Base URI as a string. + * @return the Base URI as a string + */ + @JsxGetter({ @WebBrowser(FF), @WebBrowser(CHROME) }) + public String getBaseURI() { + return getDomNodeOrDie().getPage().getUrl().toExternalForm(); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/AttrTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/AttrTest.java 2013-07-27 06:28:42 UTC (rev 8425) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/AttrTest.java 2013-07-27 09:15:21 UTC (rev 8426) @@ -283,8 +283,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(IE = {"[object], undefined" }, - DEFAULT = {"[object Attr], undefined" }) + @Alerts(IE = {"[object]", "undefined" }, + DEFAULT = {"[object Attr]", "undefined" }) public void html_baseName() throws Exception { html("baseName"); } @@ -293,8 +293,8 @@ * @throws Exception if the test fails */ @Test - @Alerts(IE = {"[object], undefined" }, - DEFAULT = {"[object Attr], undefined" }) + @Alerts(IE = {"[object]", "undefined" }, + DEFAULT = {"[object Attr]", "http://localhost:12345/" }) public void html_baseURI() throws Exception { html("baseURI"); } @@ -303,18 +303,38 @@ * @throws Exception if the test fails */ @Test - @Alerts(IE = {"[object], undefined" }, - DEFAULT = {"[object Attr], null" }) + @Alerts(IE = {"[object]", "undefined" }, + DEFAULT = {"[object Attr]", "null" }) public void html_namespaceURI() throws Exception { html("namespaceURI"); } + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = {"[object]", "undefined" }, + DEFAULT = {"[object Attr]", "testattr" }) + public void html_localName() throws Exception { + html("localName"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = {"[object]", "undefined" }, + DEFAULT = {"[object Attr]", "null" }) + public void html_prefix() throws Exception { + html("prefix"); + } + private void html(final String methodName) throws Exception { final String html = "<html>\n" + "<script>\n" + " function test() {\n" - + " debug(document.getElementById('tester').attributes.item(0));\n" + + " debug(document.getElementById('tester').attributes.getNamedItem('testAttr'));\n" + " }\n" + " function debug(e) {\n" + " alert(e);\n" @@ -344,7 +364,7 @@ */ @Test @Alerts(IE = {"[object]", "undefined" }, - DEFAULT = {"[object Attr]", "undefined" }) + DEFAULT = {"[object Attr]", "http://localhost:12345/foo.xml" }) public void xml_baseURI() throws Exception { xml("baseURI"); } @@ -359,6 +379,26 @@ xml("namespaceURI"); } + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = {"[object]", "undefined" }, + DEFAULT = {"[object Attr]", "testAttr" }) + public void xml_localName() throws Exception { + xml("localName"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = {"[object]", "" }, + DEFAULT = {"[object Attr]", "null" }) + public void xml_prefix() throws Exception { + xml("prefix"); + } + private void xml(final String methodName) throws Exception { final String html = "<html>\n" |
From: <rb...@us...> - 2013-08-02 16:12:10
|
Revision: 8434 http://sourceforge.net/p/htmlunit/code/8434 Author: rbri Date: 2013-08-02 16:12:07 +0000 (Fri, 02 Aug 2013) Log Message: ----------- XMLHttpRequest open(..) methods failed when called with null for userid/password (patch Sebastian Cato) Issue 1532 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-08-02 14:41:06 UTC (rev 8433) +++ trunk/htmlunit/src/changes/changes.xml 2013-08-02 16:12:07 UTC (rev 8434) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="rbri" issue="1532" due-to="Sebastian Cato"> + XMLHttpRequest open(..) methods failed when called with null for userid/password. + </action> <action type="fix" dev="rbri" issue="1531" due-to="Sebastian Cato"> XMLHttpRequest open(..) methods delivers wrong credentials. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java 2013-08-02 14:41:06 UTC (rev 8433) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java 2013-08-02 16:12:07 UTC (rev 8434) @@ -504,10 +504,12 @@ if (Undefined.instance != user || Undefined.instance != password) { String userCred = null; String passwordCred = ""; - if (Undefined.instance != user) { + final boolean userIsNull = null == user || Undefined.instance == user; + final boolean passwordIsNull = null == password || Undefined.instance == password; + if (!userIsNull) { userCred = user.toString(); } - if (Undefined.instance != password) { + if (!passwordIsNull) { passwordCred = password.toString(); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest2Test.java 2013-08-02 14:41:06 UTC (rev 8433) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest2Test.java 2013-08-02 16:12:07 UTC (rev 8434) @@ -671,4 +671,38 @@ loadPageWithAlerts2(html, servlets); } + + /** + * Test XMLHttpRequest with basic authentication. + * @throws Exception on failure + */ + @Test + @Alerts("<xml></xml>") + public void openNullUserIdNullPassword() throws Exception { + final String html = + "<html>\n" + + " <head>\n" + + " <title>XMLHttpRequest Test</title>\n" + + " <script>\n" + + " var request;\n" + + " function testBasicAuth() {\n" + + " if (window.XMLHttpRequest) {\n" + + " request = new XMLHttpRequest();\n" + + " } else if (window.ActiveXObject) {\n" + + " request = new ActiveXObject('Microsoft.XMLHTTP');\n" + + " }\n" + + " request.open('GET', '" + URL_SECOND + "', false, null, null);\n" + + " request.send();\n" + + " alert(request.responseText);\n" + + " }\n" + + " </script>\n" + + " </head>\n" + + " <body onload='testBasicAuth()'>\n" + + " </body>\n" + + "</html>"; + + getMockWebConnection().setResponse(URL_SECOND, "<xml></xml>", "text/xml"); + + loadPageWithAlerts2(html); + } } |
From: <mgu...@us...> - 2013-08-05 09:15:16
|
Revision: 8436 http://sourceforge.net/p/htmlunit/code/8436 Author: mguillem Date: 2013-08-05 09:15:13 +0000 (Mon, 05 Aug 2013) Log Message: ----------- JavaScript: added (simple) support for window.postMessage. Issue 1481 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Event.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/MessageEvent.java 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-08-02 17:43:20 UTC (rev 8435) +++ trunk/htmlunit/src/changes/changes.xml 2013-08-05 09:15:13 UTC (rev 8436) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="mguillem" issue="1481"> + JavaScript: added (simple) support for window.postMessage. + </action> <action type="fix" dev="rbri" issue="1532" due-to="Sebastian Cato"> XMLHttpRequest open(..) methods failed when called with null for userid/password. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Event.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Event.java 2013-08-02 17:43:20 UTC (rev 8435) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Event.java 2013-08-05 09:15:13 UTC (rev 8436) @@ -125,6 +125,9 @@ /** The event type triggered by "onerror" event handlers. */ public static final String TYPE_ERROR = "error"; + /** The message event type, triggered by postMessage. */ + public static final String TYPE_MESSAGE = "message"; + /** The first event phase: the capturing phase. */ @JsxConstant(@WebBrowser(FF)) public static final short CAPTURING_PHASE = 1; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/MessageEvent.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/MessageEvent.java 2013-08-02 17:43:20 UTC (rev 8435) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/MessageEvent.java 2013-08-05 09:15:13 UTC (rev 8436) @@ -14,7 +14,6 @@ */ package com.gargoylesoftware.htmlunit.javascript.host; -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; @@ -27,7 +26,7 @@ * @author Ahmed Ashour */ @JsxClass -public class MessageEvent extends SimpleScriptable { +public class MessageEvent extends Event { private Object data_; @@ -44,6 +43,7 @@ */ public MessageEvent(final Object data) { data_ = data; + setType(TYPE_MESSAGE); } /** 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-08-02 17:43:20 UTC (rev 8435) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-08-05 09:15:13 UTC (rev 8436) @@ -2038,6 +2038,21 @@ public void setOnchange(final Object onchange) { setHandlerForJavaScript(Event.TYPE_CHANGE, onchange); } + + /** + * Posts a message. + * @param message the object passed to the window + * @param targetOrigin the origin this window must be for the event to be dispatched + * @see <a href="https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage">MDN documentation</a> + */ + @JsxFunction({@WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 9) }) + public void postMessage(final String message, final String targetOrigin) { + final MessageEvent event = new MessageEvent(message); + event.setParentScope(this); + event.setPrototype(getPrototype(event.getClass())); + + dispatchEvent(event); + } } 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-08-02 17:43:20 UTC (rev 8435) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java 2013-08-05 09:15:13 UTC (rev 8436) @@ -1162,4 +1162,30 @@ assertEquals(getExpectedAlerts(), getCollectedAlerts(driver)); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "type: message", "data: hello" }, + IE6 = { }, IE7 = { }, IE8 = { }) + public void postMessage() throws Exception { + final String html + = "<html><body><script>\n" + + "function receiveMessage(event) {\n" + + " alert('type: ' + event.type);\n" + + " alert('data: ' + event.data);\n" + + "}\n" + + "window.addEventListener('message', receiveMessage, false);\n" + + "</script>\n" + + "<iframe src='" + URL_SECOND + "'></iframe>\n" + + "</body></html>"; + + final String iframe = "<html><body><script>\n" + + "top.postMessage('hello', '*');\n" + + "</script></body></html>"; + + getMockWebConnection().setResponse(URL_SECOND, iframe); + loadPageWithAlerts2(html); + } } |
From: <rb...@us...> - 2013-08-05 16:39:31
|
Revision: 8439 http://sourceforge.net/p/htmlunit/code/8439 Author: rbri Date: 2013-08-05 16:39:28 +0000 (Mon, 05 Aug 2013) Log Message: ----------- postMessage is available in real IE 8 Modified Paths: -------------- 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/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-08-05 16:38:47 UTC (rev 8438) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-08-05 16:39:28 UTC (rev 8439) @@ -2045,7 +2045,7 @@ * @param targetOrigin the origin this window must be for the event to be dispatched * @see <a href="https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage">MDN documentation</a> */ - @JsxFunction({@WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 9) }) + @JsxFunction({@WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 8) }) public void postMessage(final String message, final String targetOrigin) { final MessageEvent event = new MessageEvent(message); event.setParentScope(this); 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-08-05 16:38:47 UTC (rev 8438) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java 2013-08-05 16:39:28 UTC (rev 8439) @@ -1168,13 +1168,16 @@ */ @Test @Alerts(DEFAULT = { "type: message", "data: hello" }, - IE6 = "exception", IE7 = "exception", IE8 = "exception") + IE6 = "exception", IE7 = "exception") public void postMessage() throws Exception { final String html = "<html><body><script>\n" + "function receiveMessage(event) {\n" + " alert('type: ' + event.type);\n" + " alert('data: ' + event.data);\n" + // + " alert('origin: ' + event.origin);\n" + // + " alert('source: ' + event.source);\n" + // + " alert('lastEventId: ' + event.lastEventId);\n" + "}\n" + "if (window.addEventListener) {\n" + " window.addEventListener('message', receiveMessage, false);\n" @@ -1188,7 +1191,7 @@ final String iframe = "<html><body><script>\n" + "try {\n" - + "top.postMessage('hello', '*');\n" + + " top.postMessage('hello', '*');\n" + "} catch(e) { alert('exception') }\n" + "</script></body></html>"; |
From: <rb...@us...> - 2013-08-05 17:43:02
|
Revision: 8440 http://sourceforge.net/p/htmlunit/code/8440 Author: rbri Date: 2013-08-05 17:42:58 +0000 (Mon, 05 Aug 2013) Log Message: ----------- window.postMessage is synchronous in IE only Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 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/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-08-05 16:39:28 UTC (rev 8439) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-08-05 17:42:58 UTC (rev 8440) @@ -1170,6 +1170,10 @@ @BrowserFeature(@WebBrowser(IE)) JS_WINDOW_IS_NOT_A_FUNCTION, + /** Window.postMessage is synchronouse. */ + @BrowserFeature(@WebBrowser(IE)) + JS_WINDOW_POST_MESSAGE_SYNCHRONOUSE, + /** Supports XML. */ @BrowserFeature({ @WebBrowser(FF), @WebBrowser(CHROME) }) JS_XML, 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-08-05 16:39:28 UTC (rev 8439) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-08-05 17:42:58 UTC (rev 8440) @@ -20,6 +20,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_WINDOW_CHANGE_OPENER_NOT_ALLOWED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_WINDOW_FRAMES_ACCESSIBLE_BY_ID; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_WINDOW_IS_NOT_A_FUNCTION; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_WINDOW_POST_MESSAGE_SYNCHRONOUSE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_XML_SUPPORT_VIA_ACTIVEXOBJECT; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; @@ -81,6 +82,7 @@ import com.gargoylesoftware.htmlunit.html.HtmlLink; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlStyle; +import com.gargoylesoftware.htmlunit.javascript.PostponedAction; import com.gargoylesoftware.htmlunit.javascript.ScriptableWithFallbackGetter; import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.background.BackgroundJavaScriptFactory; @@ -2051,7 +2053,18 @@ event.setParentScope(this); event.setPrototype(getPrototype(event.getClass())); - dispatchEvent(event); + if (getBrowserVersion().hasFeature(JS_WINDOW_POST_MESSAGE_SYNCHRONOUSE)) { + dispatchEvent(event); + return; + } + + final PostponedAction action = new PostponedAction(getDomNodeOrDie().getPage()) { + @Override + public void execute() throws Exception { + dispatchEvent(event); + } + }; + getWebWindow().getWebClient().getJavaScriptEngine().addPostponedAction(action); } } 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-08-05 16:39:28 UTC (rev 8439) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/Window2Test.java 2013-08-05 17:42:58 UTC (rev 8440) @@ -38,6 +38,7 @@ * @version $Revision$ * @author Marc Guillemot * @author Ahmed Ashour + * @author Ronald Brill */ @RunWith(BrowserRunner.class) public class Window2Test extends WebDriverTestCase { @@ -1171,22 +1172,25 @@ IE6 = "exception", IE7 = "exception") public void postMessage() throws Exception { final String html - = "<html><body><script>\n" - + "function receiveMessage(event) {\n" - + " alert('type: ' + event.type);\n" - + " alert('data: ' + event.data);\n" - // + " alert('origin: ' + event.origin);\n" - // + " alert('source: ' + event.source);\n" - // + " alert('lastEventId: ' + event.lastEventId);\n" - + "}\n" - + "if (window.addEventListener) {\n" - + " window.addEventListener('message', receiveMessage, false);\n" - + "}\n" - + "else {\n" - + " window.attachEvent('onmessage', receiveMessage);\n" - + "}\n" + = "<html>" + + "<head><title>foo</title></head>\n" + + "<body>\n" + + "<script>\n" + + " function receiveMessage(event) {\n" + + " alert('type: ' + event.type);\n" + + " alert('data: ' + event.data);\n" + // + " alert('origin: ' + event.origin);\n" + // + " alert('source: ' + event.source);\n" + // + " alert('lastEventId: ' + event.lastEventId);\n" + + " }\n" + + + " if (window.addEventListener) {\n" + + " window.addEventListener('message', receiveMessage, false);\n" + + " } else {\n" + + " window.attachEvent('onmessage', receiveMessage);\n" + + " }\n" + "</script>\n" - + "<iframe src='" + URL_SECOND + "'></iframe>\n" + + " <iframe src='" + URL_SECOND + "'></iframe>\n" + "</body></html>"; final String iframe = "<html><body><script>\n" @@ -1198,4 +1202,42 @@ getMockWebConnection().setResponse(URL_SECOND, iframe); loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = "sync: false", + IE6 = "exception", + IE7 = "exception", + IE = "sync: true") + public void postMessageSyncOrAsync() throws Exception { + final String html + = "<html>" + + "<head><title>foo</title></head>\n" + + "<body>\n" + + "<script>\n" + + " var sync = true;\n" + + " function receiveMessage(event) {\n" + + " alert('sync: ' + sync);\n" + + " }\n" + + " if (window.addEventListener) {\n" + + " window.addEventListener('message', receiveMessage, false);\n" + + " } else {\n" + + " window.attachEvent('onmessage', receiveMessage);\n" + + " }\n" + + "</script>\n" + + " <iframe src='" + URL_SECOND + "'></iframe>\n" + + "</body></html>"; + + final String iframe = "<html><body><script>\n" + + "try {\n" + + " top.postMessage('hello', '*');\n" + + " top.sync = false;\n" + + "} catch(e) { alert('exception') }\n" + + "</script></body></html>"; + + getMockWebConnection().setResponse(URL_SECOND, iframe); + loadPageWithAlerts2(html); + } } |
From: <rb...@us...> - 2013-08-07 19:15:35
|
Revision: 8444 http://sourceforge.net/p/htmlunit/code/8444 Author: rbri Date: 2013-08-07 19:15:32 +0000 (Wed, 07 Aug 2013) Log Message: ----------- In case the server reports an error via http error code, the curretn page content was not replaced with the content of that error page if the error was the result of a form submit or an anchor click. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/FailingHttpStatusCodeExceptionTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/NoHttpResponseTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-08-07 16:20:25 UTC (rev 8443) +++ trunk/htmlunit/src/changes/changes.xml 2013-08-07 19:15:32 UTC (rev 8444) @@ -8,6 +8,11 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="rbri"> + In case the server reports an error via http error code, the curretn page content + was not replaced with the content of that error page if the error was the result + of a form submit or an anchor click. + </action> <action type="fix" dev="mguillem" issue="1481"> JavaScript: added (simple) support for window.postMessage. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-08-07 16:20:25 UTC (rev 8443) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-08-07 19:15:32 UTC (rev 8444) @@ -1968,9 +1968,6 @@ else { try { final WebResponse response = loadWebResponse(request); - // check and report problems if needed - throwFailingHttpStatusCodeExceptionIfNecessary(response); - loadJob = new LoadJob(request, requestingWindow, target, response); } catch (final IOException e) { @@ -2040,6 +2037,9 @@ if (pageBeforeLoad != win.getEnclosedPage()) { updatedWindows.add(win); } + + // check and report problems if needed + throwFailingHttpStatusCodeExceptionIfNecessary(downloadedResponse.response_); } else { LOG.info("No usage of download: " + downloadedResponse); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/FailingHttpStatusCodeExceptionTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/FailingHttpStatusCodeExceptionTest.java 2013-08-07 16:20:25 UTC (rev 8443) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/FailingHttpStatusCodeExceptionTest.java 2013-08-07 19:15:32 UTC (rev 8444) @@ -19,9 +19,11 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.http.HttpStatus; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; +import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.util.NameValuePair; @@ -30,6 +32,7 @@ * * @version $Revision$ * @author Marc Guillemot + * @author Ronald Brill */ @RunWith(BrowserRunner.class) public final class FailingHttpStatusCodeExceptionTest extends SimpleWebTestCase { @@ -55,20 +58,62 @@ /** * @throws Exception if the test fails */ - @Test(expected = FailingHttpStatusCodeException.class) + @Test public void failureByGetPage() throws Exception { - getMockWebConnection().setDefaultResponse("", 404, "Not Found", "text/html"); - getWebClientWithMockWebConnection().getPage(getDefaultUrl()); + getMockWebConnection().setDefaultResponse("Error: not found", 404, "Not Found", "text/html"); + final WebClient client = getWebClientWithMockWebConnection(); + try { + client.getPage(getDefaultUrl()); + Assert.fail("FailingHttpStatusCodeException expected"); + } + catch (final FailingHttpStatusCodeException e) { + // expected + } + assertEquals("Error: not found", + client.getCurrentWindow().getEnclosedPage().getWebResponse().getContentAsString()); } /** * @throws Exception if the test fails */ - @Test(expected = FailingHttpStatusCodeException.class) + @Test public void failureByClickLink() throws Exception { final String html = "<html><body><a href='doesntExist'>go</a></body></html>"; - getMockWebConnection().setDefaultResponse("", 404, "Not Found", "text/html"); - final HtmlPage page = loadPageWithAlerts(html); - page.getAnchors().get(0).click(); + getMockWebConnection().setDefaultResponse("Error: not found", 404, "Not Found", "text/html"); + + final WebClient client = getWebClientWithMockWebConnection(); + try { + final HtmlPage page = loadPageWithAlerts(html); + page.getAnchors().get(0).click(); + } + catch (final FailingHttpStatusCodeException e) { + // expected + } + assertEquals("Error: not found", + client.getCurrentWindow().getEnclosedPage().getWebResponse().getContentAsString()); } + + /** + * @throws Exception if the test fails + */ + @Test + public void failureBySubmit() throws Exception { + final String html = "<html><body>\n" + + "<form name='form1' method='get' action='foo.html'>\n" + + " <input name='button' type='submit' id='mySubmit'/>\n" + + "</form>\n" + + "</body></html>"; + getMockWebConnection().setDefaultResponse("Error: not found", 404, "Not Found", "text/html"); + + final WebClient client = getWebClientWithMockWebConnection(); + try { + final HtmlPage page = loadPageWithAlerts(html); + ((HtmlElement) page.getElementById("mySubmit")).click(); + } + catch (final FailingHttpStatusCodeException e) { + // expected + } + assertEquals("Error: not found", + client.getCurrentWindow().getEnclosedPage().getWebResponse().getContentAsString()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/NoHttpResponseTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/NoHttpResponseTest.java 2013-08-07 16:20:25 UTC (rev 8443) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/NoHttpResponseTest.java 2013-08-07 19:15:32 UTC (rev 8444) @@ -26,7 +26,6 @@ import java.nio.CharBuffer; import java.util.concurrent.atomic.AtomicBoolean; -import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; @@ -50,9 +49,9 @@ public class NoHttpResponseTest { private static final String html = "<html><body><script>\n" - + "function fillField(){\n" - + " document.forms.loginform.textfield.value = 'new value';\n" - + "}\n" + + " function fillField(){\n" + + " document.forms.loginform.textfield.value = 'new value';\n" + + " }\n" + "</script>\n" + "<form name='loginform' action='page2' method='get'>\n" + " <input type='text' name='textfield' value='' />\n" @@ -115,9 +114,6 @@ final HtmlPage page = getWebClient().getPage(getDefaultUrl()); ((HtmlElement) page.getElementById("loginButton")).click(); } - catch (final Exception e) { - throw ExceptionUtils.getRootCause(e); - } finally { miniServer.shutDown(); } |
From: <rb...@us...> - 2013-08-25 08:04:18
|
Revision: 8446 http://sourceforge.net/p/htmlunit/code/8446 Author: rbri Date: 2013-08-25 08:04:14 +0000 (Sun, 25 Aug 2013) Log Message: ----------- WebClient.getTopLevelWindows() returns a snapshot of the list of open top level windows. This avoids ConcurrentModificationExceptions when using this list by a client. Issue 1534 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClientTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-08-25 07:29:56 UTC (rev 8445) +++ trunk/htmlunit/src/changes/changes.xml 2013-08-25 08:04:14 UTC (rev 8446) @@ -8,6 +8,10 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="rbri" issue="1534"> + WebClient.getTopLevelWindows() returns a snapshot of the list of open top level windows. + This avoids ConcurrentModificationExceptions when using this list by a client. + </action> <action type="fix" dev="rbri"> In case the server reports an error via http error code, the curretn page content was not replaced with the content of that error page if the error was the result Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-08-25 07:29:56 UTC (rev 8445) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-08-25 08:04:14 UTC (rev 8446) @@ -954,7 +954,7 @@ WebAssert.notNull("name", name); for (final WebWindow webWindow : windows_) { - if (webWindow.getName().equals(name)) { + if (name.equals(webWindow.getName())) { return webWindow; } } @@ -1362,6 +1362,8 @@ /** * Returns an immutable list of open web windows (whether they are top level windows or not). + * This is a snapshot; future changes are not reflected by this list. + * * @return an immutable list of open web windows (whether they are top level windows or not) * @see #getWebWindowByName(String) * @see #getTopLevelWindows() @@ -1386,12 +1388,14 @@ /** * Returns an immutable list of open top level windows. + * This is a snapshot; future changes are not reflected by this list. + * * @return an immutable list of open top level windows * @see #getWebWindowByName(String) * @see #getWebWindows() */ public List<TopLevelWindow> getTopLevelWindows() { - return Collections.unmodifiableList(topLevelWindows_); + return Collections.unmodifiableList(new ArrayList<TopLevelWindow>(topLevelWindows_)); } /** @@ -1701,12 +1705,7 @@ } // NB: this implementation is too simple as a new TopLevelWindow may be opened by // some JS script while we are closing the others - final List<TopLevelWindow> topWindows = new ArrayList<TopLevelWindow>(); - for (final WebWindow window : topLevelWindows_) { - if (window instanceof TopLevelWindow) { - topWindows.add((TopLevelWindow) window); - } - } + final List<TopLevelWindow> topWindows = new ArrayList<TopLevelWindow>(topLevelWindows_); for (final TopLevelWindow topWindow : topWindows) { if (topLevelWindows_.contains(topWindow)) { topWindow.close(); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClientTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClientTest.java 2013-08-25 07:29:56 UTC (rev 8445) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebClientTest.java 2013-08-25 08:04:14 UTC (rev 8446) @@ -82,6 +82,7 @@ * @author Ahmed Ashour * @author Daniel Gredler * @author Sudhan Moghe + * @author Ronald Brill */ @RunWith(BrowserRunner.class) public class WebClientTest extends SimpleWebTestCase { @@ -1627,7 +1628,7 @@ @Test public void testUrlEncoding() throws Exception { final URL url = new URL("http://host/x+y\u00E9/a\u00E9 b?c \u00E9 d"); - final HtmlPage page = loadPage(BrowserVersion.FIREFOX_3_6, "<html></html>", new ArrayList<String>(), url); + final HtmlPage page = loadPage(BrowserVersion.FIREFOX_17, "<html></html>", new ArrayList<String>(), url); final WebRequest wrs = page.getWebResponse().getWebRequest(); assertEquals("http://host/x+y%C3%A9/a%C3%A9%20b?c%20%E9%20d", wrs.getUrl()); } @@ -2158,6 +2159,35 @@ } /** + * Test that the result of getTopLevelWindows() is usable without + * getting a ConcurrentModificationException. + * + * @throws Exception if an error occurs + */ + @Test + public void getTopLevelWindowsJSConcurrency() throws Exception { + final String html = "<html><head><title>Toplevel</title></head>\n<body>\n" + + "<script>\n" + + " setInterval(function() {\n" + + " window.open('');\n" + + " }, 10);\n" + + "</script>\n" + + "</body></html>\n"; + + final WebClient client = getWebClientWithMockWebConnection(); + getMockWebConnection().setResponse(URL_FIRST, html); + + client.getPage(URL_FIRST); + final List<TopLevelWindow> windows = client.getTopLevelWindows(); + for (int i = 0; i < 100; i++) { + for (TopLevelWindow window : windows) { + Thread.sleep(13); + window.getName(); + } + } + } + + /** * Regression test for * <a href="http://sourceforge.net/support/tracker.php?aid=2819046>bug 2819046</a>. * |
From: <rb...@us...> - 2013-08-25 13:29:11
|
Revision: 8447 http://sourceforge.net/p/htmlunit/code/8447 Author: rbri Date: 2013-08-25 13:29:07 +0000 (Sun, 25 Aug 2013) Log Message: ----------- use the correct separator for headers in the preflight CORS request Issue 1535 Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequestCORSTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java 2013-08-25 08:04:14 UTC (rev 8446) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java 2013-08-25 13:29:07 UTC (rev 8447) @@ -106,6 +106,14 @@ /** All the data has been received; the complete data is available in responseBody and responseText. */ public static final int STATE_DONE = 4; + private static final String HEADER_ORIGIN = "Origin"; + private static final char REQUEST_HEADERS_SEPARATOR = ','; + + private static final String HEADER_ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method"; + private static final String HEADER_ACCESS_CONTROL_REQUEST_HEADERS = "Access-Control-Request-Headers"; + private static final String HEADER_ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; + private static final String HEADER_ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"; + private static final String[] ALL_PROPERTIES_ = {"onreadystatechange", "readyState", "responseText", "responseXML", "status", "statusText", "abort", "getAllResponseHeaders", "getResponseHeader", "open", "send", "setRequestHeader"}; @@ -497,7 +505,7 @@ if (originUrl.getPort() != -1) { origin.append(':').append(originUrl.getPort()); } - request.setAdditionalHeader("Origin", origin.toString()); + request.setAdditionalHeader(HEADER_ORIGIN, origin.toString()); } request.setHttpMethod(HttpMethod.valueOf(method.toUpperCase(Locale.ENGLISH))); @@ -635,24 +643,33 @@ private void doSend(final Context context) { final WebClient wc = getWindow().getWebWindow().getWebClient(); try { - final boolean crossOriginResourceSharing = webRequest_.getAdditionalHeaders().get("Origin") != null; + final String originHeaderValue = webRequest_.getAdditionalHeaders().get(HEADER_ORIGIN); + final boolean crossOriginResourceSharing = originHeaderValue != null; if (crossOriginResourceSharing && isPreflight()) { final WebRequest preflightRequest = new WebRequest(webRequest_.getUrl(), HttpMethod.OPTIONS); - preflightRequest.setAdditionalHeader("Origin", webRequest_.getAdditionalHeaders().get("Origin")); - preflightRequest.setAdditionalHeader("Access-Control-Request-Method", + + // header origin + preflightRequest.setAdditionalHeader(HEADER_ORIGIN, originHeaderValue); + + // header request-method + preflightRequest.setAdditionalHeader( + HEADER_ACCESS_CONTROL_REQUEST_METHOD, webRequest_.getHttpMethod().name()); + + // header request-headers final StringBuilder builder = new StringBuilder(); for (final Entry<String, String> header : webRequest_.getAdditionalHeaders().entrySet()) { final String name = header.getKey().toLowerCase(Locale.ENGLISH); - final String value = header.getValue().toLowerCase(Locale.ENGLISH); - if (isPreflightHeader(name, value)) { + if (isPreflightHeader(name, header.getValue())) { if (builder.length() != 0) { - builder.append(' '); + builder.append(REQUEST_HEADERS_SEPARATOR); } builder.append(name); } } - preflightRequest.setAdditionalHeader("Access-Control-Request-Headers", builder.toString()); + preflightRequest.setAdditionalHeader(HEADER_ACCESS_CONTROL_REQUEST_HEADERS, builder.toString()); + + // do the preflight request final WebResponse preflightResponse = wc.loadWebResponse(preflightRequest); if (!isPreflightAuthorized(preflightResponse)) { setState(STATE_HEADERS_RECEIVED, context); @@ -672,9 +689,8 @@ } boolean allowOriginResponse = true; if (crossOriginResourceSharing) { - final String value = webResponse.getResponseHeaderValue("Access-Control-Allow-Origin"); - allowOriginResponse = "*".equals(value) - || webRequest_.getAdditionalHeaders().get("Origin").equals(value); + final String value = webResponse.getResponseHeaderValue(HEADER_ACCESS_CONTROL_ALLOW_ORIGIN); + allowOriginResponse = "*".equals(value) || originHeaderValue.equals(value); } if (allowOriginResponse) { if (overriddenMimeType_ == null) { @@ -722,7 +738,7 @@ } for (final Entry<String, String> header : webRequest_.getAdditionalHeaders().entrySet()) { if (isPreflightHeader(header.getKey().toLowerCase(Locale.ENGLISH), - header.getValue().toLowerCase(Locale.ENGLISH))) { + header.getValue())) { return true; } } @@ -730,11 +746,11 @@ } private boolean isPreflightAuthorized(final WebResponse preflightResponse) { - final String originHeader = preflightResponse.getResponseHeaderValue("Access-Control-Allow-Origin"); - if (!"*".equals(originHeader) && !webRequest_.getAdditionalHeaders().get("Origin").equals(originHeader)) { + final String originHeader = preflightResponse.getResponseHeaderValue(HEADER_ACCESS_CONTROL_ALLOW_ORIGIN); + if (!"*".equals(originHeader) && !webRequest_.getAdditionalHeaders().get(HEADER_ORIGIN).equals(originHeader)) { return false; } - String headersHeader = preflightResponse.getResponseHeaderValue("Access-Control-Allow-Headers"); + String headersHeader = preflightResponse.getResponseHeaderValue(HEADER_ACCESS_CONTROL_ALLOW_HEADERS); if (headersHeader == null) { headersHeader = ""; } @@ -743,7 +759,7 @@ } for (final Entry<String, String> header : webRequest_.getAdditionalHeaders().entrySet()) { final String key = header.getKey().toLowerCase(Locale.ENGLISH); - if (isPreflightHeader(key, header.getValue().toLowerCase(Locale.ENGLISH)) + if (isPreflightHeader(key, header.getValue()) && !headersHeader.contains(key)) { return false; } @@ -752,15 +768,16 @@ } /** - * @param name header name (MUST be lower-case), for performance reasons - * @param value header value (MUST be lower-case), for performance reasons + * @param name header name (MUST be lower-case for performance reasons) + * @param value header value */ private boolean isPreflightHeader(final String name, final String value) { if ("content-type".equals(name)) { - if ("application/x-www-form-urlencoded".equals(value) - || "multipart/form-data".equals(value) - || "text/plain".equals(value) - || value.startsWith("text/plain;charset=")) { + final String lcValue = value.toLowerCase(Locale.ENGLISH); + if ("application/x-www-form-urlencoded".equals(lcValue) + || "multipart/form-data".equals(lcValue) + || "text/plain".equals(lcValue) + || lcValue.startsWith("text/plain;charset=")) { return false; } return true; Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequestCORSTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequestCORSTest.java 2013-08-25 08:04:14 UTC (rev 8446) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequestCORSTest.java 2013-08-25 13:29:07 UTC (rev 8447) @@ -38,6 +38,7 @@ * @version $Revision$ * @author Ahmed Ashour * @author Marc Guillemot + * @author Ronald Brill */ @RunWith(BrowserRunner.class) public class XMLHttpRequestCORSTest extends WebDriverTestCase { @@ -328,6 +329,45 @@ * @throws Exception if the test fails. */ @Test + @Alerts(DEFAULT = { "4", "200", "options_headers", "x-ping,x-pong" }, + IE = { "4", "200", "options_headers", "null" }) + public void preflight_many_header_values() throws Exception { + expandExpectedAlertsVariables(new URL("http://localhost:" + PORT)); + + final String html = "<html><head>\n" + + "<script>\n" + + "var xhr = " + XHRInstantiation_ + ";\n" + + "function test() {\n" + + " try {\n" + + " var url = 'http://' + window.location.hostname + ':" + PORT2 + "/preflight2';\n" + + " xhr.open('GET', url, false);\n" + + " xhr.setRequestHeader('X-PING', 'ping');\n" + + " xhr.setRequestHeader('X-PONG', 'pong');\n" + + " xhr.send();\n" + + " } catch(e) { alert('exception') }\n" + + " alert(xhr.readyState);\n" + + " alert(xhr.status);\n" + + " alert(xhr.responseXML.firstChild.childNodes[3].tagName);" + + " alert(xhr.responseXML.firstChild.childNodes[3].firstChild.nodeValue);" + + "}\n" + + "</script>\n" + + "</head>\n" + + "<body onload='test()'></body></html>"; + + PreflightServerServlet.ACCESS_CONTROL_ALLOW_ORIGIN_ = "http://localhost:" + PORT; + PreflightServerServlet.ACCESS_CONTROL_ALLOW_METHODS_ = "POST, GET, OPTIONS"; + PreflightServerServlet.ACCESS_CONTROL_ALLOW_HEADERS_ = "X-PING, X-PONG"; + final Map<String, Class<? extends Servlet>> servlets2 = new HashMap<String, Class<? extends Servlet>>(); + servlets2.put("/preflight2", PreflightServerServlet.class); + startWebServer2(".", null, servlets2); + + loadPageWithAlerts2(html, new URL(getDefaultUrl(), "/preflight1")); + } + + /** + * @throws Exception if the test fails. + */ + @Test @Alerts({ "4", "200" }) public void withCredentials() throws Exception { testWithCredentials("true"); |
From: <rb...@us...> - 2013-08-25 13:55:18
|
Revision: 8449 http://sourceforge.net/p/htmlunit/code/8449 Author: rbri Date: 2013-08-25 13:55:14 +0000 (Sun, 25 Aug 2013) Log Message: ----------- support for the type property of style elements added Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-08-25 13:30:02 UTC (rev 8448) +++ trunk/htmlunit/src/changes/changes.xml 2013-08-25 13:55:14 UTC (rev 8449) @@ -8,8 +8,8 @@ <body> <release version="2.13" date="???" description="Bugfixes"> - <action type="fix" dev="rbri" issue="1535"> - Use the correct separator for headers in the preflight CORS request. + <action type="add" dev="rbri"> + JavaScript: support for the type property of style elements added. </action> <action type="fix" dev="rbri" issue="1534"> WebClient.getTopLevelWindows() returns a snapshot of the list of open top level windows. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java 2013-08-25 13:30:02 UTC (rev 8448) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java 2013-08-25 13:55:14 UTC (rev 8449) @@ -78,4 +78,14 @@ public CSSStyleSheet getStyleSheet() { return getSheet(); } + + /** + * Returns the type of this style. + * @return the type + */ + @JsxGetter() + public String getType() { + final HtmlStyle style = (HtmlStyle) getDomNodeOrDie(); + return style.getTypeAttribute(); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java 2013-08-25 13:30:02 UTC (rev 8448) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java 2013-08-25 13:55:14 UTC (rev 8449) @@ -89,9 +89,9 @@ final String html = "<html><head><title>foo</title>\n" - + "<style id='style_none'>.a > .t { }</style>\n" - + "<style type='text/test' id='style_text'>.b > .t { }</style>\n" - + "<style type='text/html' id='style_html'>.c > .t { }</style>\n" + + "<style id='style_none'>my { }</style>\n" + + "<style type='text/test' id='style_text'>my { }</style>\n" + + "<style type='text/html' id='style_html'>my { }</style>\n" + "<script>\n" + "function doTest() {\n" @@ -108,4 +108,33 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "", "text/test", "text/css" }) + public void type() throws Exception { + final String html + = "<html><head><title>foo</title>\n" + + + "<style id='style_none'>.a > .t { }</style>\n" + + "<style type='text/test' id='style_text'>.b > .t { }</style>\n" + + "<style type='text/css' id='style_css'>.c > .t { }</style>\n" + + + "<script>\n" + + "function doTest() {\n" + + " style = document.getElementById('style_none');\n" + + " alert(style.type);\n" + + " style = document.getElementById('style_text');\n" + + " alert(style.type);\n" + + " style = document.getElementById('style_css');\n" + + " alert(style.type);\n" + + "}\n" + + "</script>\n" + + "</head><body onload='doTest()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } } |
From: <rb...@us...> - 2013-08-25 15:42:38
|
Revision: 8450 http://sourceforge.net/p/htmlunit/code/8450 Author: rbri Date: 2013-08-25 15:42:34 +0000 (Sun, 25 Aug 2013) Log Message: ----------- support for the 'media' property of style elements added Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-08-25 13:55:14 UTC (rev 8449) +++ trunk/htmlunit/src/changes/changes.xml 2013-08-25 15:42:34 UTC (rev 8450) @@ -9,7 +9,7 @@ <body> <release version="2.13" date="???" description="Bugfixes"> <action type="add" dev="rbri"> - JavaScript: support for the type property of style elements added. + JavaScript: support for the 'type' and 'media' property of style elements added. </action> <action type="fix" dev="rbri" issue="1534"> WebClient.getTopLevelWindows() returns a snapshot of the list of open top level windows. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java 2013-08-25 13:55:14 UTC (rev 8449) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java 2013-08-25 15:42:34 UTC (rev 8450) @@ -34,6 +34,7 @@ * @version $Revision$ * @author Ahmed Ashour * @author Marc Guillemot + * @author Ronald Brill */ @JsxClass(domClasses = HtmlStyle.class) public class HTMLStyleElement extends HTMLElement { @@ -88,4 +89,14 @@ final HtmlStyle style = (HtmlStyle) getDomNodeOrDie(); return style.getTypeAttribute(); } + + /** + * Returns the media of this style. + * @return the media + */ + @JsxGetter() + public String getMedia() { + final HtmlStyle style = (HtmlStyle) getDomNodeOrDie(); + return style.getAttribute("media"); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java 2013-08-25 13:55:14 UTC (rev 8449) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java 2013-08-25 15:42:34 UTC (rev 8450) @@ -89,9 +89,9 @@ final String html = "<html><head><title>foo</title>\n" - + "<style id='style_none'>my { }</style>\n" - + "<style type='text/test' id='style_text'>my { }</style>\n" - + "<style type='text/html' id='style_html'>my { }</style>\n" + + "<style id='style_none'>.a > .t { }</style>\n" + + "<style type='text/test' id='style_text'>.b > .t { }</style>\n" + + "<style type='text/html' id='style_html'>.c > .t { }</style>\n" + "<script>\n" + "function doTest() {\n" @@ -118,9 +118,9 @@ final String html = "<html><head><title>foo</title>\n" - + "<style id='style_none'>.a > .t { }</style>\n" - + "<style type='text/test' id='style_text'>.b > .t { }</style>\n" - + "<style type='text/css' id='style_css'>.c > .t { }</style>\n" + + "<style id='style_none'>my { }</style>\n" + + "<style type='text/test' id='style_text'>my { }</style>\n" + + "<style type='text/css' id='style_css'>my { }</style>\n" + "<script>\n" + "function doTest() {\n" @@ -137,4 +137,33 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "", "all", "screen, print,test" }) + public void media() throws Exception { + final String html + = "<html><head><title>foo</title>\n" + + + "<style id='style_none'>my { }</style>\n" + + "<style media='all' id='style_all'>my { }</style>\n" + + "<style media='screen, print,test' id='style_some'>my { }</style>\n" + + + "<script>\n" + + "function doTest() {\n" + + " style = document.getElementById('style_none');\n" + + " alert(style.media);\n" + + " style = document.getElementById('style_all');\n" + + " alert(style.media);\n" + + " style = document.getElementById('style_some');\n" + + " alert(style.media);\n" + + "}\n" + + "</script>\n" + + "</head><body onload='doTest()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } } |
From: <rb...@us...> - 2013-08-29 19:59:33
|
Revision: 8459 http://sourceforge.net/p/htmlunit/code/8459 Author: rbri Date: 2013-08-29 19:59:29 +0000 (Thu, 29 Aug 2013) Log Message: ----------- correct processing of the target when for anchors with hash-only href Issue 1537 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchor2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchorTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-08-28 09:19:01 UTC (rev 8458) +++ trunk/htmlunit/src/changes/changes.xml 2013-08-29 19:59:29 UTC (rev 8459) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="add" dev="rbri" issue="1537"> + Correct processing of the target when for anchors with hash-only href. + </action> <action type="add" dev="rbri"> JavaScript: support for the 'type' and 'media' property of style elements added. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-08-28 09:19:01 UTC (rev 8458) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2013-08-29 19:59:29 UTC (rev 8459) @@ -1962,7 +1962,7 @@ final LoadJob loadJob; if (justHashJump) { - loadJob = new LoadJob(request, win, target, url); + loadJob = new LoadJob(request, requestingWindow, target, url); } else { try { @@ -2006,25 +2006,24 @@ LOG.info("No usage of download: " + downloadedResponse); continue; } - if (downloadedResponse.urlWithOnlyHashChange_ != null) { - final WebWindow window = downloadedResponse.requestingWindow_; - final HtmlPage page = (HtmlPage) window.getEnclosedPage(); - page.getWebResponse().getWebRequest().setUrl(downloadedResponse.urlWithOnlyHashChange_); - window.getHistory().addPage(page); + final WebWindow window = resolveWindow(downloadedResponse.requestingWindow_, + downloadedResponse.target_); + if (!updatedWindows.contains(window)) { + final WebWindow win = openTargetWindow(downloadedResponse.requestingWindow_, + downloadedResponse.target_, "_self"); + if (downloadedResponse.urlWithOnlyHashChange_ != null) { + final HtmlPage page = (HtmlPage) downloadedResponse.requestingWindow_.getEnclosedPage(); + page.getWebResponse().getWebRequest().setUrl(downloadedResponse.urlWithOnlyHashChange_); + win.getHistory().addPage(page); - // update location.hash - final Window jsWindow = (Window) window.getScriptObject(); - if (null != jsWindow) { - final Location location = jsWindow.getLocation(); - location.setHash(downloadedResponse.urlWithOnlyHashChange_.getRef()); + // update location.hash + final Window jsWindow = (Window) win.getScriptObject(); + if (null != jsWindow) { + final Location location = jsWindow.getLocation(); + location.setHash(downloadedResponse.urlWithOnlyHashChange_.getRef()); + } } - } - else { - final WebWindow window = resolveWindow(downloadedResponse.requestingWindow_, - downloadedResponse.target_); - if (!updatedWindows.contains(window)) { - final WebWindow win = openTargetWindow(downloadedResponse.requestingWindow_, - downloadedResponse.target_, "_self"); + else { final Page pageBeforeLoad = win.getEnclosedPage(); loadWebResponseInto(downloadedResponse.response_, win); @@ -2040,10 +2039,10 @@ // check and report problems if needed throwFailingHttpStatusCodeExceptionIfNecessary(downloadedResponse.response_); } - else { - LOG.info("No usage of download: " + downloadedResponse); - } } + else { + LOG.info("No usage of download: " + downloadedResponse); + } } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchor2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchor2Test.java 2013-08-28 09:19:01 UTC (rev 8458) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchor2Test.java 2013-08-29 19:59:29 UTC (rev 8459) @@ -262,4 +262,23 @@ assertEquals(new URL(getDefaultUrl(), "page2.html").toString(), driver.getCurrentUrl()); } + /** + * @throws Exception if an error occurs + */ + @Test + public void clickBlankTargetHashOnly() throws Exception { + final String html = + "<html>\n" + + "<head><title>foo</title></head>\n" + + "<body>\n" + + "<a id='a' target='_blank' href='#'>Foo</a>\n" + + "</body></html>\n"; + + final WebDriver driver = loadPage2(html); + assertEquals(1, driver.getWindowHandles().size()); + + final WebElement tester = driver.findElement(By.id("a")); + tester.click(); + assertEquals(2, driver.getWindowHandles().size()); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchorTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchorTest.java 2013-08-28 09:19:01 UTC (rev 8458) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlAnchorTest.java 2013-08-29 19:59:29 UTC (rev 8459) @@ -592,10 +592,19 @@ */ @Test public void testHashAnchor() throws Exception { - final String html = "<html><body><a id='a' href='#a'>a</a></body></html>"; + final String html = "<html><body>" + + "<a id='a' href='#a'>a</a>" + + "<a id='a_target' href='#target' target='_blank'>target</a>" + + "</body></html>"; HtmlPage page = loadPage(html); - page = page.getHtmlElementById("a").click(); + HtmlPage targetPage = page.getHtmlElementById("a").click(); assertEquals(new URL(getDefaultUrl(), "#a"), page.getUrl()); + assertEquals(page.getEnclosingWindow(), targetPage.getEnclosingWindow()); + + page = loadPage(html); + targetPage = page.getHtmlElementById("a_target").click(); + assertEquals(new URL(getDefaultUrl(), "#target"), targetPage.getUrl()); + assertFalse(page.getEnclosingWindow().equals(targetPage.getEnclosingWindow())); } /** |
From: <mgu...@us...> - 2013-09-11 08:00:22
|
Revision: 8466 http://sourceforge.net/p/htmlunit/code/8466 Author: mguillem Date: 2013-09-11 08:00:18 +0000 (Wed, 11 Sep 2013) Log Message: ----------- JavaScript: fixed ClassCastException on TypedArray creation with start offset specified. (#1542) Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/arrays/ArrayBufferViewBase.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/arrays/Int8ArrayTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-08 17:45:52 UTC (rev 8465) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-11 08:00:18 UTC (rev 8466) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="mguillem" issue="1542"> + JavaScript: fixed ClassCastException on TypedArray creation with start offset specified. + </action> <action type="add" dev="rbri" issue="1537"> Correct processing of the target window for anchors with hash-only href attribute. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/arrays/ArrayBufferViewBase.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/arrays/ArrayBufferViewBase.java 2013-09-08 17:45:52 UTC (rev 8465) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/arrays/ArrayBufferViewBase.java 2013-09-11 08:00:18 UTC (rev 8466) @@ -55,13 +55,17 @@ } else if (object instanceof ArrayBuffer) { final ArrayBuffer array = (ArrayBuffer) object; - if (byteOffset == Undefined.instance) { - byteOffset = 0; + + double dbByteOffset = Context.toNumber(byteOffset); + if (dbByteOffset != dbByteOffset) { // test if == NaN + dbByteOffset = 0; } - if (length == Undefined.instance) { - length = array.getByteLength(); + + double dbLength = Context.toNumber(length); + if (dbLength != dbLength) { // test if == NaN + dbLength = array.getByteLength(); } - super.constructor(array, (Integer) byteOffset, (Integer) length); + super.constructor(array, (int) dbByteOffset, (int) dbLength); } else { Context.reportRuntimeError("Invalid type " + object.getClass().getName()); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/arrays/Int8ArrayTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/arrays/Int8ArrayTest.java 2013-09-08 17:45:52 UTC (rev 8465) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/arrays/Int8ArrayTest.java 2013-09-11 08:00:18 UTC (rev 8466) @@ -26,6 +26,7 @@ * * @version $Revision$ * @author Ahmed Ashour + * @author Marc Guillemot */ @RunWith(BrowserRunner.class) public class Int8ArrayTest extends WebDriverTestCase { @@ -82,6 +83,31 @@ * @throws Exception if the test fails */ @Test + @Alerts(IE = "exception", FF3_6 = "exception", DEFAULT = { "2", "-45", "52" }) + public void bufferConstructor() throws Exception { + final String html + = "<html><head><title>foo</title><script>\n" + + "function test() {\n" + + " try {\n" + + " var array = new Int8Array([17, -45.3, 52, 123]);\n" + + " var array2 = new Int8Array(array.buffer, 1, 2);\n" + + " alert(array2.length);\n" + + " for (var i = 0; i < array2.length; i++)\n" + + " alert(array2[i]);\n" + + " } catch(e) {\n" + + " alert('exception');\n" + + " }\n" + + "}\n" + + "</script></head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts(IE = "exception", FF3_6 = "exception", DEFAULT = "1") public void constant() throws Exception { final String html |
From: <asa...@us...> - 2013-09-12 11:39:32
|
Revision: 8473 http://sourceforge.net/p/htmlunit/code/8473 Author: asashour Date: 2013-09-12 11:39:28 +0000 (Thu, 12 Sep 2013) Log Message: ----------- - Fix 'unused' and some deprecation warnings Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/geo/Geolocation.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlElementTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfigurationTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2013-09-12 11:07:13 UTC (rev 8472) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElement.java 2013-09-12 11:39:28 UTC (rev 8473) @@ -538,11 +538,15 @@ } final Event keyDown = new KeyboardEvent(this, Event.TYPE_KEY_DOWN, keyCode, shiftKey, ctrlKey, altKey); - final ScriptResult keyDownResult = fireEvent(keyDown); + @SuppressWarnings("unused") + final ScriptResult keyDownResult = fireEvent(keyDown); + final BrowserVersion browserVersion = page.getWebClient().getBrowserVersion(); if (browserVersion.hasFeature(KEYBOARD_EVENT_SPECIAL_KEYPRESS)) { final Event keyPress = new KeyboardEvent(this, Event.TYPE_KEY_PRESS, keyCode, shiftKey, ctrlKey, altKey); + + @SuppressWarnings("unused") final ScriptResult keyPressResult = fireEvent(keyPress); } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/geo/Geolocation.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/geo/Geolocation.java 2013-09-12 11:07:13 UTC (rev 8472) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/geo/Geolocation.java 2013-09-12 11:39:28 UTC (rev 8473) @@ -55,8 +55,10 @@ /* Do not use this URL without Google permission! */ private static String PROVIDER_URL_ = "https://maps.googleapis.com/maps/api/browserlocation/json"; private Function successHandler_; - private Function errorHandler_; + @SuppressWarnings("unused") + private Function errorHandler_; + /** * Creates an instance. JavaScript objects must have a default constructor. */ Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlElementTest.java 2013-09-12 11:07:13 UTC (rev 8472) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlElementTest.java 2013-09-12 11:39:28 UTC (rev 8473) @@ -451,7 +451,7 @@ final HtmlPage page = loadPage(htmlContent); final HtmlForm form = page.getHtmlElementById("form1"); - final HtmlInput input = form.getElementById("foo"); + final HtmlInput input = page.getHtmlElementById("foo"); assertSame(form, input.getEnclosingForm()); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfigurationTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfigurationTest.java 2013-09-12 11:07:13 UTC (rev 8472) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfigurationTest.java 2013-09-12 11:39:28 UTC (rev 8473) @@ -182,6 +182,7 @@ list.add(entryName.replace('/', '.').replace('\\', '.').replace(".class", "")); } } + jarFile.close(); } catch (final IOException e) { throw new RuntimeException(packageName + " does not appear to be a valid package", e); |
From: <asa...@us...> - 2013-09-14 21:19:23
|
Revision: 8482 http://sourceforge.net/p/htmlunit/code/8482 Author: asashour Date: 2013-09-14 21:19:01 +0000 (Sat, 14 Sep 2013) Log Message: ----------- KeyDataPair: deprecate getContentType(), as it should be named 'getMimeType()', initial part for migration to HttpClient 4.3 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/KeyDataPair.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlFileInput2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlFileInputTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-14 09:41:02 UTC (rev 8481) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-14 21:19:01 UTC (rev 8482) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="update" dev="asashour"> + KeyDataPair: deprecate getContentType(). + </action> <action type="update" dev="rbri"> CSS: cssparser updated to 0.9.10. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2013-09-14 09:41:02 UTC (rev 8481) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2013-09-14 21:19:01 UTC (rev 8482) @@ -417,9 +417,9 @@ } ContentBody buildFilePart(final KeyDataPair pairWithFile) { - String contentType = pairWithFile.getContentType(); - if (contentType == null) { - contentType = "application/octet-stream"; + String mimeType = pairWithFile.getMimeType(); + if (mimeType == null) { + mimeType = "application/octet-stream"; } final File file = pairWithFile.getFile(); @@ -427,20 +427,20 @@ if (pairWithFile.getData() != null) { if (file == null) { return new InputStreamBody( - new ByteArrayInputStream(pairWithFile.getData()), contentType, pairWithFile.getValue()); + new ByteArrayInputStream(pairWithFile.getData()), mimeType, pairWithFile.getValue()); } if (webClient_.getBrowserVersion().hasFeature(HEADER_CONTENT_DISPOSITION_ABSOLUTE_PATH)) { return new InputStreamBody( - new ByteArrayInputStream(pairWithFile.getData()), contentType, file.getAbsolutePath()); + new ByteArrayInputStream(pairWithFile.getData()), mimeType, file.getAbsolutePath()); } return new InputStreamBody( - new ByteArrayInputStream(pairWithFile.getData()), contentType, file.getName()); + new ByteArrayInputStream(pairWithFile.getData()), mimeType, file.getName()); } if (file == null) { - return new InputStreamBody(new ByteArrayInputStream(new byte[0]), contentType, pairWithFile.getValue()) { + return new InputStreamBody(new ByteArrayInputStream(new byte[0]), mimeType, pairWithFile.getValue()) { // Overridden in order not to have a chunked response. @Override public long getContentLength() { @@ -449,7 +449,7 @@ }; } - return new FileBody(pairWithFile.getFile(), contentType) { + return new FileBody(pairWithFile.getFile(), mimeType) { @Override public String getFilename() { if (getFile() == null) { Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/KeyDataPair.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/KeyDataPair.java 2013-09-14 09:41:02 UTC (rev 8481) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/KeyDataPair.java 2013-09-14 21:19:01 UTC (rev 8482) @@ -23,11 +23,12 @@ * @author Brad Clarke * @author David D. Kilzer * @author Mike Bowler + * @author Ahmed Ashour */ public class KeyDataPair extends NameValuePair { private final File fileObject_; - private final String contentType_; + private final String mimeType_; private final String charset_; private byte[] data_; @@ -36,10 +37,10 @@ * * @param key the key * @param file the file - * @param contentType the content type + * @param mimeType the MIME type * @param charset the charset encoding */ - public KeyDataPair(final String key, final File file, final String contentType, + public KeyDataPair(final String key, final File file, final String mimeType, final String charset) { super(key, file.getName()); @@ -51,7 +52,7 @@ fileObject_ = null; } - contentType_ = contentType; + mimeType_ = mimeType; charset_ = charset; } @@ -95,12 +96,22 @@ /** * Gets the content type for this file upload. * @return the content type + * @deprecated as of 2.13, please use {@link #getMimeType()} */ + @Deprecated public String getContentType() { - return contentType_; + return getMimeType(); } /** + * Gets the MIME type for this file upload. + * @return the MIME type + */ + public String getMimeType() { + return mimeType_; + } + + /** * Gets in-memory data assigned to file value. * @return <code>null</code> if the file content should be used. */ Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlFileInput2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlFileInput2Test.java 2013-09-14 09:41:02 UTC (rev 8481) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlFileInput2Test.java 2013-09-14 21:19:01 UTC (rev 8482) @@ -19,7 +19,6 @@ import java.io.InputStream; import java.io.Writer; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -106,7 +105,6 @@ * {@inheritDoc} */ @Override - @SuppressWarnings("unchecked") protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); @@ -115,7 +113,7 @@ if (ServletFileUpload.isMultipartContent(request)) { try { final ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - for (final FileItem item : (List<FileItem>) upload.parseRequest(request)) { + for (final FileItem item : upload.parseRequest(request)) { if ("myInput".equals(item.getFieldName())) { writer.write("CONTENT_TYPE:" + item.getContentType()); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlFileInputTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlFileInputTest.java 2013-09-14 09:41:02 UTC (rev 8481) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlFileInputTest.java 2013-09-14 21:19:01 UTC (rev 8482) @@ -28,7 +28,6 @@ import java.net.URLDecoder; import java.nio.charset.Charset; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -44,6 +43,7 @@ import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; +import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; @@ -164,10 +164,10 @@ makeHttpMethod.setAccessible(true); final HttpPost httpPost = (HttpPost) makeHttpMethod .invoke(new HttpWebConnection(client), webConnection.getLastWebRequest()); - final MultipartEntity multipartEntity = (MultipartEntity) httpPost.getEntity(); + final HttpEntity httpEntity = httpPost.getEntity(); final ByteArrayOutputStream out = new ByteArrayOutputStream(); - multipartEntity.writeTo(out); + httpEntity.writeTo(out); out.close(); Assert.assertTrue( @@ -212,10 +212,10 @@ makeHttpMethod.setAccessible(true); final HttpPost httpPost = (HttpPost) makeHttpMethod .invoke(new HttpWebConnection(client), webConnection.getLastWebRequest()); - final MultipartEntity multipartEntity = (MultipartEntity) httpPost.getEntity(); + final HttpEntity httpEntity = httpPost.getEntity(); final ByteArrayOutputStream out = new ByteArrayOutputStream(); - multipartEntity.writeTo(out); + httpEntity.writeTo(out); out.close(); if (getBrowserVersion().isIE()) { @@ -266,10 +266,10 @@ makeHttpMethod.setAccessible(true); final HttpPost httpPost = (HttpPost) makeHttpMethod .invoke(new HttpWebConnection(client), webConnection.getLastWebRequest()); - final MultipartEntity multipartEntity = (MultipartEntity) httpPost.getEntity(); + final HttpEntity httpEntity = httpPost.getEntity(); final ByteArrayOutputStream out = new ByteArrayOutputStream(); - multipartEntity.writeTo(out); + httpEntity.writeTo(out); out.close(); assertTrue(out.toString() @@ -336,13 +336,13 @@ f.getInputByName("mysubmit").click(); final KeyDataPair pair = (KeyDataPair) webConnection.getLastParameters().get(0); assertNotNull(pair.getFile()); - Assert.assertFalse("Content type: " + pair.getContentType(), "text/webtest".equals(pair.getContentType())); + Assert.assertFalse("Content type: " + pair.getMimeType(), "text/webtest".equals(pair.getMimeType())); fileInput.setContentType("text/webtest"); f.getInputByName("mysubmit").click(); final KeyDataPair pair2 = (KeyDataPair) webConnection.getLastParameters().get(0); assertNotNull(pair2.getFile()); - assertEquals("text/webtest", pair2.getContentType()); + assertEquals("text/webtest", pair2.getMimeType()); } /** @@ -463,7 +463,6 @@ * {@inheritDoc} */ @Override - @SuppressWarnings("unchecked") protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); @@ -472,7 +471,7 @@ if (ServletFileUpload.isMultipartContent(request)) { try { final ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - for (final FileItem item : (List<FileItem>) upload.parseRequest(request)) { + for (final FileItem item : upload.parseRequest(request)) { if ("myInput".equals(item.getFieldName())) { final String path = item.getName(); for (final char ch : path.toCharArray()) { |
From: <rb...@us...> - 2013-09-15 15:34:25
|
Revision: 8486 http://sourceforge.net/p/htmlunit/code/8486 Author: rbri Date: 2013-09-15 15:34:22 +0000 (Sun, 15 Sep 2013) Log Message: ----------- Missing setter for element.outerHTML in FF17 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-15 14:20:49 UTC (rev 8485) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-15 15:34:22 UTC (rev 8486) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="add" dev="rbri"> + JavaScript: Missing setter for element.outerHTML in FF17 fixed. + </action> <action type="update" dev="asashour"> Upgrade Apache HttpClient to 4.3. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-15 14:20:49 UTC (rev 8485) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-15 15:34:22 UTC (rev 8486) @@ -1050,7 +1050,7 @@ * @param value the new value for replacing this node * @see <a href="http://msdn.microsoft.com/en-us/library/ms534310.aspx">MSDN documentation</a> */ - @JsxSetter({ @WebBrowser(IE), @WebBrowser(CHROME) }) + @JsxSetter({ @WebBrowser(IE), @WebBrowser(CHROME), @WebBrowser(value = FF, minVersion = 11) }) public void setOuterHTML(final String value) { final DomNode domNode = getDomNodeOrDie(); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2013-09-15 14:20:49 UTC (rev 8485) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2013-09-15 15:34:22 UTC (rev 8486) @@ -812,6 +812,28 @@ } /** + * Verifies outerHTML, innerHTML and innerText for newly created div. + * @throws Exception if the test fails + */ + @Alerts(DEFAULT = { "true", "true", "false" }, + FF3_6 = { "false", "true", "false" }, + IE = { "true", "true", "true" }) + @Test + public void outerHTMLinNewDiv() throws Exception { + final String html = "<html><body onload='test()'><script>\n" + + " function test() {\n" + + " var div = document.createElement('div');\n" + + " alert('outerHTML' in div);\n" + + " alert('innerHTML' in div);\n" + + " alert('innerText' in div);\n" + + " }\n" + + "</script>\n" + + "<div id='div'><span class='a b'></span></div>\n" + + "</body></html>"; + loadPageWithAlerts2(html); + } + + /** * Verifies that empty tags are not abbreviated into their <tag/> form. * @throws Exception if the test fails */ @@ -983,7 +1005,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddTextToBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "New cell value"); loadPageWithAlerts2(html); @@ -1000,7 +1021,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddTextToInline() throws Exception { final String html = createPageForSetOuterHTML("span", "New cell value"); loadPageWithAlerts2(html); @@ -1017,7 +1037,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddBlockToBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "<div>test</div>"); loadPageWithAlerts2(html); @@ -1034,7 +1053,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddBlockToInline() throws Exception { final String html = createPageForSetOuterHTML("span", "<div>test</div>"); loadPageWithAlerts2(html); @@ -1051,7 +1069,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddInlineToInline() throws Exception { final String html = createPageForSetOuterHTML("span", "<span>test</span>"); loadPageWithAlerts2(html); @@ -1068,7 +1085,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddInlineToBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "<span>test</span>"); loadPageWithAlerts2(html); @@ -1085,7 +1101,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddEmpty() throws Exception { final String html = createPageForSetOuterHTML("div", "<br>"); loadPageWithAlerts2(html); @@ -1183,7 +1198,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddUnclosedParagraph() throws Exception { final String html = createPageForSetOuterHTML("div", "<p>test"); loadPageWithAlerts2(html); @@ -1219,7 +1233,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddSelfClosingBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "<div/>"); loadPageWithAlerts2(html); @@ -1255,7 +1268,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddSelfClosingInline() throws Exception { final String html = createPageForSetOuterHTML("div", "<span/>"); loadPageWithAlerts2(html); @@ -1272,7 +1284,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF10 = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(FF17) public void setOuterHTMLAddSelfClosingEmpty() throws Exception { final String html = createPageForSetOuterHTML("div", "<br/>"); loadPageWithAlerts2(html); |
From: <rb...@us...> - 2013-09-15 16:46:48
|
Revision: 8489 http://sourceforge.net/p/htmlunit/code/8489 Author: rbri Date: 2013-09-15 16:46:45 +0000 (Sun, 15 Sep 2013) Log Message: ----------- fix the remaining FF17 test regarding outerHTML Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-09-15 16:07:25 UTC (rev 8488) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-09-15 16:46:45 UTC (rev 8489) @@ -1014,6 +1014,10 @@ @BrowserFeature(@WebBrowser(IE)) JS_OPACITY_ACCEPTS_ARBITRARY_VALUES, + /** element.outerHTML handles the body and head tag as readonly (IE). */ + @BrowserFeature(@WebBrowser(IE)) + JS_OUTER_HTML_BODY_HEAD_READONLY, + /** If <tt>true</tt>, then treat <tt>__parent__</tt> and <tt>__proto__</tt> as special properties. */ @BrowserFeature(@WebBrowser(IE)) JS_PARENT_PROTO_PROPERTIES, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-15 16:07:25 UTC (rev 8488) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-15 16:46:45 UTC (rev 8489) @@ -34,6 +34,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_INNER_HTML_REDUCE_WHITESPACES; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_OFFSET_PARENT_THROWS_NOT_ATTACHED; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_OUTER_HTML_BODY_HEAD_READONLY; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_PREFIX_RETURNS_EMPTY_WHEN_UNDEFINED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_SET_ATTRIBUTE_CONSIDERS_ATTR_FOR_CLASS_AS_REAL; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_SET_ATTRIBUTE_SUPPORTS_EVENT_HANDLERS; @@ -361,11 +362,13 @@ Arrays.asList(new String[] {"html", "table", "tbody", "tfoot", "thead", "tr"}); /** - * The tag names of the objects for which outerHTML is read only + * The tag names of the objects for which outerHTML is read only. + * Note: IE additionally handles the body and head tag as read only. + * see feature JS_OUTER_HTML_BODY_READONLY */ private static final List<String> OUTER_HTML_READONLY = Arrays.asList(new String[] { - "body", "caption", "col", "colgroup", "frameset", "head", + "caption", "col", "colgroup", "frameset", "html", "tbody", "td", "tfoot", "th", "thead", "tr"}); /** @@ -1053,9 +1056,12 @@ @JsxSetter({ @WebBrowser(IE), @WebBrowser(CHROME), @WebBrowser(value = FF, minVersion = 11) }) public void setOuterHTML(final String value) { final DomNode domNode = getDomNodeOrDie(); + final String nodeName = domNode.getNodeName(); - if (OUTER_HTML_READONLY.contains(domNode.getNodeName())) { - throw Context.reportRuntimeError("outerHTML is read-only for tag " + domNode.getNodeName()); + if (OUTER_HTML_READONLY.contains(nodeName) + || (getBrowserVersion().hasFeature(JS_OUTER_HTML_BODY_HEAD_READONLY) + && ("body".equals(nodeName) || "head".equals(nodeName)))) { + throw Context.reportRuntimeError("outerHTML is read-only for tag " + nodeName); } final DomDocumentFragment fragment = (DomDocumentFragment) domNode.getPage().createDocumentFragment(); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2013-09-15 16:07:25 UTC (rev 8488) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2013-09-15 16:46:45 UTC (rev 8489) @@ -1114,7 +1114,6 @@ @Alerts(IE = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" }, FF17 = { "-0", "1", "2", "3", "-4", "5", "6", "7", "8", "9", "10", "11" }, DEFAULT = { "-0", "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9", "-10", "-11" }) - @NotYetImplemented(FF17) public void setOuterHTMLToReadOnly() throws Exception { final String html = "<html>\n" + "<head>\n" |
From: <asa...@us...> - 2013-09-20 23:48:44
|
Revision: 8500 http://sourceforge.net/p/htmlunit/code/8500 Author: asashour Date: 2013-09-20 23:48:39 +0000 (Fri, 20 Sep 2013) Log Message: ----------- JavaScript: HTMLStyleElement.type is writable Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/CookieManager.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlStyle.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-18 20:45:37 UTC (rev 8499) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-20 23:48:39 UTC (rev 8500) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="asashour"> + JavaScript: HTMLStyleElement.type is writable. + </action> <action type="fix" dev="rbri"> JavaScript: Missing setter for element.outerHTML in FF17 fixed. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/CookieManager.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/CookieManager.java 2013-09-18 20:45:37 UTC (rev 8499) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/CookieManager.java 2013-09-20 23:48:39 UTC (rev 8500) @@ -27,7 +27,7 @@ import org.apache.commons.collections.set.ListOrderedSet; import org.apache.commons.lang3.StringUtils; -import org.apache.http.client.params.CookiePolicy; +import org.apache.http.client.config.CookieSpecs; import org.apache.http.cookie.CookieOrigin; import org.apache.http.cookie.CookieSpec; import org.apache.http.cookie.CookieSpecRegistry; @@ -48,9 +48,9 @@ /** * HtmlUnit's cookie policy is to be browser-compatible. Code which requires access to * HtmlUnit's cookie policy should use this constant, rather than making assumptions and using - * one of the HttpClient {@link CookiePolicy} constants directly. + * one of the HttpClient {@link CookieSpecs} constants directly. */ - public static final String HTMLUNIT_COOKIE_POLICY = CookiePolicy.BROWSER_COMPATIBILITY; + public static final String HTMLUNIT_COOKIE_POLICY = CookieSpecs.BROWSER_COMPATIBILITY; /** Whether or not cookies are enabled. */ private boolean cookiesEnabled_; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlStyle.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlStyle.java 2013-09-18 20:45:37 UTC (rev 8499) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlStyle.java 2013-09-20 23:48:39 UTC (rev 8500) @@ -57,6 +57,15 @@ } /** + * Sets the value of the attribute "type". + * + * @param type the new type + */ + public final void setTypeAttribute(final String type) { + setAttribute("type", type); + } + + /** * Returns the value of the attribute "media". Refer to the * <a href='http://www.w3.org/TR/html401/'>HTML 4.01</a> * documentation for details on the use of this attribute. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java 2013-09-18 20:45:37 UTC (rev 8499) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElement.java 2013-09-20 23:48:39 UTC (rev 8500) @@ -25,6 +25,7 @@ import com.gargoylesoftware.htmlunit.html.HtmlStyle; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxSetter; import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; import com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleSheet; @@ -91,6 +92,16 @@ } /** + * Sets the type of this style. + * @param type the new type + */ + @JsxSetter() + public void setType(final String type) { + final HtmlStyle style = (HtmlStyle) getDomNodeOrDie(); + style.setTypeAttribute(type); + } + + /** * Returns the media of this style. * @return the media */ Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java 2013-09-18 20:45:37 UTC (rev 8499) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLStyleElementTest.java 2013-09-20 23:48:39 UTC (rev 8500) @@ -166,4 +166,28 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "", "text/css" }) + public void type_setter() throws Exception { + final String html + = "<html><head><title>foo</title>\n" + + "<style id='style_none'></style>\n" + + + "<script>\n" + + "function doTest() {\n" + + " style = document.getElementById('style_none');\n" + + " alert(style.type);\n" + + " style.type = 'text/css';\n" + + " alert(style.type);\n" + + "}\n" + + "</script>\n" + + "</head><body onload='doTest()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } } |
From: <asa...@us...> - 2013-09-26 19:28:57
|
Revision: 8515 http://sourceforge.net/p/htmlunit/code/8515 Author: asashour Date: 2013-09-26 19:28:53 +0000 (Thu, 26 Sep 2013) Log Message: ----------- JavaScript: node.addEventListener() and .removeEventListener() are supported in Chrome. Issue 1545 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/NodeTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-26 18:43:00 UTC (rev 8514) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-26 19:28:53 UTC (rev 8515) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="add" dev="asashour" issue="1545"> + JavaScript: node.addEventListener() and .removeEventListener() are supported in Chrome. + </action> <action type="fix" dev="rbri"> CSS: Support seclectors with more than one pseudo element (like '#list li:not(#item_1):not(#item_3)'). This was a problem with CSSParser and is fixed in version 0.9.11. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java 2013-09-26 18:43:00 UTC (rev 8514) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java 2013-09-26 19:28:53 UTC (rev 8515) @@ -674,7 +674,7 @@ * @see <a href="https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener">Mozilla documentation</a> * @see #attachEvent(String, Function) */ - @JsxFunction(@WebBrowser(FF)) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME) }) public void addEventListener(final String type, final Function listener, final boolean useCapture) { getEventListenersContainer().addEventListener(type, listener, useCapture); } @@ -709,7 +709,7 @@ * @see <a href="https://developer.mozilla.org/en-US/docs/DOM/element.removeEventListener">Mozilla * documentation</a> */ - @JsxFunction(@WebBrowser(FF)) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME) }) public void removeEventListener(final String type, final Function listener, final boolean useCapture) { getEventListenersContainer().removeEventListener(type, listener, useCapture); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/NodeTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/NodeTest.java 2013-09-26 18:43:00 UTC (rev 8514) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/NodeTest.java 2013-09-26 19:28:53 UTC (rev 8515) @@ -894,4 +894,29 @@ loadPageWithAlerts2(html); } + + /** + * Verifies that listeners are copied only for IE. + * @throws Exception if an error occurs + */ + @Test + @Alerts(DEFAULT = { "true", "true" }, IE = { "false", "false" }) + public void addEventListener() throws Exception { + final String html = + "<html>\n" + + " <head>\n" + + " <script type='text/javascript'>\n" + + " function test() {\n" + + " var node = document.createElement('button');\n" + + " alert(node.addEventListener !== undefined);\n" + + " alert(node.removeEventListener !== undefined);\n" + + " }\n" + + " </script>\n" + + " </head>\n" + + " <body onload='test()'>\n" + + " </body>\n" + + "</html>"; + + loadPageWithAlerts2(html); + } } |
From: <asa...@us...> - 2013-09-26 19:40:47
|
Revision: 8516 http://sourceforge.net/p/htmlunit/code/8516 Author: asashour Date: 2013-09-26 19:40:44 +0000 (Thu, 26 Sep 2013) Log Message: ----------- JavaScript: window.addEventListener() and .removeEventListener() are supported in Chrome. Issue 1545 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/NodeTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/WindowTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-26 19:28:53 UTC (rev 8515) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-26 19:40:44 UTC (rev 8516) @@ -9,7 +9,7 @@ <body> <release version="2.13" date="???" description="Bugfixes"> <action type="add" dev="asashour" issue="1545"> - JavaScript: node.addEventListener() and .removeEventListener() are supported in Chrome. + JavaScript: node and window.addEventListener() and .removeEventListener() are supported in Chrome. </action> <action type="fix" dev="rbri"> CSS: Support seclectors with more than one pseudo element (like '#list li:not(#item_1):not(#item_3)'). 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-09-26 19:28:53 UTC (rev 8515) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-09-26 19:40:44 UTC (rev 8516) @@ -1148,7 +1148,7 @@ * @param useCapture If <code>true</code>, indicates that the user wishes to initiate capture (not yet implemented) * @see <a href="https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener">Mozilla documentation</a> */ - @JsxFunction(@WebBrowser(FF)) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME) }) public void addEventListener(final String type, final Function listener, final boolean useCapture) { getEventListenersContainer().addEventListener(type, listener, useCapture); } @@ -1172,7 +1172,7 @@ * @see <a href="https://developer.mozilla.org/en-US/docs/DOM/element.removeEventListener">Mozilla * documentation</a> */ - @JsxFunction(@WebBrowser(FF)) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME) }) public void removeEventListener(final String type, final Function listener, final boolean useCapture) { getEventListenersContainer().removeEventListener(type, listener, useCapture); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/NodeTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/NodeTest.java 2013-09-26 19:28:53 UTC (rev 8515) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/NodeTest.java 2013-09-26 19:40:44 UTC (rev 8516) @@ -896,7 +896,6 @@ } /** - * Verifies that listeners are copied only for IE. * @throws Exception if an error occurs */ @Test Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/WindowTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/WindowTest.java 2013-09-26 19:28:53 UTC (rev 8515) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/WindowTest.java 2013-09-26 19:40:44 UTC (rev 8516) @@ -1389,7 +1389,7 @@ * @throws Exception if the test fails */ @Test - @Alerts(FF = { "false", "false", "test1", "test2", "onload" }, + @Alerts(DEFAULT = { "false", "false", "test1", "test2", "onload" }, IE = { "true", "true", "exception", "onload" }) public void addOnLoadEventListener() throws Exception { final String html = "<html>\n" |
From: <asa...@us...> - 2013-09-26 21:55:03
|
Revision: 8518 http://sourceforge.net/p/htmlunit/code/8518 Author: asashour Date: 2013-09-26 21:54:54 +0000 (Thu, 26 Sep 2013) Log Message: ----------- JavaScript: window.localStorage and .sessionStorage are supported in Chrome. Issue 1539 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Storage.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/StorageTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-26 21:36:13 UTC (rev 8517) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-26 21:54:54 UTC (rev 8518) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="add" dev="asashour" issue="1539"> + JavaScript: window.localStorage and .sessionStorage are supported in Chrome. + </action> <action type="add" dev="asashour" issue="1545"> JavaScript: node and window.addEventListener() and .removeEventListener() are supported in Chrome. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-09-26 21:36:13 UTC (rev 8517) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-09-26 21:54:54 UTC (rev 8518) @@ -1269,7 +1269,7 @@ SET_READONLY_PROPERTIES, /** Indicates [object StorageObsolete] instead of [object Storage]. */ - @BrowserFeature({ @WebBrowser(value = FF, maxVersion = 10), @WebBrowser(CHROME) }) + @BrowserFeature({ @WebBrowser(value = FF, maxVersion = 10) }) STORAGE_OBSOLETE, /** Indicates that string.trim() is supported. */ Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Storage.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Storage.java 2013-09-26 21:36:13 UTC (rev 8517) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Storage.java 2013-09-26 21:54:54 UTC (rev 8518) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit.javascript.host; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.STORAGE_OBSOLETE; +import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.CHROME; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; @@ -149,7 +150,7 @@ /** * Clears all items. */ - @JsxFunction({ @WebBrowser(value = IE, minVersion = 8), @WebBrowser(FF) }) + @JsxFunction({ @WebBrowser(value = IE, minVersion = 8), @WebBrowser(FF), @WebBrowser(CHROME) }) public void clear() { getMap().clear(); } 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-09-26 21:36:13 UTC (rev 8517) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-09-26 21:54:54 UTC (rev 8518) @@ -539,7 +539,7 @@ * Returns the localStorage property. * @return the localStorage property */ - @JsxGetter({ @WebBrowser(value = IE, minVersion = 8), @WebBrowser(FF) }) + @JsxGetter({ @WebBrowser(value = IE, minVersion = 8), @WebBrowser(FF), @WebBrowser(CHROME) }) public Storage getLocalStorage() { return getStorage(Type.LOCAL_STORAGE); } @@ -548,7 +548,7 @@ * Returns the sessionStorage property. * @return the sessionStorage property */ - @JsxGetter({ @WebBrowser(value = IE, minVersion = 8), @WebBrowser(FF) }) + @JsxGetter({ @WebBrowser(value = IE, minVersion = 8), @WebBrowser(FF), @WebBrowser(CHROME) }) public Storage getSessionStorage() { return getStorage(Type.SESSION_STORAGE); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/StorageTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/StorageTest.java 2013-09-26 21:36:13 UTC (rev 8517) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/StorageTest.java 2013-09-26 21:54:54 UTC (rev 8518) @@ -44,7 +44,8 @@ @Test @Alerts(IE = { "undefined", "undefined", "undefined" }, IE8 = { "undefined", "[object]", "[object]" }, FF = { "[object StorageList]", "[object Storage]", "[object Storage]" }, - FF17 = { "undefined", "[object Storage]", "[object Storage]" }) + FF17 = { "undefined", "[object Storage]", "[object Storage]" }, + CHROME = { "undefined", "[object Storage]", "[object Storage]" }) @NotYetImplemented(FF3_6) public void storage() throws Exception { final String html @@ -77,8 +78,7 @@ * @throws Exception if the test fails */ @Test - @Alerts(IE8 = { "string", "1" }, - FF = { "string", "1" }) + @Alerts({ "string", "1" }) public void localStorage() throws Exception { final String firstHtml = "<html><head></head><body>\n" @@ -111,8 +111,7 @@ * @throws Exception if the test fails */ @Test - @Alerts(IE8 = { "0", "2", "there", "world", "1", "0" }, - FF = { "0", "2", "there", "world", "1", "0" }) + @Alerts({ "0", "2", "there", "world", "1", "0" }) public void sessionStorage() throws Exception { final String html = "<html><head></head><body>\n" |
From: <mgu...@us...> - 2013-09-27 10:03:37
|
Revision: 8519 http://sourceforge.net/p/htmlunit/code/8519 Author: mguillem Date: 2013-09-27 10:03:32 +0000 (Fri, 27 Sep 2013) Log Message: ----------- JavaScript: support click method on any element for FF10+ too. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElement2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElementTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLabelElementTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-27 10:03:32 UTC (rev 8519) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="add" dev="mguillem"> + JavaScript: support click method on any element for FF10+ too. + </action> <action type="add" dev="asashour" issue="1539"> JavaScript: window.localStorage and .sessionStorage are supported in Chrome. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-27 10:03:32 UTC (rev 8519) @@ -2118,7 +2118,7 @@ * Click this element. This simulates the action of the user clicking with the mouse. * @throws IOException if this click triggers a page load that encounters problems */ - @JsxFunction(@WebBrowser(IE)) + @JsxFunction({ @WebBrowser(IE), @WebBrowser(value = FF, minVersion = 10) }) public void click() throws IOException { getDomNodeOrDie().click(); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElement2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElement2Test.java 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElement2Test.java 2013-09-27 10:03:32 UTC (rev 8519) @@ -34,6 +34,7 @@ * @version $Revision$ * @author Ahmed Ashour * @author Ronald Brill + * @author Marc Guillemot */ @RunWith(BrowserRunner.class) public class HTMLAnchorElement2Test extends WebDriverTestCase { @@ -147,4 +148,39 @@ + "</body></html>"; loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = "Second", FF3_6 = "First") // in fact not alerts here, but it makes config easier + public void javaScriptAnchorClick() throws Exception { + final String html + = "<html><head><title>First</title><script>\n" + + "function delegateClick() {\n" + + " try {" + + " document.getElementById(\"link1\").click();\n" + + " } catch(e) {}\n" + + "}" + + "</script></head><body>\n" + + "<a id='link1' href='#' onclick='document.form1.submit()'>link 1</a>\n" + + "<form name='form1' action='" + URL_SECOND + "' method='post'>\n" + + "<input type=button id='button1' value='Test' onclick='delegateClick()'>\n" + + "<input name='testText'>\n" + + "</form>\n" + + "</body></html>"; + + final String secondHtml + = "<html>\n" + + "<head><title>Second</title></head>\n" + + "</html>"; + + getMockWebConnection().setResponse(URL_SECOND, secondHtml); + + final WebDriver driver = loadPage2(html); + driver.findElement(By.id("button1")).click(); + + assertEquals(getExpectedAlerts()[0], driver.getTitle()); + } + } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElementTest.java 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElementTest.java 2013-09-27 10:03:32 UTC (rev 8519) @@ -14,7 +14,6 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; -import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.IE; import static org.junit.Assert.assertSame; import java.net.MalformedURLException; @@ -27,14 +26,12 @@ import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.BrowserRunner.Browsers; import com.gargoylesoftware.htmlunit.CollectingAlertHandler; import com.gargoylesoftware.htmlunit.MockWebConnection; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.SimpleWebTestCase; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; -import com.gargoylesoftware.htmlunit.html.HtmlButtonInput; import com.gargoylesoftware.htmlunit.html.HtmlPage; /** @@ -144,40 +141,6 @@ } /** - * @throws Exception if the test fails - */ - @Test - @Browsers(IE) - public void javaScriptAnchorClick() throws Exception { - final String html - = "<html><head><title>First</title><script>\n" - + "</script></head><body>\n" - + "<a id='link1' href='#' onclick='document.form1.submit()'>link 1</a>\n" - + "<form name='form1' action='" + URL_SECOND + "' method='post'>\n" - + "<input type=button id='button1' value='Test' onclick='document.getElementById(\"link1\").click()'>\n" - + "<input name='testText'>\n" - + "</form>\n" - + "</body></html>"; - - final String secondHtml - = "<html>\n" - + "<head><title>Second</title></head>\n" - + "</html>"; - - final WebClient client = getWebClient(); - final MockWebConnection conn = new MockWebConnection(); - conn.setResponse(URL_FIRST, html); - conn.setResponse(URL_SECOND, secondHtml); - client.setWebConnection(conn); - - final HtmlPage page = client.getPage(URL_FIRST); - final HtmlButtonInput button = page.getHtmlElementById("button1"); - final HtmlPage page2 = button.click(); - - assertEquals("Second", page2.getTitleText()); - } - - /** * Regression test for https://sourceforge.net/tracker/?func=detail&atid=448266&aid=1689798&group_id=47038. * In href, "this" should be the window and not the link. * @throws Exception if the test fails Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLabelElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLabelElementTest.java 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLabelElementTest.java 2013-09-27 10:03:32 UTC (rev 8519) @@ -14,19 +14,15 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; -import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.FF; - import org.junit.Test; import org.junit.runner.RunWith; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; -import com.gargoylesoftware.htmlunit.SimpleWebTestCase; -import com.gargoylesoftware.htmlunit.html.HtmlButtonInput; -import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput; -import com.gargoylesoftware.htmlunit.html.HtmlLabel; -import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.WebDriverTestCase; /** * Tests for {@link HTMLLabelElement}. @@ -34,9 +30,10 @@ * @version $Revision$ * @author Ahmed Ashour * @author Daniel Gredler + * @author Marc Guillemot */ @RunWith(BrowserRunner.class) -public class HTMLLabelElementTest extends SimpleWebTestCase { +public class HTMLLabelElementTest extends WebDriverTestCase { /** * @throws Exception if the test fails @@ -53,12 +50,11 @@ + "<input type='checkbox' id='checkbox1'><br>\n" + "</body></html>"; - final HtmlPage page = loadPage(html); - final HtmlLabel label = page.getHtmlElementById("label1"); - final HtmlCheckBoxInput checkbox = page.getHtmlElementById("checkbox1"); - assertFalse(checkbox.isChecked()); - label.click(); - assertTrue(checkbox.isChecked()); + final WebDriver driver = loadPage2(html); + final WebElement checkbox = driver.findElement(By.id("checkbox1")); + assertFalse(checkbox.isSelected()); + driver.findElement(By.id("label1")).click(); + assertTrue(checkbox.isSelected()); } /** @@ -67,27 +63,30 @@ * @throws Exception if the test fails */ @Test - @NotYetImplemented(FF) + @Alerts(DEFAULT = "true", FF3_6 = "false") // in fact not used as JS alerts... public void htmlFor_click() throws Exception { final String html = "<html><head><title>First</title><script>\n" + "function doTest() {\n" + " document.getElementById('label1').htmlFor = 'checkbox1';\n" + "}\n" + + "function delegateClick() {" + + " try {\n" + + " document.getElementById('label1').click();\n" + + " } catch (e) {}\n" + + "}\n" + "</script></head><body onload='doTest()'>\n" + "<label id='label1'>My Label</label>\n" + "<input type='checkbox' id='checkbox1'><br>\n" - + "<input type=button id='button1' value='Test' onclick='document.getElementById(\"label1\").click()'>\n" + + "<input type=button id='button1' value='Test' onclick='delegateClick()'>\n" + "</body></html>"; - final HtmlPage page = loadPage(html); - final HtmlCheckBoxInput checkbox = page.getHtmlElementById("checkbox1"); - final HtmlButtonInput button = page.getHtmlElementById("button1"); - assertFalse(checkbox.isChecked()); - button.click(); + final WebDriver driver = loadPage2(html); + final WebElement checkbox = driver.findElement(By.id("checkbox1")); + assertFalse(checkbox.isSelected()); + driver.findElement(By.id("button1")).click(); - final boolean changedByClick = getWebClient().getBrowserVersion().isIE(); - assertTrue(checkbox.isChecked() == changedByClick); + assertEquals(getExpectedAlerts()[0], "" + checkbox.isSelected()); } /** @@ -114,7 +113,7 @@ + "alert(a1.accessKey);\n" + "alert(a2.accessKey);\n" + "</script></body></html>"; - loadPageWithAlerts(html); + loadPageWithAlerts2(html); } /** @@ -127,7 +126,6 @@ = "<html><body><form><label id='a'>a</label></form><script>\n" + "alert(document.getElementById('a').form);\n" + "</script></body></html>"; - loadPageWithAlerts(html); + loadPageWithAlerts2(html); } - } |
From: <asa...@us...> - 2013-09-27 20:57:14
|
Revision: 8520 http://sourceforge.net/p/htmlunit/code/8520 Author: asashour Date: 2013-09-27 20:57:12 +0000 (Fri, 27 Sep 2013) Log Message: ----------- JavaScript: array.sort() to use Arrays.LegacyMergeSort with Java 7. Issue 1511 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/NativeArrayTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-27 10:03:32 UTC (rev 8519) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-27 20:57:12 UTC (rev 8520) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="asashour" issue="1511"> + JavaScript: array.sort() to use Arrays.LegacyMergeSort with Java 7. + </action> <action type="add" dev="mguillem"> JavaScript: support click method on any element for FF10+ too. </action> Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/NativeArrayTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/NativeArrayTest.java 2013-09-27 10:03:32 UTC (rev 8519) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/NativeArrayTest.java 2013-09-27 20:57:12 UTC (rev 8520) @@ -144,4 +144,33 @@ loadPageWithAlerts2(html); } + /** + * Test for "Comparison method violates its general contract!". + * @throws Exception if the test fails + */ + @Test + public void comparisonMethodViolatesContract() throws Exception { + final String html + = "<html><head><title>foo</title><script>\n" + + "var results = [1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1," + + " -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1," + + " 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 0, -1, -1, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0," + + " 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1," + + " 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\n" + + "var index = 0;" + + "function test() {\n" + + " var arr = new Array(37);\n" + + " for (var x = 0; x < arr.length; x++) {\n" + + " arr[x] = new Object();\n" + + " }\n" + + " arr.sort(function (a, b) {\n" + + " return results[index++];\n" + + " });\n" + + "}\n" + + "</script></head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } + } |
From: <asa...@us...> - 2013-09-27 21:12:23
|
Revision: 8521 http://sourceforge.net/p/htmlunit/code/8521 Author: asashour Date: 2013-09-27 21:12:20 +0000 (Fri, 27 Sep 2013) Log Message: ----------- Deprecate KeyDataPair. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/KeyDataPair.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-27 20:57:12 UTC (rev 8520) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-27 21:12:20 UTC (rev 8521) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="update" dev="asashour"> + Deprecate KeyDataPair. + </action> <action type="fix" dev="asashour" issue="1511"> JavaScript: array.sort() to use Arrays.LegacyMergeSort with Java 7. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/KeyDataPair.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/KeyDataPair.java 2013-09-27 20:57:12 UTC (rev 8520) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/KeyDataPair.java 2013-09-27 21:12:20 UTC (rev 8521) @@ -24,7 +24,10 @@ * @author David D. Kilzer * @author Mike Bowler * @author Ahmed Ashour + * @deprecated as of 2.13, with no replacement */ +@Deprecated +// to be package private or 'use at your own risk' (referenced by HttpWebConnection and HtmlFileInput) public class KeyDataPair extends NameValuePair { private final File fileObject_; |