From: <asa...@us...> - 2013-12-13 22:52:09
|
Revision: 8845 http://sourceforge.net/p/htmlunit/code/8845 Author: asashour Date: 2013-12-13 22:52:06 +0000 (Fri, 13 Dec 2013) Log Message: ----------- JavaScript: node and window.addEventListener() and .removeEventListener() are supported starting IE 9. - Some other fixes for NodeTest for IE9 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/Node.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseFontElement.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-12-13 19:13:41 UTC (rev 8844) +++ trunk/htmlunit/src/changes/changes.xml 2013-12-13 22:52:06 UTC (rev 8845) @@ -8,6 +8,9 @@ <body> <release version="2.14" date="???" description="Bugfixes"> + <action type="add" dev="asashour"> + JavaScript: node and window.addEventListener() and .removeEventListener() are supported starting IE 9. + </action> <action type="fix" dev="rbri" due-to="Frank Danek"> JavaScript: XMLDocument.firstChild() is now enabled to support more nodes at the root level like ProcessingInstruction, Comment. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-12-13 19:13:41 UTC (rev 8844) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-12-13 22:52:06 UTC (rev 8845) @@ -270,10 +270,6 @@ /** Was originally .isIE(). */ @BrowserFeature(@WebBrowser(IE)) - GENERATED_121, - - /** Was originally .isIE(). */ - @BrowserFeature(@WebBrowser(IE)) GENERATED_124, /** Was originally .isIE(). */ @@ -658,7 +654,7 @@ /** Indicates that the appendChild call throws no exception * if the provided node cannot be inserted. */ - @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) + @BrowserFeature(@WebBrowser(value = IE, maxVersion = 8)) JS_APPEND_CHILD_THROWS_NO_EXCEPTION_FOR_WRONG_NODE, /** Indicates that the class name of "arguments" object is "Object". */ @@ -972,7 +968,7 @@ JS_GET_ELEMENT_BY_ID_CASE_SENSITIVE, /** Indicates that objects with prototype property available in window scope; Firefox does this. */ - @BrowserFeature({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 11) }) + @BrowserFeature({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 9) }) JS_HAS_OBJECT_WITH_PROTOTYPE_PROPERTY_IN_WINDOW_SCOPE, /** HTMLGenericElement instead of HTMLUnknownElement. */ @@ -1048,12 +1044,16 @@ @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) JS_NATIVE_FUNCTION_TOSTRING_NEW_LINE, + /** Should throw exception if extra argument is passed to node.insertBefore(). */ + @BrowserFeature(@WebBrowser(value = IE, maxVersion = 8)) + JS_NODE_INSERT_BEFORE_THROW_EXCEPTION_FOR_EXTRA_ARGUMENT, + /** If <tt>true</tt>, Date.prototype.getYear subtracts 1900 only if 1900 <= date < 2000. */ @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) JS_NON_ECMA_GET_YEAR, /** "[object]" in quirks mode. */ - @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) + @BrowserFeature(@WebBrowser(value = IE, maxVersion = 8)) JS_OBJECT_IN_QUIRKS_MODE, /** Indicates that someObj.offsetParent throws an exception when called on an object that is not yet attached 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-12-13 19:13:41 UTC (rev 8844) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java 2013-12-13 22:52:06 UTC (rev 8845) @@ -14,13 +14,13 @@ */ package com.gargoylesoftware.htmlunit.javascript.host; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_121; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_124; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_45; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_APPEND_CHILD_CREATE_DOCUMENT_FRAGMENT_PARENT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_APPEND_CHILD_THROWS_NO_EXCEPTION_FOR_WRONG_NODE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_CLONE_NODE_COPIES_EVENT_LISTENERS; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_EVENT_HANDLER_AS_PROPERTY_DONT_RECEIVE_EVENT; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_NODE_INSERT_BEFORE_THROW_EXCEPTION_FOR_EXTRA_ARGUMENT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_PREFIX_RETURNS_EMPTY_WHEN_UNDEFINED; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_XML_SERIALIZER_APPENDS_CRLF; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.CHROME; @@ -87,75 +87,75 @@ private EventListenersContainer eventListenersContainer_; /** @see org.w3c.dom.Node#ELEMENT_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short ELEMENT_NODE = org.w3c.dom.Node.ELEMENT_NODE; /** @see org.w3c.dom.Node#ATTRIBUTE_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short ATTRIBUTE_NODE = org.w3c.dom.Node.ATTRIBUTE_NODE; /** @see org.w3c.dom.Node#TEXT_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short TEXT_NODE = org.w3c.dom.Node.TEXT_NODE; /** @see org.w3c.dom.Node#CDATA_SECTION_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short CDATA_SECTION_NODE = org.w3c.dom.Node.CDATA_SECTION_NODE; /** @see org.w3c.dom.Node#ENTITY_REFERENCE_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short ENTITY_REFERENCE_NODE = org.w3c.dom.Node.ENTITY_REFERENCE_NODE; /** @see org.w3c.dom.Node#ENTITY_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short ENTITY_NODE = org.w3c.dom.Node.ENTITY_NODE; /** @see org.w3c.dom.Node#PROCESSING_INSTRUCTION_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short PROCESSING_INSTRUCTION_NODE = org.w3c.dom.Node.PROCESSING_INSTRUCTION_NODE; /** @see org.w3c.dom.Node#COMMENT_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short COMMENT_NODE = org.w3c.dom.Node.COMMENT_NODE; /** @see org.w3c.dom.Node#DOCUMENT_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_NODE = org.w3c.dom.Node.DOCUMENT_NODE; /** @see org.w3c.dom.Node#DOCUMENT_TYPE_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_TYPE_NODE = org.w3c.dom.Node.DOCUMENT_TYPE_NODE; /** @see org.w3c.dom.Node#DOCUMENT_FRAGMENT_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_FRAGMENT_NODE = org.w3c.dom.Node.DOCUMENT_FRAGMENT_NODE; /** @see org.w3c.dom.Node#NOTATION_NODE */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short NOTATION_NODE = org.w3c.dom.Node.NOTATION_NODE; /** @see org.w3c.dom.Node#DOCUMENT_POSITION_DISCONNECTED */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_POSITION_DISCONNECTED = org.w3c.dom.Node.DOCUMENT_POSITION_DISCONNECTED; /** @see org.w3c.dom.Node#DOCUMENT_POSITION_PRECEDING */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_POSITION_PRECEDING = org.w3c.dom.Node.DOCUMENT_POSITION_PRECEDING; /** @see org.w3c.dom.Node#DOCUMENT_POSITION_FOLLOWING */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_POSITION_FOLLOWING = org.w3c.dom.Node.DOCUMENT_POSITION_FOLLOWING; /** @see org.w3c.dom.Node#DOCUMENT_POSITION_CONTAINS */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_POSITION_CONTAINS = org.w3c.dom.Node.DOCUMENT_POSITION_CONTAINS; /** @see org.w3c.dom.Node#DOCUMENT_POSITION_CONTAINED_BY */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_POSITION_CONTAINED_BY = org.w3c.dom.Node.DOCUMENT_POSITION_CONTAINED_BY; /** @see org.w3c.dom.Node#DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC */ - @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxConstant({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public static final short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = org.w3c.dom.Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC; @@ -390,9 +390,9 @@ return newChildObject; } final DomNode refChildNode; - // IE accepts non standard calls with only one arg + // IE accepts non standard calls with only one argument if (refChildObject == Undefined.instance) { - if (getBrowserVersion().hasFeature(GENERATED_121)) { + if (getBrowserVersion().hasFeature(JS_NODE_INSERT_BEFORE_THROW_EXCEPTION_FOR_EXTRA_ARGUMENT)) { if (args.length > 1) { throw Context.reportRuntimeError("Invalid argument."); } @@ -446,7 +446,7 @@ * * @return whether this node is the same node as the given one */ - @JsxFunction({ @WebBrowser(value = FF, maxVersion = 3.6f), @WebBrowser(value = IE, minVersion = 11) }) + @JsxFunction(@WebBrowser(value = IE, minVersion = 9)) public boolean isSameNode(final Object other) { return other == this; } @@ -675,7 +675,7 @@ * @see <a href="https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener">Mozilla documentation</a> * @see #attachEvent(String, Function) */ - @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 11) }) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 9) }) public void addEventListener(final String type, final Function listener, final boolean useCapture) { getEventListenersContainer().addEventListener(type, listener, useCapture); } @@ -710,7 +710,7 @@ * @see <a href="https://developer.mozilla.org/en-US/docs/DOM/element.removeEventListener">Mozilla * documentation</a> */ - @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 11) }) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 9) }) public void removeEventListener(final String type, final Function listener, final boolean useCapture) { getEventListenersContainer().removeEventListener(type, listener, useCapture); } @@ -947,7 +947,7 @@ * @see <a href="http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition">DOM level 3</a> * @see org.w3c.dom.Node#compareDocumentPosition(org.w3c.dom.Node) */ - @JsxFunction({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 11) }) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(value = IE, minVersion = 9) }) public short compareDocumentPosition(final Object node) { if (!(node instanceof Node)) { throw Context.reportRuntimeError("Could not convert JavaScript argument arg 0"); 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-12-13 19:13:41 UTC (rev 8844) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Window.java 2013-12-13 22:52:06 UTC (rev 8845) @@ -1152,7 +1152,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), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 11) }) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 9) }) public void addEventListener(final String type, final Function listener, final boolean useCapture) { getEventListenersContainer().addEventListener(type, listener, useCapture); } @@ -1176,7 +1176,7 @@ * @see <a href="https://developer.mozilla.org/en-US/docs/DOM/element.removeEventListener">Mozilla * documentation</a> */ - @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 11) }) + @JsxFunction({ @WebBrowser(FF), @WebBrowser(CHROME), @WebBrowser(value = IE, minVersion = 9) }) public void removeEventListener(final String type, final Function listener, final boolean useCapture) { getEventListenersContainer().removeEventListener(type, listener, useCapture); } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseFontElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseFontElement.java 2013-12-13 19:13:41 UTC (rev 8844) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseFontElement.java 2013-12-13 22:52:06 UTC (rev 8845) @@ -15,7 +15,6 @@ package com.gargoylesoftware.htmlunit.javascript.host.html; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLBASEFONT_END_TAG_FORBIDDEN; -import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.IE; import net.sourceforge.htmlunit.corejs.javascript.Context; @@ -31,7 +30,7 @@ * @version $Revision$ * @author Ahmed Ashour */ -@JsxClass(domClass = HtmlBaseFont.class, browsers = { @WebBrowser(IE), @WebBrowser(value = FF, maxVersion = 3.6f) }) +@JsxClass(domClass = HtmlBaseFont.class, browsers = @WebBrowser(IE)) public class HTMLBaseFontElement extends HTMLElement { /** 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-12-13 19:13:41 UTC (rev 8844) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/NodeTest.java 2013-12-13 22:52:06 UTC (rev 8845) @@ -18,6 +18,7 @@ import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.FF17; import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.FF24; import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.IE11; +import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.IE9; import org.junit.Test; import org.junit.runner.RunWith; @@ -338,8 +339,9 @@ @Test @Alerts(FF = { "isSameNode not supported" }, IE = { "isSameNode not supported" }, + IE9 = { "true", "false" }, IE11 = { "true", "false" }) - public void testIsSameNode() throws Exception { + public void isSameNode() throws Exception { final String html = "<html><head><title>foo</title><script>\n" + " function test() {\n" + " var d1 = document.getElementById('div1');\n" @@ -628,7 +630,7 @@ * @throws Exception if the test fails */ @Test - @Browsers({ FF, IE11 }) + @Browsers({ FF, IE9, IE11 }) @Alerts({ "0", "20", "20", "4", "10", "10", "2", "20", "exception" }) public void compareDocumentPosition() throws Exception { final String html |