From: <asa...@us...> - 2012-11-05 08:17:43
|
Revision: 7682 http://sourceforge.net/p/htmlunit/code/7682 Author: asashour Date: 2012-11-05 08:17:40 +0000 (Mon, 05 Nov 2012) Log Message: ----------- JavaScript: remove unneeded global properties (FF). 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/JavaScriptEngine.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-05 06:37:03 UTC (rev 7681) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-05 08:17:40 UTC (rev 7682) @@ -8,6 +8,9 @@ <body> <release version="2.11" date="???" description="Bugfixes, Java 6, HtmlPage.getElementById(), .type() special keys, initial WebSocket support, initial SVG support, primitive Geolocation support, SOCKS proxy for https, CORS"> + <action type="fix" dev="asashour"> + JavaScript: remove unneeded global properties (FF). + </action> <action type="add" dev="asashour" issue="1420"> JavaScript: implement "constructor" property of all host objects (FF). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-05 06:37:03 UTC (rev 7681) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-05 08:17:40 UTC (rev 7682) @@ -290,10 +290,6 @@ /** Was originally .isIE(). */ @BrowserFeature(@WebBrowser(IE)) - GENERATED_144, - - /** Was originally .isIE(). */ - @BrowserFeature(@WebBrowser(IE)) GENERATED_150, /** Was originally .isFirefox(). */ @@ -1038,6 +1034,10 @@ @BrowserFeature(@WebBrowser(IE)) JS_WINDOW_IS_NOT_A_FUNCTION, + /** Supports XML. */ + @BrowserFeature({ @WebBrowser(FF), @WebBrowser(CHROME) }) + JS_XML, + /** Indicates that a xml attribute supports the text property. */ @BrowserFeature(@WebBrowser(IE)) JS_XML_ATTRIBUTE_HAS_TEXT_PROPERTY, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine.java 2012-11-05 06:37:03 UTC (rev 7681) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine.java 2012-11-05 08:17:40 UTC (rev 7682) @@ -14,7 +14,6 @@ */ package com.gargoylesoftware.htmlunit.javascript; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_144; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_ALLOW_CONST_ASSIGNMENT; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_CONSTRUCTOR; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DEFINE_GETTER; @@ -23,6 +22,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_FUNCTION_BIND; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_FUNCTION_TOSOURCE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_HAS_OBJECT_WITH_PROTOTYPE_PROPERTY_IN_WINDOW_SCOPE; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_XML; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.STRING_TRIM; import java.io.IOException; @@ -197,9 +197,10 @@ } // remove some objects, that Rhino defines in top scope but that we don't want - deleteProperties(window, "javax", "org", "com", "edu", "net", "JavaAdapter", "JavaImporter", "Continuation"); - if (browserVersion.hasFeature(GENERATED_144)) { - deleteProperties(window, "Packages", "java", "getClass", "XML", "XMLList", "Namespace", "QName"); + deleteProperties(window, "java", "javax", "org", "com", "edu", "net", + "JavaAdapter", "JavaImporter", "Continuation", "Packages", "getClass"); + if (!browserVersion.hasFeature(JS_XML)) { + deleteProperties(window, "XML", "XMLList", "Namespace", "QName"); } // put custom object to be called as very last prototype to call the fallback getter (if any) Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java 2012-11-05 06:37:03 UTC (rev 7681) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java 2012-11-05 08:17:40 UTC (rev 7682) @@ -200,4 +200,45 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts("exception") + public void packages() throws Exception { + object("Packages"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts("exception") + public void java() throws Exception { + object("java"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts("undefined") + public void object_getClass() throws Exception { + object("window.getClass"); + } + + private void object(final String object) throws Exception { + final String html = "<html><head></head><body>\n" + + "<script>\n" + + "try {\n" + + " alert(" + object + ");\n" + + "} catch (e) {\n" + + " alert('exception');\n" + + "}\n" + + "</script>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } } |
From: <rb...@us...> - 2012-11-05 18:54:42
|
Revision: 7690 http://sourceforge.net/p/htmlunit/code/7690 Author: rbri Date: 2012-11-05 18:54:39 +0000 (Mon, 05 Nov 2012) Log Message: ----------- code cleanup and allow self closing for fragment parsing Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java 2012-11-05 12:28:32 UTC (rev 7689) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java 2012-11-05 18:54:39 UTC (rev 7690) @@ -151,6 +151,7 @@ ancestors.add(1, new QName(null, "body", null, null)); } + domBuilder.setFeature(HTMLScanner.ALLOW_SELFCLOSING_TAGS, true); domBuilder.setProperty(HTMLTagBalancer.FRAGMENT_CONTEXT_STACK, ancestors.toArray(new QName[] {})); final XMLInputSource in = new XMLInputSource(null, url.toString(), null, new StringReader(source), null); @@ -257,7 +258,7 @@ private static void addBodyToPageIfNecessary( final HtmlPage page, final boolean originalCall, final boolean checkInsideFrameOnly) { // IE waits for the whole page to load before initializing bodies for frames. - final boolean waitToLoad = page.getWebClient().getBrowserVersion().hasFeature(PAGE_WAIT_LOAD_BEFORE_BODY); + final boolean waitToLoad = page.hasFeature(PAGE_WAIT_LOAD_BEFORE_BODY); if (page.getEnclosingWindow() instanceof FrameWindow && originalCall && waitToLoad) { return; } @@ -341,7 +342,7 @@ || !qualifiedName.contains(":") || namespaceURI.equals(XHTML_NAMESPACE)) { if (SVG_NAMESPACE.equals(namespaceURI) - && page.getWebClient().getBrowserVersion().hasFeature(SVG)) { + && page.hasFeature(SVG)) { return SVG_FACTORY; } @@ -499,7 +500,7 @@ return; } - if (parsingInnerHead_ && page_.getWebClient().getBrowserVersion().hasFeature( + if (parsingInnerHead_ && page_.hasFeature( IGNORE_CONTENTS_OF_INNER_HEAD)) { return; } @@ -600,8 +601,7 @@ if ("head".equals(tagLower)) { parsingInnerHead_ = false; } - if ("head".equals(tagLower) || page_.getWebClient().getBrowserVersion().hasFeature( - IGNORE_CONTENTS_OF_INNER_HEAD)) { + if ("head".equals(tagLower) || page_.hasFeature(IGNORE_CONTENTS_OF_INNER_HEAD)) { return; } } @@ -629,7 +629,7 @@ /** {@inheritDoc} */ public void characters(final char[] ch, final int start, final int length) throws SAXException { if ((characters_ == null || characters_.length() == 0) - && page_.getWebClient().getBrowserVersion().hasFeature(HTMLPARSER_REMOVE_EMPTY_CONTENT) + && page_.hasFeature(HTMLPARSER_REMOVE_EMPTY_CONTENT) && StringUtils.isBlank(new String(ch, start, length))) { DomNode node = currentNode_.getLastChild(); @@ -743,7 +743,7 @@ handleCharacters(); final String data = new String(ch, start, length); if (!data.startsWith("[CDATA") - || !page_.getWebClient().getBrowserVersion().hasFeature(GENERATED_3)) { + || !page_.hasFeature(GENERATED_3)) { final DomComment comment = new DomComment(page_, data); currentNode_.appendChild(comment); } 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 2012-11-05 12:28:32 UTC (rev 7689) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2012-11-05 18:54:39 UTC (rev 7690) @@ -995,7 +995,6 @@ CHROME = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <div></div><div></div>" }, FF = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(IE) public void setOuterHTMLAddMultipleSelfClosingBlock() throws Exception { final String html = createPageForSetOuterHTML("div", "<div/><div>"); loadPageWithAlerts2(html); |
From: <asa...@us...> - 2012-11-06 08:20:06
|
Revision: 7695 http://sourceforge.net/p/htmlunit/code/7695 Author: asashour Date: 2012-11-06 08:19:59 +0000 (Tue, 06 Nov 2012) Log Message: ----------- Cookie: remove deprecated (String name, String value) constructor. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/Cookie.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-06 07:27:05 UTC (rev 7694) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-06 08:19:59 UTC (rev 7695) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="remove" dev="asashour"> + Cookie: remove deprecated (String name, String value) constructor. + </action> </release> <release version="2.11" date="Nov 6, 2012" description="Bugfixes, Java 6, HtmlPage.getElementById(), .type() special keys, initial WebSocket support, initial SVG support, primitive Geolocation support, SOCKS proxy for https, CORS"> <action type="update" dev="mguillem"> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/Cookie.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/Cookie.java 2012-11-06 07:27:05 UTC (rev 7694) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/Cookie.java 2012-11-06 08:19:59 UTC (rev 7695) @@ -57,18 +57,6 @@ private final boolean httponly_; /** - * Creates a new cookie with the specified name and value. The new cookie applies to all - * domains and all paths, never expires and is not secure. - * @param name the cookie name - * @param value the cookie name - * @deprecated as of 2.10, specify the domain - */ - @Deprecated - public Cookie(final String name, final String value) { - this(null, name, value); - } - - /** * Creates a new cookie with the specified name and value which applies to the specified domain. * The new cookie applies to all paths, never expires and is not secure. * @param domain the domain to which this cookie applies |
From: <asa...@us...> - 2012-11-09 11:07:43
|
Revision: 7704 http://sourceforge.net/p/htmlunit/code/7704 Author: asashour Date: 2012-11-09 11:07:39 +0000 (Fri, 09 Nov 2012) Log Message: ----------- JavaScript: implement "dataset" property (FF). 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 Added Paths: ----------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-09 06:35:04 UTC (rev 7703) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-09 11:07:39 UTC (rev 7704) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="add" dev="asashour"> + JavaScript: implement "dataset" property (FF). + </action> <action type="remove" dev="asashour" issue="1420"> JavaScript: remove "constructor" property of host objects (IE). </action> Added: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java (rev 0) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java 2012-11-09 11:07:39 UTC (rev 7704) @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2002-2012 Gargoyle Software Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gargoylesoftware.htmlunit.javascript.host; + +import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; + +/** + * A JavaScript object for DOMStringMap. + * + * @version $Revision$ + * @author Ahmed Ashour + */ +@JsxClass +public final class DOMStringMap extends SimpleScriptable { + + /** + * Creates an instance. JavaScript objects must have a default constructor. + */ + public DOMStringMap() { + } + + /** + * Creates an instance. + * @param node the node which contains the underlying string + */ + public DOMStringMap(final Node node) { + setDomNode(node.getDomNodeOrDie(), false); + setParentScope(node.getParentScope()); + setPrototype(getPrototype(getClass())); + } + +} Property changes on: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native 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 2012-11-09 06:35:04 UTC (rev 7703) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2012-11-09 11:07:39 UTC (rev 7704) @@ -101,6 +101,7 @@ import com.gargoylesoftware.htmlunit.javascript.host.Attr; import com.gargoylesoftware.htmlunit.javascript.host.BoxObject; import com.gargoylesoftware.htmlunit.javascript.host.ClientRect; +import com.gargoylesoftware.htmlunit.javascript.host.DOMStringMap; import com.gargoylesoftware.htmlunit.javascript.host.DOMTokenList; import com.gargoylesoftware.htmlunit.javascript.host.Element; import com.gargoylesoftware.htmlunit.javascript.host.Event; @@ -2797,4 +2798,14 @@ public Element getParentElement() { return super.getParentElement(); } + + /** + * Returns the "dataset" attribute. + * @return the "dataset" attribute + */ + @JsxGetter({ @WebBrowser(value = FF, minVersion = 10), @WebBrowser(CHROME) }) + public DOMStringMap getDataset() { + return new DOMStringMap(this); + } + } 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 2012-11-09 06:35:04 UTC (rev 7703) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2012-11-09 11:07:39 UTC (rev 7704) @@ -2536,4 +2536,24 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = "undefined", FF3_6 = "undefined", DEFAULT = "[object DOMStringMap]") + public void dataset() throws Exception { + final String html + = "<html><head>\n" + + "<script>\n" + + " function test() {\n" + + " alert(document.body.dataset);\n" + + " }\n" + + "</script>\n" + + "</head>\n" + + "<body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } } |
From: <asa...@us...> - 2012-11-09 11:12:27
|
Revision: 7705 http://sourceforge.net/p/htmlunit/code/7705 Author: asashour Date: 2012-11-09 11:12:24 +0000 (Fri, 09 Nov 2012) Log Message: ----------- JS host classes: move "dom" to a separate package Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfiguration.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Document.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java Added Paths: ----------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMException.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementation.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMParser.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMap.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMTokenList.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/package.html trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMExceptionTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementationTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMParserTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMTokenListTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/package.html Removed Paths: ------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMException.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementation.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMParser.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMTokenList.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMExceptionTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementationTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMParserTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMTokenListTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfiguration.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfiguration.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfiguration.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -38,10 +38,6 @@ import com.gargoylesoftware.htmlunit.javascript.host.ClipboardData; import com.gargoylesoftware.htmlunit.javascript.host.Comment; import com.gargoylesoftware.htmlunit.javascript.host.Console; -import com.gargoylesoftware.htmlunit.javascript.host.DOMException; -import com.gargoylesoftware.htmlunit.javascript.host.DOMImplementation; -import com.gargoylesoftware.htmlunit.javascript.host.DOMParser; -import com.gargoylesoftware.htmlunit.javascript.host.DOMTokenList; import com.gargoylesoftware.htmlunit.javascript.host.Document; import com.gargoylesoftware.htmlunit.javascript.host.DocumentFragment; import com.gargoylesoftware.htmlunit.javascript.host.DocumentType; @@ -117,6 +113,10 @@ import com.gargoylesoftware.htmlunit.javascript.host.css.CSSValue; import com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration; import com.gargoylesoftware.htmlunit.javascript.host.css.StyleSheetList; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMException; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMImplementation; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMParser; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMTokenList; import com.gargoylesoftware.htmlunit.javascript.host.geo.Coordinates; import com.gargoylesoftware.htmlunit.javascript.host.geo.Geolocation; import com.gargoylesoftware.htmlunit.javascript.host.geo.Position; Deleted: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMException.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMException.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMException.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2002-2012 Gargoyle Software Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gargoylesoftware.htmlunit.javascript.host; - -import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; -import net.sourceforge.htmlunit.corejs.javascript.Context; - -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstant; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; -import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; - -/** - * Exception for DOM manipulations. - * - * @see <a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-17189187"> - * DOM-Level-2-Core</a> - * @version $Revision$ - * @author Marc Guillemot - */ -@JsxClass(browsers = @WebBrowser(FF)) -public class DOMException extends SimpleScriptable { - /** If the specified range of text does not fit into a DOMString. */ - @JsxConstant - public static final short DOMSTRING_SIZE_ERR = org.w3c.dom.DOMException.DOMSTRING_SIZE_ERR; - /** If any node is inserted somewhere it doesn't belong. */ - @JsxConstant - public static final short HIERARCHY_REQUEST_ERR = org.w3c.dom.DOMException.HIERARCHY_REQUEST_ERR; - /** If index or size is negative, or greater than the allowed value. */ - @JsxConstant - public static final short INDEX_SIZE_ERR = org.w3c.dom.DOMException.INDEX_SIZE_ERR; - /** If an attempt is made to add an attribute that is already in use elsewhere. */ - @JsxConstant - public static final short INUSE_ATTRIBUTE_ERR = org.w3c.dom.DOMException.INUSE_ATTRIBUTE_ERR; - /** If a parameter or an operation is not supported by the underlying object. */ - @JsxConstant - public static final short INVALID_ACCESS_ERR = org.w3c.dom.DOMException.INVALID_ACCESS_ERR; - /** If an invalid or illegal character is specified, such as in a name. */ - @JsxConstant - public static final short INVALID_CHARACTER_ERR = org.w3c.dom.DOMException.INVALID_CHARACTER_ERR; - /** If an attempt is made to modify the type of the underlying object. */ - @JsxConstant - public static final short INVALID_MODIFICATION_ERR = org.w3c.dom.DOMException.INVALID_MODIFICATION_ERR; - /** If an attempt is made to use an object that is not, or is no longer, usable. */ - @JsxConstant - public static final short INVALID_STATE_ERR = org.w3c.dom.DOMException.INVALID_STATE_ERR; - /** If an attempt is made to create or change an object in a way which is incorrect with regard to namespaces. */ - @JsxConstant - public static final short NAMESPACE_ERR = org.w3c.dom.DOMException.NAMESPACE_ERR; - /** If data is specified for a node which does not support data. */ - @JsxConstant - public static final short NO_DATA_ALLOWED_ERR = org.w3c.dom.DOMException.NO_DATA_ALLOWED_ERR; - /** If an attempt is made to modify an object where modifications are not allowed. */ - @JsxConstant - public static final short NO_MODIFICATION_ALLOWED_ERR = org.w3c.dom.DOMException.NO_MODIFICATION_ALLOWED_ERR; - /** If an attempt is made to reference a node in a context where it does not exist. */ - @JsxConstant - public static final short NOT_FOUND_ERR = org.w3c.dom.DOMException.NOT_FOUND_ERR; - /** If the implementation does not support the requested type of object or operation. */ - @JsxConstant - public static final short NOT_SUPPORTED_ERR = org.w3c.dom.DOMException.NOT_SUPPORTED_ERR; - /** If an invalid or illegal string is specified. */ - @JsxConstant - public static final short SYNTAX_ERR = org.w3c.dom.DOMException.SYNTAX_ERR; - /** If a node is used in a different document than the one that created it (that doesn't support it). */ - @JsxConstant - public static final short WRONG_DOCUMENT_ERR = org.w3c.dom.DOMException.WRONG_DOCUMENT_ERR; - - private final short code_; - private final String message_; - private int lineNumber_; - private String fileName_; - - /** - * Default constructor used to build the prototype. - */ - public DOMException() { - code_ = -1; - message_ = null; - } - - /** - * Constructor. - * @param message the exception message - * @param errorCode the error code - */ - public DOMException(final String message, final short errorCode) { - code_ = errorCode; - message_ = message; - } - - /** - * Gets the exception code. - * @return the exception code - */ - @JsxGetter - public Object getCode() { - if (code_ == -1) { - return Context.getUndefinedValue(); - } - return code_; - } - - /** - * Gets the exception message. - * @return the exception message - */ - @JsxGetter - public Object getMessage() { - if (message_ == null) { - return Context.getUndefinedValue(); - } - return message_; - } - - /** - * Gets the line at which the exception occurred. - * @return the line of the exception - */ - @JsxGetter - public Object getLineNumber() { - if (lineNumber_ == -1) { - return Context.getUndefinedValue(); - } - return lineNumber_; - } - - /** - * Gets the name of the in which the exception occurred. - * @return the name of the source file - */ - @JsxGetter - public Object getFilename() { - if (fileName_ == null) { - return Context.getUndefinedValue(); - } - return fileName_; - } - - /** - * Sets the location in JavaScript source where this exception occurred. - * @param fileName the name of the source file - * @param lineNumber the line number - */ - public void setLocation(final String fileName, final int lineNumber) { - fileName_ = fileName; - lineNumber_ = lineNumber; - } -} Deleted: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementation.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementation.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementation.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2002-2012 Gargoyle Software Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gargoylesoftware.htmlunit.javascript.host; - -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_35; -import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; - -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxFunction; -import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; -import com.gargoylesoftware.htmlunit.javascript.host.xml.XMLDocument; -import com.gargoylesoftware.htmlunit.xml.XmlPage; - -/** - * A JavaScript object for DOMImplementation. - * - * @version $Revision$ - * @author Ahmed Ashour - * - * @see <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-core.html#ID-102161490"> - * W3C Dom Level 1</a> - */ -@JsxClass -public class DOMImplementation extends SimpleScriptable { - - /** - * Test if the DOM implementation implements a specific feature. - * @param feature the name of the feature to test (case-insensitive) - * @param version the version number of the feature to test - * @return true if the feature is implemented in the specified version, false otherwise - */ - @JsxFunction - public boolean hasFeature(final String feature, final String version) { - if (getBrowserVersion().hasFeature(GENERATED_35)) { - if ("HTML".equals(feature) && "1.0".equals(version)) { - return true; - } - } - else { - if ("HTML".equals(feature) && ("1.0".equals(version) || "2.0".equals(version))) { - return true; - } - else if ("XML".equals(feature) && ("1.0".equals(version) || "2.0".equals(version))) { - return true; - } - else if ("CSS2".equals(feature) && "2.0".equals(version)) { - return true; - } - else if ("XPath".equals(feature) && "3.0".equals(version)) { - return true; - } - //TODO: other features. - } - return false; - } - - /** - * Creates an {@link XMLDocument}. - * - * @param namespaceURI the URI that identifies an XML namespace - * @param qualifiedName the qualified name of the document to instantiate - * @param doctype the document types of the document - * @return the newly created {@link XMLDocument} - */ - //TODO: change doctype type to "DocType" - @JsxFunction(@WebBrowser(FF)) - public XMLDocument createDocument(final String namespaceURI, final String qualifiedName, - final Object doctype) { - final XMLDocument document = new XMLDocument(getWindow().getWebWindow()); - document.setParentScope(getParentScope()); - document.setPrototype(getPrototype(document.getClass())); - if (qualifiedName != null && !qualifiedName.isEmpty()) { - final XmlPage page = document.getDomNodeOrDie(); - page.appendChild(page.createXmlElementNS(namespaceURI, qualifiedName)); - } - return document; - } -} Deleted: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMParser.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMParser.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMParser.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2002-2012 Gargoyle Software Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gargoylesoftware.htmlunit.javascript.host; - -import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; - -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxFunction; -import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; -import com.gargoylesoftware.htmlunit.javascript.host.xml.XMLDocument; - -/** - * A JavaScript object for DOMParser. - * - * @version $Revision$ - * @author Ahmed Ashour - * - * @see <a href="http://www.xulplanet.com/references/objref/DOMParser.html">XUL Planet</a> - */ -@JsxClass(browsers = @WebBrowser(FF)) -public class DOMParser extends SimpleScriptable { - - /** - * JavaScript constructor. - */ - @JsxConstructor - public void jsConstructor() { - // Empty. - } - - /** - * The string passed in is parsed into a DOM document. - * @param str the UTF16 string to be parsed - * @param contentType the content type of the string - - * either <tt>text/xml</tt>, <tt>application/xml</tt>, or <tt>application/xhtml+xml</tt>. Must not be NULL. - * @return the generated document - */ - @JsxFunction - public XMLDocument parseFromString(final String str, final String contentType) { - final XMLDocument document = new XMLDocument(); - document.setParentScope(getParentScope()); - document.setPrototype(getPrototype(XMLDocument.class)); - document.loadXML(str); - return document; - } -} Deleted: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2002-2012 Gargoyle Software Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gargoylesoftware.htmlunit.javascript.host; - -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; - -/** - * A JavaScript object for DOMStringMap. - * - * @version $Revision$ - * @author Ahmed Ashour - */ -@JsxClass -public final class DOMStringMap extends SimpleScriptable { - - /** - * Creates an instance. JavaScript objects must have a default constructor. - */ - public DOMStringMap() { - } - - /** - * Creates an instance. - * @param node the node which contains the underlying string - */ - public DOMStringMap(final Node node) { - setDomNode(node.getDomNodeOrDie(), false); - setParentScope(node.getParentScope()); - setPrototype(getPrototype(getClass())); - } - -} Deleted: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMTokenList.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMTokenList.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMTokenList.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -1,160 +0,0 @@ -/* - * Copyright (c) 2002-2012 Gargoyle Software Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gargoylesoftware.htmlunit.javascript.host; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import com.gargoylesoftware.htmlunit.html.DomAttr; -import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxFunction; -import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; - -/** - * A JavaScript object for DOMTokenList. - * - * @version $Revision$ - * @author Ahmed Ashour - */ -@JsxClass -public final class DOMTokenList extends SimpleScriptable { - - private String attributeName_; - - /** - * Creates an instance. JavaScript objects must have a default constructor. - */ - public DOMTokenList() { - } - - /** - * Creates an instance. - * @param node the node which contains the underlying string - * @param attributeName the attribute name of the DomElement of the specified node - */ - public DOMTokenList(final Node node, final String attributeName) { - setDomNode(node.getDomNodeOrDie(), false); - setParentScope(node.getParentScope()); - setPrototype(getPrototype(getClass())); - attributeName_ = attributeName; - } - - /** - * Returns the length property. - * @return the length - */ - @JsxGetter - public int getLength() { - final String value = getDefaultValue(null); - return value.split(" ").length; - } - - /** - * {@inheritDoc} - */ - @Override - public String getDefaultValue(final Class<?> hint) { - final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); - if (attr != null) { - final String value = attr.getValue(); - return value; - } - return ""; - } - - /** - * Adds the specified token to the underlying string. - * @param token the token to add - */ - @JsxFunction - public void add(final String token) { - if (!contains(token)) { - final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); - attr.setValue(attr.getValue() + ' ' + token); - } - } - - /** - * Removes the specified token from the underlying string. - * @param token the token to remove - */ - @JsxFunction - public void remove(final String token) { - if (contains(token)) { - final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); - if (attr != null) { - final List<String> values = new ArrayList<String>(Arrays.asList(attr.getValue().split(" "))); - values.remove(token); - final StringBuilder builder = new StringBuilder(); - for (int i = 0; i < values.size(); i++) { - builder.append(values.get(i)); - if (i < values.size() - 1) { - builder.append(' '); - } - } - attr.setValue(builder.toString()); - } - } - } - - /** - * Toggle the token, by adding or removing. - * @param token the token to add or remove - * @return whether the string now contains the token or not - */ - @JsxFunction - public boolean toggle(final String token) { - if (contains(token)) { - remove(token); - return false; - } - add(token); - return true; - } - - /** - * Checks if the specified token is contained in the underlying string. - * @param token the token to add - * @return true if the underlying string contains token, otherwise false - */ - @JsxFunction - public boolean contains(final String token) { - final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); - if (attr != null) { - final List<String> values = Arrays.asList(attr.getValue().split(" ")); - return values.contains(token); - } - return false; - } - - /** - * Returns the item at the specified index. - * @param index the index of the item - * @return the item - */ - @JsxFunction - public Object item(final int index) { - final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); - if (attr != null) { - final List<String> values = Arrays.asList(attr.getValue().split(" ")); - if (index < values.size()) { - return values.get(index); - } - } - return null; - } -} Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Document.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Document.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Document.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -51,6 +51,7 @@ 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.dom.DOMImplementation; import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLCollection; import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement; import com.gargoylesoftware.htmlunit.xml.XmlUtil; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -36,6 +36,7 @@ import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; import com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMTokenList; import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLCollection; /** 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 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Node.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -56,6 +56,7 @@ 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.dom.DOMException; import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLHtmlElement; import com.gargoylesoftware.htmlunit.javascript.host.xml.XMLSerializer; import com.gargoylesoftware.htmlunit.xml.XmlPage; Copied: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMException.java (from rev 7691, trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMException.java) =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMException.java (rev 0) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMException.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2002-2012 Gargoyle Software Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gargoylesoftware.htmlunit.javascript.host.dom; + +import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; +import net.sourceforge.htmlunit.corejs.javascript.Context; + +import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstant; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxGetter; +import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; + +/** + * Exception for DOM manipulations. + * + * @see <a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-17189187"> + * DOM-Level-2-Core</a> + * @version $Revision$ + * @author Marc Guillemot + */ +@JsxClass(browsers = @WebBrowser(FF)) +public class DOMException extends SimpleScriptable { + /** If the specified range of text does not fit into a DOMString. */ + @JsxConstant + public static final short DOMSTRING_SIZE_ERR = org.w3c.dom.DOMException.DOMSTRING_SIZE_ERR; + /** If any node is inserted somewhere it doesn't belong. */ + @JsxConstant + public static final short HIERARCHY_REQUEST_ERR = org.w3c.dom.DOMException.HIERARCHY_REQUEST_ERR; + /** If index or size is negative, or greater than the allowed value. */ + @JsxConstant + public static final short INDEX_SIZE_ERR = org.w3c.dom.DOMException.INDEX_SIZE_ERR; + /** If an attempt is made to add an attribute that is already in use elsewhere. */ + @JsxConstant + public static final short INUSE_ATTRIBUTE_ERR = org.w3c.dom.DOMException.INUSE_ATTRIBUTE_ERR; + /** If a parameter or an operation is not supported by the underlying object. */ + @JsxConstant + public static final short INVALID_ACCESS_ERR = org.w3c.dom.DOMException.INVALID_ACCESS_ERR; + /** If an invalid or illegal character is specified, such as in a name. */ + @JsxConstant + public static final short INVALID_CHARACTER_ERR = org.w3c.dom.DOMException.INVALID_CHARACTER_ERR; + /** If an attempt is made to modify the type of the underlying object. */ + @JsxConstant + public static final short INVALID_MODIFICATION_ERR = org.w3c.dom.DOMException.INVALID_MODIFICATION_ERR; + /** If an attempt is made to use an object that is not, or is no longer, usable. */ + @JsxConstant + public static final short INVALID_STATE_ERR = org.w3c.dom.DOMException.INVALID_STATE_ERR; + /** If an attempt is made to create or change an object in a way which is incorrect with regard to namespaces. */ + @JsxConstant + public static final short NAMESPACE_ERR = org.w3c.dom.DOMException.NAMESPACE_ERR; + /** If data is specified for a node which does not support data. */ + @JsxConstant + public static final short NO_DATA_ALLOWED_ERR = org.w3c.dom.DOMException.NO_DATA_ALLOWED_ERR; + /** If an attempt is made to modify an object where modifications are not allowed. */ + @JsxConstant + public static final short NO_MODIFICATION_ALLOWED_ERR = org.w3c.dom.DOMException.NO_MODIFICATION_ALLOWED_ERR; + /** If an attempt is made to reference a node in a context where it does not exist. */ + @JsxConstant + public static final short NOT_FOUND_ERR = org.w3c.dom.DOMException.NOT_FOUND_ERR; + /** If the implementation does not support the requested type of object or operation. */ + @JsxConstant + public static final short NOT_SUPPORTED_ERR = org.w3c.dom.DOMException.NOT_SUPPORTED_ERR; + /** If an invalid or illegal string is specified. */ + @JsxConstant + public static final short SYNTAX_ERR = org.w3c.dom.DOMException.SYNTAX_ERR; + /** If a node is used in a different document than the one that created it (that doesn't support it). */ + @JsxConstant + public static final short WRONG_DOCUMENT_ERR = org.w3c.dom.DOMException.WRONG_DOCUMENT_ERR; + + private final short code_; + private final String message_; + private int lineNumber_; + private String fileName_; + + /** + * Default constructor used to build the prototype. + */ + public DOMException() { + code_ = -1; + message_ = null; + } + + /** + * Constructor. + * @param message the exception message + * @param errorCode the error code + */ + public DOMException(final String message, final short errorCode) { + code_ = errorCode; + message_ = message; + } + + /** + * Gets the exception code. + * @return the exception code + */ + @JsxGetter + public Object getCode() { + if (code_ == -1) { + return Context.getUndefinedValue(); + } + return code_; + } + + /** + * Gets the exception message. + * @return the exception message + */ + @JsxGetter + public Object getMessage() { + if (message_ == null) { + return Context.getUndefinedValue(); + } + return message_; + } + + /** + * Gets the line at which the exception occurred. + * @return the line of the exception + */ + @JsxGetter + public Object getLineNumber() { + if (lineNumber_ == -1) { + return Context.getUndefinedValue(); + } + return lineNumber_; + } + + /** + * Gets the name of the in which the exception occurred. + * @return the name of the source file + */ + @JsxGetter + public Object getFilename() { + if (fileName_ == null) { + return Context.getUndefinedValue(); + } + return fileName_; + } + + /** + * Sets the location in JavaScript source where this exception occurred. + * @param fileName the name of the source file + * @param lineNumber the line number + */ + public void setLocation(final String fileName, final int lineNumber) { + fileName_ = fileName; + lineNumber_ = lineNumber; + } +} Copied: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementation.java (from rev 7691, trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementation.java) =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementation.java (rev 0) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementation.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2002-2012 Gargoyle Software Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gargoylesoftware.htmlunit.javascript.host.dom; + +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_35; +import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; + +import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxFunction; +import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; +import com.gargoylesoftware.htmlunit.javascript.host.xml.XMLDocument; +import com.gargoylesoftware.htmlunit.xml.XmlPage; + +/** + * A JavaScript object for DOMImplementation. + * + * @version $Revision$ + * @author Ahmed Ashour + * + * @see <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-core.html#ID-102161490"> + * W3C Dom Level 1</a> + */ +@JsxClass +public class DOMImplementation extends SimpleScriptable { + + /** + * Test if the DOM implementation implements a specific feature. + * @param feature the name of the feature to test (case-insensitive) + * @param version the version number of the feature to test + * @return true if the feature is implemented in the specified version, false otherwise + */ + @JsxFunction + public boolean hasFeature(final String feature, final String version) { + if (getBrowserVersion().hasFeature(GENERATED_35)) { + if ("HTML".equals(feature) && "1.0".equals(version)) { + return true; + } + } + else { + if ("HTML".equals(feature) && ("1.0".equals(version) || "2.0".equals(version))) { + return true; + } + else if ("XML".equals(feature) && ("1.0".equals(version) || "2.0".equals(version))) { + return true; + } + else if ("CSS2".equals(feature) && "2.0".equals(version)) { + return true; + } + else if ("XPath".equals(feature) && "3.0".equals(version)) { + return true; + } + //TODO: other features. + } + return false; + } + + /** + * Creates an {@link XMLDocument}. + * + * @param namespaceURI the URI that identifies an XML namespace + * @param qualifiedName the qualified name of the document to instantiate + * @param doctype the document types of the document + * @return the newly created {@link XMLDocument} + */ + //TODO: change doctype type to "DocType" + @JsxFunction(@WebBrowser(FF)) + public XMLDocument createDocument(final String namespaceURI, final String qualifiedName, + final Object doctype) { + final XMLDocument document = new XMLDocument(getWindow().getWebWindow()); + document.setParentScope(getParentScope()); + document.setPrototype(getPrototype(document.getClass())); + if (qualifiedName != null && !qualifiedName.isEmpty()) { + final XmlPage page = document.getDomNodeOrDie(); + page.appendChild(page.createXmlElementNS(namespaceURI, qualifiedName)); + } + return document; + } +} Copied: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMParser.java (from rev 7691, trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMParser.java) =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMParser.java (rev 0) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMParser.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2002-2012 Gargoyle Software Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gargoylesoftware.htmlunit.javascript.host.dom; + +import static com.gargoylesoftware.htmlunit.javascript.configuration.BrowserName.FF; + +import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxConstructor; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxFunction; +import com.gargoylesoftware.htmlunit.javascript.configuration.WebBrowser; +import com.gargoylesoftware.htmlunit.javascript.host.xml.XMLDocument; + +/** + * A JavaScript object for DOMParser. + * + * @version $Revision$ + * @author Ahmed Ashour + * + * @see <a href="http://www.xulplanet.com/references/objref/DOMParser.html">XUL Planet</a> + */ +@JsxClass(browsers = @WebBrowser(FF)) +public class DOMParser extends SimpleScriptable { + + /** + * JavaScript constructor. + */ + @JsxConstructor + public void jsConstructor() { + // Empty. + } + + /** + * The string passed in is parsed into a DOM document. + * @param str the UTF16 string to be parsed + * @param contentType the content type of the string - + * either <tt>text/xml</tt>, <tt>application/xml</tt>, or <tt>application/xhtml+xml</tt>. Must not be NULL. + * @return the generated document + */ + @JsxFunction + public XMLDocument parseFromString(final String str, final String contentType) { + final XMLDocument document = new XMLDocument(); + document.setParentScope(getParentScope()); + document.setPrototype(getPrototype(XMLDocument.class)); + document.loadXML(str); + return document; + } +} Copied: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMap.java (from rev 7704, trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMStringMap.java) =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMap.java (rev 0) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMap.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2002-2012 Gargoyle Software Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gargoylesoftware.htmlunit.javascript.host.dom; + +import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; +import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; +import com.gargoylesoftware.htmlunit.javascript.host.Node; + +/** + * A JavaScript object for DOMStringMap. + * + * @version $Revision$ + * @author Ahmed Ashour + */ +@JsxClass +public final class DOMStringMap extends SimpleScriptable { + + /** + * Creates an instance. JavaScript objects must have a default constructor. + */ + public DOMStringMap() { + } + + /** + * Creates an instance. + * @param node the node which contains the underlying string + */ + public DOMStringMap(final Node node) { + setDomNode(node.getDomNodeOrDie(), false); + setParentScope(node.getParentScope()); + setPrototype(getPrototype(getClass())); + } + +} Copied: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMTokenList.java (from rev 7691, trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/DOMTokenList.java) =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMTokenList.java (rev 0) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMTokenList.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2002-2012 Gargoyle Software Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gargoylesoftware.htmlunit.javascript.host.dom; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.gargoylesoftware.htmlunit.html.DomAttr; +import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; +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.host.Node; + +/** + * A JavaScript object for DOMTokenList. + * + * @version $Revision$ + * @author Ahmed Ashour + */ +@JsxClass +public final class DOMTokenList extends SimpleScriptable { + + private String attributeName_; + + /** + * Creates an instance. JavaScript objects must have a default constructor. + */ + public DOMTokenList() { + } + + /** + * Creates an instance. + * @param node the node which contains the underlying string + * @param attributeName the attribute name of the DomElement of the specified node + */ + public DOMTokenList(final Node node, final String attributeName) { + setDomNode(node.getDomNodeOrDie(), false); + setParentScope(node.getParentScope()); + setPrototype(getPrototype(getClass())); + attributeName_ = attributeName; + } + + /** + * Returns the length property. + * @return the length + */ + @JsxGetter + public int getLength() { + final String value = getDefaultValue(null); + return value.split(" ").length; + } + + /** + * {@inheritDoc} + */ + @Override + public String getDefaultValue(final Class<?> hint) { + final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); + if (attr != null) { + final String value = attr.getValue(); + return value; + } + return ""; + } + + /** + * Adds the specified token to the underlying string. + * @param token the token to add + */ + @JsxFunction + public void add(final String token) { + if (!contains(token)) { + final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); + attr.setValue(attr.getValue() + ' ' + token); + } + } + + /** + * Removes the specified token from the underlying string. + * @param token the token to remove + */ + @JsxFunction + public void remove(final String token) { + if (contains(token)) { + final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); + if (attr != null) { + final List<String> values = new ArrayList<String>(Arrays.asList(attr.getValue().split(" "))); + values.remove(token); + final StringBuilder builder = new StringBuilder(); + for (int i = 0; i < values.size(); i++) { + builder.append(values.get(i)); + if (i < values.size() - 1) { + builder.append(' '); + } + } + attr.setValue(builder.toString()); + } + } + } + + /** + * Toggle the token, by adding or removing. + * @param token the token to add or remove + * @return whether the string now contains the token or not + */ + @JsxFunction + public boolean toggle(final String token) { + if (contains(token)) { + remove(token); + return false; + } + add(token); + return true; + } + + /** + * Checks if the specified token is contained in the underlying string. + * @param token the token to add + * @return true if the underlying string contains token, otherwise false + */ + @JsxFunction + public boolean contains(final String token) { + final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); + if (attr != null) { + final List<String> values = Arrays.asList(attr.getValue().split(" ")); + return values.contains(token); + } + return false; + } + + /** + * Returns the item at the specified index. + * @param index the index of the item + * @return the item + */ + @JsxFunction + public Object item(final int index) { + final DomAttr attr = (DomAttr) getDomNodeOrDie().getAttributes().getNamedItem(attributeName_); + if (attr != null) { + final List<String> values = Arrays.asList(attr.getValue().split(" ")); + if (index < values.size()) { + return values.get(index); + } + } + return null; + } +} Added: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/package.html =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/package.html (rev 0) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/package.html 2012-11-09 11:12:24 UTC (rev 7705) @@ -0,0 +1,5 @@ +<html><head></head> +<body> +Implementations of the DOM JavaScript host objects - users of HtmlUnit shouldn't +need anything in this package. +</body></html> Property changes on: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/package.html ___________________________________________________________________ Added: svn:eol-style + native 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 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -101,8 +101,6 @@ import com.gargoylesoftware.htmlunit.javascript.host.Attr; import com.gargoylesoftware.htmlunit.javascript.host.BoxObject; import com.gargoylesoftware.htmlunit.javascript.host.ClientRect; -import com.gargoylesoftware.htmlunit.javascript.host.DOMStringMap; -import com.gargoylesoftware.htmlunit.javascript.host.DOMTokenList; import com.gargoylesoftware.htmlunit.javascript.host.Element; import com.gargoylesoftware.htmlunit.javascript.host.Event; import com.gargoylesoftware.htmlunit.javascript.host.EventHandler; @@ -114,6 +112,8 @@ import com.gargoylesoftware.htmlunit.javascript.host.Window; import com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration; import com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMStringMap; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMTokenList; /** * The JavaScript object "HTMLElement" which is the base class for all HTML Deleted: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMExceptionTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMExceptionTest.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMExceptionTest.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2002-2012 Gargoyle Software Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gargoylesoftware.htmlunit.javascript.host; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import com.gargoylesoftware.htmlunit.BrowserRunner; -import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.WebDriverTestCase; - -/** - * Tests for {@link DOMException}. - * - * @version $Revision$ - * @author Marc Guillemot - */ -@RunWith(BrowserRunner.class) -public class DOMExceptionTest extends WebDriverTestCase { - - /** - * @throws Exception if the test fails - */ - @Test - @Alerts(FF = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15" }, - IE = "exception") - public void constants() throws Exception { - final String html = "<html><head>\n" - + "<script>\n" - + " var properties = ['INDEX_SIZE_ERR', 'DOMSTRING_SIZE_ERR', 'HIERARCHY_REQUEST_ERR'," - + " 'WRONG_DOCUMENT_ERR', 'INVALID_CHARACTER_ERR', 'NO_DATA_ALLOWED_ERR', 'NO_MODIFICATION_ALLOWED_ERR'," - + " 'NOT_FOUND_ERR', 'NOT_SUPPORTED_ERR', 'INUSE_ATTRIBUTE_ERR', 'INVALID_STATE_ERR', 'SYNTAX_ERR'," - + " 'INVALID_MODIFICATION_ERR', 'NAMESPACE_ERR', 'INVALID_ACCESS_ERR'];\n" - + " try {\n" - + " for (var i=0; i<properties.length; ++i) {\n" - + " alert(DOMException[properties[i]]);\n" - + " }\n" - + " } catch(e) { alert('exception');}\n" - + "</script></head>\n" - + "<body></body></html>"; - - loadPageWithAlerts2(html); - } - - /** - * @throws Exception if the test fails - */ - @Test - @Alerts(FF = { "undefined", "undefined", "undefined", "undefined" }, - IE = "exception") - public void properties() throws Exception { - final String html = "<html><head>\n" - + "<script>\n" - + " try {\n" - + " alert(DOMException.code);\n" - + " alert(DOMException.filename);\n" - + " alert(DOMException.lineNumber);\n" - + " alert(DOMException.message);\n" - + " } catch(e) { alert('exception');}\n" - + "</script></head>\n" - + "<body></body></html>"; - - loadPageWithAlerts2(html); - } - - /** - * Test exception throw by an illegal DOM appendChild. - * @throws Exception if the test fails - */ - @Test - @Alerts(FF = { "3", "Node cannot be inserted at the specified point in the hierarchy", - "6", "§§URL§§", "HIERARCHY_REQUEST_ERR: 3", "1" }, - IE = { "1" }) - public void appendChild_illegal_node() throws Exception { - final String html = "<html><head><title>foo</title><script>\n" - + "function test() {\n" - + " var htmlNode = document.documentElement;\n" - + " var body = document.body;\n" - + " try {\n" - + " body.appendChild(htmlNode);\n" - + " } catch(e) {\n" - + " alert(e.code);\n" - + " alert(e.message);\n" - + " alert(e.lineNumber);\n" - + " alert(e.filename);\n" - + " alert('HIERARCHY_REQUEST_ERR: ' + e.HIERARCHY_REQUEST_ERR);\n" - + " };\n" - + " alert(body.childNodes.length);\n" - + "}\n" - + "</script></head><body onload='test()'><span>hi</span></body></html>"; - - loadPageWithAlerts2(html); - } -} Deleted: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementationTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementationTest.java 2012-11-09 11:07:39 UTC (rev 7704) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/DOMImplementationTest.java 2012-11-09 11:12:24 UTC (rev 7705) @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2002-2012 Gargoyle Software Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gargoylesoftware.htmlunit.javascript.host; - -import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.FF; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import com.gargoylesoftware.htmlunit.BrowserRunner; -import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.BrowserRunner.Browsers; -import com.gargoylesoftware.htmlunit.SimpleWebTestCase; - -/** - * Tests for {@link DOMImplementation}. - * - * @version $Revision$ - * @author Ahmed Ashour - * @author Marc Guillemot - */ -@RunWith(BrowserRunner.class) -public class DOMImplementationTest extends SimpleWebTestCase { - - /** - * @throws Exception if the test fails - */ - @Test - @Alerts(FF = { "HTML 1.0: true", "HTML 2.0: true", "HTML 3.0: false" }, - IE = { "HTML 1.0: true", "HTML 2.0: false", "HTML 3.0: false" }) - public void hasFeatu... [truncated message content] |
From: <asa...@us...> - 2012-11-09 12:58:45
|
Revision: 7706 http://sourceforge.net/p/htmlunit/code/7706 Author: asashour Date: 2012-11-09 12:58:42 +0000 (Fri, 09 Nov 2012) Log Message: ----------- Implement DOMStringMap Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfiguration.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMap.java Added Paths: ----------- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMapTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfiguration.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfiguration.java 2012-11-09 11:12:24 UTC (rev 7705) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/configuration/JavaScriptConfiguration.java 2012-11-09 12:58:42 UTC (rev 7706) @@ -116,6 +116,7 @@ import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMException; import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMImplementation; import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMParser; +import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMStringMap; import com.gargoylesoftware.htmlunit.javascript.host.dom.DOMTokenList; import com.gargoylesoftware.htmlunit.javascript.host.geo.Coordinates; import com.gargoylesoftware.htmlunit.javascript.host.geo.Geolocation; @@ -281,7 +282,8 @@ CSSRuleList.class, CSSStyleDeclaration.class, CSSStyleRule.class, CSSStyleSheet.class, CSSValue.class, CanvasRenderingContext2D.class, CharacterDataImpl.class, ClientRect.class, Comment.class, ComputedCSSStyleDeclaration.class, Console.class, Coordinates.class, DataView.class, DOMException.class, - DOMImplementation.class, DOMParser.class, DOMTokenList.class, Document.class, DocumentFragment.class, + DOMImplementation.class, DOMParser.class, DOMStringMap.class, + DOMTokenList.class, Document.class, DocumentFragment.class, DocumentType.class, Element.class, Enumerator.class, Event.class, EventNode.class, External.class, Float32Array.class, Float64Array.class, FormChild.class, FormField.class, Geolocation.class, History.class, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java 2012-11-09 11:12:24 UTC (rev 7705) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/css/CSSStyleDeclaration.java 2012-11-09 12:58:42 UTC (rev 7706) @@ -706,6 +706,7 @@ * to camel-cased (e.g. <tt>fontSize</tt>). * @param string the string to camelize * @return the transformed string + * @see com.gargoylesoftware.htmlunit.javascript.host.dom.DOMStringMap#decamelize(String) */ protected static String camelize(final String string) { if (string == null) { @@ -719,7 +720,7 @@ // not found in CamelizeCache_; convert and store in cache final int pos = string.indexOf('-'); - if (pos == -1 || pos >= string.length() - 1) { + if (pos == -1 || pos == string.length() - 1) { // cache also this strings for performance CamelizeCache_.put(string, string); return string; Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMap.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMap.java 2012-11-09 11:12:24 UTC (rev 7705) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMap.java 2012-11-09 12:58:42 UTC (rev 7706) @@ -14,9 +14,16 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.dom; +import net.sourceforge.htmlunit.corejs.javascript.Context; +import net.sourceforge.htmlunit.corejs.javascript.Scriptable; +import net.sourceforge.htmlunit.corejs.javascript.ScriptableObject; + +import com.gargoylesoftware.htmlunit.html.DomElement; +import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.javascript.SimpleScriptable; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.host.Node; +import com.gargoylesoftware.htmlunit.javascript.host.Window; /** * A JavaScript object for DOMStringMap. @@ -43,4 +50,57 @@ setPrototype(getPrototype(getClass())); } + /** + * {@inheritDoc} + */ + @Override + public Object get(final String name, final Scriptable start) { + final HtmlElement e = getDomNodeOrNull(); + if (e != null) { + final String value = e.getAttribute("data-" + decamelize(name)); + if (value != DomElement.ATTRIBUTE_NOT_DEFINED) { + return value; + } + } + return NOT_FOUND; + } + + /** + * {@inheritDoc} + */ + public void put(final String name, final Scriptable start, final Object value) { + if (!(ScriptableObject.getTopLevelScope(this) instanceof Window) || getWindow().getWebWindow() == null) { + super.put(name, start, value); + } + else { + final HtmlElement e = getDomNodeOrNull(); + e.setAttribute("data-" + decamelize(name), Context.toString(value)); + } + } + + /** + * Transforms the specified string from camel-cased (e.g. <tt>fontSize</tt>) + * to delimiter-separated (e.g. <tt>font-size</tt>). + * to camel-cased . + * @param string the string to decamelize + * @return the transformed string + * @see com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration#camelize + */ + public static String decamelize(final String string) { + if (string == null || string.isEmpty()) { + return string; + } + + final StringBuilder buffer = new StringBuilder(); + for (int i = 0; i < string.length(); i++) { + final char ch = string.charAt(i); + if (Character.isUpperCase(ch)) { + buffer.append('-').append(Character.toLowerCase(ch)); + } + else { + buffer.append(ch); + } + } + return buffer.toString(); + } } Added: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMapTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMapTest.java (rev 0) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMapTest.java 2012-11-09 12:58:42 UTC (rev 7706) @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2002-2012 Gargoyle Software Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gargoylesoftware.htmlunit.javascript.host.dom; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.gargoylesoftware.htmlunit.BrowserRunner; +import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; +import com.gargoylesoftware.htmlunit.WebDriverTestCase; + +/** + * Tests for {@link DOMStringMap}. + * + * @version $Revision$ + * @author Ahmed Ashour + */ +@RunWith(BrowserRunner.class) +public class DOMStringMapTest extends WebDriverTestCase { + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(FF = { "undefined", "there" }, FF3_6 = { }) + public void get() throws Exception { + final String html + = "<html><head><title>First</title><script>\n" + + "function test() {\n" + + " if (document.body.dataset) {\n" + + " alert(document.body.dataset.hi);\n" + + " alert(document.body.dataset.hello);\n" + + " }\n" + + "}\n" + + "</script></head><body onload='test()' data-hello='there'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(FF = { "old", "old", "null", "null" }, FF3_6 = { }) + public void put() throws Exception { + final String html + = "<html><head><title>First</title><script>\n" + + "function test() {\n" + + " if (document.body.dataset) {\n" + + " document.body.dataset.dateOfBirth = 'old';\n" + + " alert(document.body.dataset.dateOfBirth);\n" + + " alert(document.body.getAttribute('data-date-of-birth'));\n" + + " document.body.dataset.dateOfBirth = null;\n" + + " alert(document.body.dataset.dateOfBirth);\n" + + " alert(document.body.getAttribute('data-date-of-birth'));\n" + + " }\n" + + "}\n" + + "</script></head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } +} Property changes on: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMStringMapTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native |
From: <asa...@us...> - 2012-11-11 11:58:38
|
Revision: 7717 http://sourceforge.net/p/htmlunit/code/7717 Author: asashour Date: 2012-11-11 11:58:29 +0000 (Sun, 11 Nov 2012) Log Message: ----------- GWT 2.5.0 is fully supported Modified Paths: -------------- trunk/htmlunit/src/site/xdoc/index.xml trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/GWT250Test.java trunk/htmlunit/src/test/resources/libraries/GWT/README Added Paths: ----------- trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/JSON.css trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/JSON.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/gwt/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/gwt/sample/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/gwt/sample/json/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/gwt/sample/json/client/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/gwt/sample/json/client/JSON$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/gwt/sample/json/client/JSON$JSONResponseTextHandler.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/gwt/sample/json/client/JSON$SearchButtonHandler.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/classes/com/google/gwt/sample/json/client/JSON.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/rpcPolicyManifest/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/rpcPolicyManifest/manifest.txt trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/symbolMaps/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/symbolMaps/1CB5881BCD2440CDE42D0CF4F0AF7D50.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/symbolMaps/26CB0FC5722AD090CBEB33754AF88029.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/symbolMaps/50CE601D10A7FA0094E0376DAF7507C8.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/symbolMaps/75B7BE35EFF32B1B1619B707923B24EA.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/symbolMaps/A3BA7E53F27A30621C5D3EF6C58AB0E6.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/deploy/json/symbolMaps/D8A4B76C156D45CC3DF2C75F5F08AFD5.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/lib/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/WEB-INF/web.xml trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/favicon.ico trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/1CB5881BCD2440CDE42D0CF4F0AF7D50.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/26CB0FC5722AD090CBEB33754AF88029.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/50CE601D10A7FA0094E0376DAF7507C8.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/75B7BE35EFF32B1B1619B707923B24EA.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/A3BA7E53F27A30621C5D3EF6C58AB0E6.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/D8A4B76C156D45CC3DF2C75F5F08AFD5.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/EDC7827FEEA59EE44AD790B1C6430C45.cache.png trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/clear.cache.gif trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/hosted.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/json.nocache.js trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/JSON/json/search-results.js trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/Mail.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/AboutDialog$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/AboutDialog.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Contacts$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Contacts$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Contacts$Contact.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Contacts$ContactPopup$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Contacts$ContactPopup.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Contacts$Style.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Contacts.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Mail$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Mail$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Mail$GlobalResources.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Mail.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/MailDetail$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/MailDetail.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/MailItem.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/MailItems.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/MailList$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/MailList$Listener.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/MailList$SelectionStyle.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/MailList.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Mailboxes$Images.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Mailboxes.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/NavBar$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/NavBar.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Shortcuts$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Shortcuts.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Tasks$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/Tasks.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/TopPanel$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/classes/com/google/gwt/sample/mail/client/TopPanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/rpcPolicyManifest/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/rpcPolicyManifest/manifest.txt trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/symbolMaps/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/symbolMaps/0FD17690641499F3B3073381950B9DEA.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/symbolMaps/1CBD15371417A37D11E798197D696D2A.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/symbolMaps/333B1D6BD61A407BDEE0D8664CCF288D.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/symbolMaps/94EB8763933572351940583828B15D59.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/symbolMaps/952ED36BC018DA83A54F08D5C39A29A9.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/deploy/mail/symbolMaps/9F9D13C00E02D147B9790082EB2D188E.symbolMap trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/lib/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/WEB-INF/web.xml trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/favicon.ico trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/gradient_bg_th.png trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/0FD17690641499F3B3073381950B9DEA.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/196F0C6B8AACCA73AFF0D609FFAB5378.cache.png trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/1CBD15371417A37D11E798197D696D2A.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/20BE821ADF70427E40CF4EB11BAEF83E.cache.png trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/333B1D6BD61A407BDEE0D8664CCF288D.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/3BC9B6E44E4771F2F85B9094A2DA6416.cache.png trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/51BDF5B93509AA1F1BC6DF3080013499.cache.jpg trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/565F22FF7696FB352A8B0BFB04001E79.cache.png trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/61B4B0B4F491ADB29DB45F9620850594.cache.gif trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/91D5CD9C9F27CB285666947488F07704.cache.gif trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/94EB8763933572351940583828B15D59.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/952ED36BC018DA83A54F08D5C39A29A9.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/9F9D13C00E02D147B9790082EB2D188E.cache.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/B6B6AE38F859FEC58CE8973F5C4D740D.cache.gif trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/C4943CC50481C035E92103C8CAB306AF.cache.gif trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/DE97258B391723C7A5CE876B33D33A0D.cache.png trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/EDC7827FEEA59EE44AD790B1C6430C45.cache.png trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/clear.cache.gif trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/hosted.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Mail/mail/mail.nocache.js trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/Showcase.html trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/appengine-web.xml trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ContentWidget$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ContentWidget$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ContentWidget$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ContentWidget$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ContentWidget$Callback.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ContentWidget.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ContentWidgetView$ContentWidgetViewUiBinder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ContentWidgetView.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel$Category.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel$CategoryCell.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel$ContentWidgetCell.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel$MenuConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/Showcase$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/Showcase$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/Showcase$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/Showcase$GeneratorInfo.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/Showcase.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseAnnotations$ShowcaseData.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseAnnotations$ShowcaseRaw.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseAnnotations$ShowcaseSource.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseAnnotations$ShowcaseStyle.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseAnnotations.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseResources.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell$5.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell$6.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell$CustomCallback.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell$ShowcaseShellUiBinder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/ShowcaseShell.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactDatabase$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactDatabase$Category.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactDatabase$ContactInfo$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactDatabase$ContactInfo.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactDatabase$DatabaseConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactDatabase.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactInfoForm$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactInfoForm$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactInfoForm$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactInfoForm.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel$CategoryCell.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel$Images.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel$LetterCount.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel$LetterCountCell.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellBrowser$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellBrowser$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellBrowser$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellBrowser$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellBrowser.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellList$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellList$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellList$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellList$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellList$ContactCell.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellList$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellList$Images.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellList.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$10.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$11.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$12.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$13.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$14.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$15.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$16.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$17.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$18.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$19.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$20.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$21.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$22.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$23.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$24.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$25.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$5.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$6.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$7.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$8.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$9.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$BirthdayChange.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$CategoryChange.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$FirstNameChange.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$GetValue.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$Images.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$LastNameChange.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler$PendingChange.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellSampler.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$10.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$11.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$12.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$5.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$6.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$7.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$8.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$9.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTable.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTree$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTree$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTree$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTree$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellTree.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$3$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$Template.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$ValidatableInputCell.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation$ValidationData.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$10.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$11.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$12.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$13.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$14.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$15.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$16.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$17.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$5.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$6.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$7.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$8.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$9.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$CustomFooterBuilder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$CustomHeaderBuilder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$CustomTableBuilder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$Resources.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid$Styles.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwCustomDataGrid.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$10.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$11.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$12.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$13.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$14.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$15.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$5.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$6.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$7.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$8.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$9.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$Binder.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/CwDataGrid.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/RangeLabelPager.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ShowMorePagerPanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/cell/ShowMorePagerPanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/BlogMessages.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/ColorConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwBidiFormatting$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwBidiFormatting$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwBidiFormatting$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwBidiFormatting$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwBidiFormatting.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwBidiInput$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwBidiInput$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwBidiInput.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsExample$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsExample$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsExample$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsExample.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsWithLookupExample$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsWithLookupExample$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsWithLookupExample$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsWithLookupExample$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwConstantsWithLookupExample.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDateTimeFormat$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDateTimeFormat$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDateTimeFormat$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDateTimeFormat$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDateTimeFormat$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDateTimeFormat.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDictionaryExample$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDictionaryExample$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwDictionaryExample.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwMessagesExample$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwMessagesExample$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwMessagesExample$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwMessagesExample$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwMessagesExample.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwNumberFormat$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwNumberFormat$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwNumberFormat$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwNumberFormat$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwNumberFormat$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwNumberFormat.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwPluralFormsExample$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwPluralFormsExample$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwPluralFormsExample$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwPluralFormsExample$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/CwPluralFormsExample.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/ErrorMessages.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/ExampleConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/i18n/PluralMessages.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwListBox$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwListBox$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwListBox$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwListBox.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwMenuBar$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwMenuBar$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwMenuBar$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwMenuBar.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackLayoutPanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackLayoutPanel$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackLayoutPanel$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackLayoutPanel$Images.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackLayoutPanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackPanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackPanel$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackPanel$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackPanel$Images.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwStackPanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwSuggestBox$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwSuggestBox$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwSuggestBox.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwTree$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwTree$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwTree$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/lists/CwTree.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwAnimation$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwAnimation$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwAnimation$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwAnimation$CustomAnimation.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwAnimation$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwAnimation.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwCookies$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwCookies$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwCookies$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwCookies$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwCookies$5.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwCookies$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwCookies.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwFrame$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwFrame$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwFrame$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwFrame$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/other/CwFrame.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/ trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwAbsolutePanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwAbsolutePanel$2.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwAbsolutePanel$3.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwAbsolutePanel$4.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwAbsolutePanel$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwAbsolutePanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDecoratorPanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDecoratorPanel$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDecoratorPanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDisclosurePanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDisclosurePanel$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDisclosurePanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDockPanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDockPanel$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwDockPanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwFlowPanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwFlowPanel$CwConstants.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwFlowPanel.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwHorizontalPanel$1.class trunk/htmlunit/src/test/resources/libraries/GWT/2.5.0/Showcase/WEB-INF/classes/com/google/gwt/sample/showcase/client/content/panels/CwHorizontalPanel... [truncated message content] |
From: <asa...@us...> - 2012-11-12 11:03:36
|
Revision: 7720 http://sourceforge.net/p/htmlunit/code/7720 Author: asashour Date: 2012-11-12 11:03:27 +0000 (Mon, 12 Nov 2012) Log Message: ----------- JavaScript: handle definition of "function object.property() {}" (IE). 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/HtmlUnitContextFactory.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngineTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-11 12:40:03 UTC (rev 7719) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-12 11:03:27 UTC (rev 7720) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour"> + JavaScript: handle definition of "function object.property() {}" (IE). + </action> <action type="add" dev="asashour"> JavaScript: implement property HTMLElement.dataset (FF10). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-11 12:40:03 UTC (rev 7719) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-12 11:03:27 UTC (rev 7720) @@ -857,6 +857,13 @@ @BrowserFeature({ @WebBrowser(value = FF, minVersion = 10), @WebBrowser(CHROME) }) JS_FUNCTION_BIND, + /** + * Indicates that function can be defined as + * <code>function object.property() {}</code> instead of <code>object.property = function() {}</code>. + */ + @BrowserFeature(@WebBrowser(IE)) + JS_FUNCTION_OBJECT_METHOD, + /** Indicates if the method toSource exists on the native objects. */ @BrowserFeature(@WebBrowser(FF)) JS_FUNCTION_TOSOURCE, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/HtmlUnitContextFactory.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/HtmlUnitContextFactory.java 2012-11-11 12:40:03 UTC (rev 7719) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/HtmlUnitContextFactory.java 2012-11-12 11:03:27 UTC (rev 7720) @@ -303,6 +303,8 @@ return browserVersion_.hasFeature(JS_ERROR_STACK); case Context.FEATURE_HTMLUNIT_CONSTRUCTOR: return browserVersion_.hasFeature(BrowserVersionFeatures.JS_CONSTRUCTOR); + case Context.FEATURE_HTMLUNIT_FUNCTION_OBJECT_METHOD: + return browserVersion_.hasFeature(BrowserVersionFeatures.JS_FUNCTION_OBJECT_METHOD); default: return super.hasFeature(cx, featureIndex); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngineTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngineTest.java 2012-11-11 12:40:03 UTC (rev 7719) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngineTest.java 2012-11-12 11:03:27 UTC (rev 7720) @@ -1624,22 +1624,23 @@ * @throws Exception if the test fails */ @Test - @NotYetImplemented - @Alerts(IE = { "1", "2" }, FF = { }) + @Alerts(IE = { "1", "2" }) public void function_object_method() throws Exception { - final String html = "<html><head><title>foo</title><script>\n" - + " try {\n" - + " alert('1');\n" - + " function document.onclick() {\n" - + " alert('hi');\n" - + " }\n" - + " alert('2');\n" - + " } catch(e) {alert(e)}\n" - + "</script></head><body>\n" - + " <div id='myDiv'>Hello there</div>\n" - + "</body></html>"; + if (getBrowserVersion().isIE()) { + final String html = "<html><head><title>foo</title><script>\n" + + " try {\n" + + " alert('1');\n" + + " function document.onclick() {\n" + + " alert('hi');\n" + + " }\n" + + " alert('2');\n" + + " } catch(e) {alert(e)}\n" + + "</script></head><body>\n" + + " <div id='myDiv'>Hello there</div>\n" + + "</body></html>"; - loadPageWithAlerts(html); + loadPageWithAlerts(html); + } } /** |
From: <mgu...@us...> - 2012-11-13 13:31:37
|
Revision: 7726 http://sourceforge.net/p/htmlunit/code/7726 Author: mguillem Date: 2012-11-13 13:31:33 +0000 (Tue, 13 Nov 2012) Log Message: ----------- JavaScript: don't enumerate function properties "arguments" and "caller" (fixed in core-js snapshot) Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-13 05:55:45 UTC (rev 7725) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-13 13:31:33 UTC (rev 7726) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="mguillem"> + JavaScript: don't enumerate function properties "arguments" and "caller". + </action> <action type="fix" dev="asashour"> JavaScript: handle definition of "function object.property() {}" (IE). </action> Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionTest.java 2012-11-13 05:55:45 UTC (rev 7725) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/NativeFunctionTest.java 2012-11-13 13:31:33 UTC (rev 7726) @@ -145,4 +145,27 @@ loadPageWithAlerts2(html); } + + /** + * Function properties "arguments" and "caller" were wrongly enumerated as of HtmlUnit-2.11. + * @throws Exception if the test fails + */ + @Test + @Alerts("foo1 done") + public void in() throws Exception { + final String html = "<html><body><script>\n" + + "function foo1() {\n" + + " for (var i in foo1) {\n" + + " alert(i);\n" + + " };\n" + + " alert('foo1 done');\n" + + "};\n" + + "function foo0() {\n" + + " foo1();\n" + + "}\n" + + "foo0();\n" + + "</script></body></html>"; + + loadPageWithAlerts2(html); + } } |
From: <asa...@us...> - 2012-11-17 13:13:30
|
Revision: 7733 http://sourceforge.net/p/htmlunit/code/7733 Author: asashour Date: 2012-11-17 13:13:26 +0000 (Sat, 17 Nov 2012) Log Message: ----------- JavaScript: prevent infinite loop during adding a DomNode to itself. Issue 1253 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/html/DomNode.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-16 10:30:59 UTC (rev 7732) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-17 13:13:26 UTC (rev 7733) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour" issue="1253"> + JavaScript: prevent infinite loop during adding a DomNode to itself. + </action> <action type="fix" dev="mguillem"> JavaScript: don't enumerate function properties "arguments" and "caller". </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-16 10:30:59 UTC (rev 7732) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-17 13:13:26 UTC (rev 7733) @@ -1073,6 +1073,10 @@ @BrowserFeature(@WebBrowser(FF)) KEYBOARD_EVENT_SPECIAL_KEYPRESS, + /** If true, then silently ignore element.appendChild(element); */ + @BrowserFeature(@WebBrowser(IE)) + NODE_APPEND_CHILD_SELF_IGNORE, + /** Body of a <noscript> tag is not totally ignored but considered as a (not displayed) text node. */ @BrowserFeature({ @WebBrowser(FF), @WebBrowser(CHROME) }) NOSCRIPT_BODY_AS_TEXT, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2012-11-16 10:30:59 UTC (rev 7732) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2012-11-17 13:13:26 UTC (rev 7733) @@ -16,6 +16,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.DISPLAYED_COLLAPSE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.DOM_NORMALIZE_REMOVE_CHILDREN; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.NODE_APPEND_CHILD_SELF_IGNORE; import java.io.IOException; import java.io.PrintWriter; @@ -30,6 +31,7 @@ import java.util.NoSuchElementException; import java.util.concurrent.atomic.AtomicBoolean; +import net.sourceforge.htmlunit.corejs.javascript.Context; import net.sourceforge.htmlunit.corejs.javascript.ScriptableObject; import org.w3c.css.sac.CSSException; @@ -875,6 +877,12 @@ * {@inheritDoc} */ public DomNode appendChild(final Node node) { + if (node == this) { + if (!hasFeature(NODE_APPEND_CHILD_SELF_IGNORE)) { + Context.throwAsScriptRuntimeEx(new Exception("Can not add not to itself " + this)); + } + return this; + } final DomNode domNode = (DomNode) node; if (domNode instanceof DomDocumentFragment) { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeTest.java 2012-11-16 10:30:59 UTC (rev 7732) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeTest.java 2012-11-17 13:13:26 UTC (rev 7733) @@ -764,4 +764,28 @@ assertTrue(page.getElementById("d3").isDisplayed()); } + /** + * Test for Bug #1253. + * + * @throws Exception on test failure + */ + @Test + @Alerts(FF = { "exception", "0" }, IE = {"true", "0" }) + public void appendChild_recursive() throws Exception { + final String html = "<html><head><title>foo</title>\n" + + "<script>\n" + + "function test(){\n" + + " var e = document.createElement('div');\n" + + " try {\n" + + " alert(e.appendChild(e) === e);\n" + + " } catch(e) {alert('exception');}\n" + + " alert(e.childNodes.length);" + + "}\n" + + "</script>\n" + + "</head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts(html); + } + } |
From: <asa...@us...> - 2012-11-17 23:42:30
|
Revision: 7736 http://sourceforge.net/p/htmlunit/code/7736 Author: asashour Date: 2012-11-17 23:42:27 +0000 (Sat, 17 Nov 2012) Log Message: ----------- organize imports Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlSubmitInputTest.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 2012-11-17 23:39:00 UTC (rev 7735) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/xml/XMLHttpRequest.java 2012-11-17 23:42:27 UTC (rev 7736) @@ -36,8 +36,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map.Entry; import java.util.Stack; -import java.util.Map.Entry; import net.sourceforge.htmlunit.corejs.javascript.Context; import net.sourceforge.htmlunit.corejs.javascript.ContextAction; Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlSubmitInputTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlSubmitInputTest.java 2012-11-17 23:39:00 UTC (rev 7735) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlSubmitInputTest.java 2012-11-17 23:42:27 UTC (rev 7736) @@ -26,8 +26,8 @@ import org.openqa.selenium.WebElement; import com.gargoylesoftware.htmlunit.BrowserRunner; +import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; import com.gargoylesoftware.htmlunit.MockWebConnection; -import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; import com.gargoylesoftware.htmlunit.WebDriverTestCase; import com.gargoylesoftware.htmlunit.util.NameValuePair; |
From: <asa...@us...> - 2012-11-19 13:24:28
|
Revision: 7739 http://sourceforge.net/p/htmlunit/code/7739 Author: asashour Date: 2012-11-19 13:24:25 +0000 (Mon, 19 Nov 2012) Log Message: ----------- JavaScript: function name referenced before its declaration should throw an exception (FF). Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-19 09:22:49 UTC (rev 7738) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-19 13:24:25 UTC (rev 7739) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour"> + JavaScript: function name referenced before its declaration should throw an exception (FF). + </action> <action type="fix" dev="asashour" issue="1253"> JavaScript: prevent infinite loop during adding a DomNode to itself. </action> Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java 2012-11-19 09:22:49 UTC (rev 7738) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java 2012-11-19 13:24:25 UTC (rev 7739) @@ -150,7 +150,7 @@ @Test @Alerts(FF = { "undefined", "foo error" }, IE = {"function foo() {}", "function foo() {}" }) - @NotYetImplemented + @NotYetImplemented(IE) public void variableNotDefined() throws Exception { final String html = "<html><head></head><body>\n" + "<script>\n" |
From: <asa...@us...> - 2012-11-19 14:46:08
|
Revision: 7740 http://sourceforge.net/p/htmlunit/code/7740 Author: asashour Date: 2012-11-19 14:46:05 +0000 (Mon, 19 Nov 2012) Log Message: ----------- JavaScript: function name referenced before its declaration should be visible (IE). 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/HtmlUnitContextFactory.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-19 13:24:25 UTC (rev 7739) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-19 14:46:05 UTC (rev 7740) @@ -9,6 +9,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> <action type="fix" dev="asashour"> + JavaScript: function name referenced before its declaration should be visible (IE). + </action> + <action type="fix" dev="asashour"> JavaScript: function name referenced before its declaration should throw an exception (FF). </action> <action type="fix" dev="asashour" issue="1253"> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-19 13:24:25 UTC (rev 7739) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-19 14:46:05 UTC (rev 7740) @@ -858,6 +858,12 @@ JS_FUNCTION_BIND, /** + * Indicates that function is defined even before its declaration, inside a block. + */ + @BrowserFeature(@WebBrowser(IE)) + JS_FUNCTION_DECLARED_FORWARD_IN_BLOCK, + + /** * Indicates that function can be defined as * <code>function object.property() {}</code> instead of <code>object.property = function() {}</code>. */ Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/HtmlUnitContextFactory.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/HtmlUnitContextFactory.java 2012-11-19 13:24:25 UTC (rev 7739) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/HtmlUnitContextFactory.java 2012-11-19 14:46:05 UTC (rev 7740) @@ -305,6 +305,8 @@ return browserVersion_.hasFeature(BrowserVersionFeatures.JS_CONSTRUCTOR); case Context.FEATURE_HTMLUNIT_FUNCTION_OBJECT_METHOD: return browserVersion_.hasFeature(BrowserVersionFeatures.JS_FUNCTION_OBJECT_METHOD); + case Context.FEATURE_HTMLUNIT_FUNCTION_DECLARED_FORWARD_IN_BLOCK: + return browserVersion_.hasFeature(BrowserVersionFeatures.JS_FUNCTION_DECLARED_FORWARD_IN_BLOCK); default: return super.hasFeature(cx, featureIndex); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java 2012-11-19 13:24:25 UTC (rev 7739) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/JavaScriptEngine2Test.java 2012-11-19 14:46:05 UTC (rev 7740) @@ -122,7 +122,6 @@ @Test @Alerts(IE = {"in goo", "in hoo", "in foo" }, FF = {"in goo", "in hoo", "foo error" }) - @NotYetImplemented(IE) public void functionDeclaredForwardInBlock() throws Exception { final String html = "<html><head></head><body>\n" + "<script>\n" |
From: <mgu...@us...> - 2012-11-20 07:27:10
|
Revision: 7741 http://sourceforge.net/p/htmlunit/code/7741 Author: mguillem Date: 2012-11-20 07:27:05 +0000 (Tue, 20 Nov 2012) Log Message: ----------- Change default network timeout from infinite wait to 90 seconds. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClientOptions.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-19 14:46:05 UTC (rev 7740) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-20 07:27:05 UTC (rev 7741) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="udpate" dev="mguillem"> + Change default network timeout from infinite wait to 90 seconds. + </action> <action type="fix" dev="asashour"> JavaScript: function name referenced before its declaration should be visible (IE). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2012-11-19 14:46:05 UTC (rev 7740) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2012-11-20 07:27:05 UTC (rev 7741) @@ -1730,11 +1730,8 @@ } /** - * <p>Sets the timeout of the {@link WebConnection}. Set to zero (the default) for an infinite wait.</p> + * <p>Sets the timeout of the {@link WebConnection}.</p> * - * <p>Note: The timeout is used twice. The first is for making the socket connection, the second is - * for data retrieval. If the time is critical you must allow for twice the time specified here.</p> - * * @param timeout the value of the timeout in milliseconds * @deprecated as of 2.11, please use {@link #getOptions()}.{@link WebClientOptions#setTimeout setTimeout()} * instead. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClientOptions.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClientOptions.java 2012-11-19 14:46:05 UTC (rev 7740) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClientOptions.java 2012-11-20 07:27:05 UTC (rev 7741) @@ -42,7 +42,7 @@ private boolean activeXNative_; private String homePage_ = "http://htmlunit.sf.net/"; private ProxyConfig proxyConfig_; - private int timeout_; + private int timeout_ = 90000; // like Firefox 16 default's value for network.http.connection-timeout private boolean useInsecureSSL_ = false; // default is secure SSL @@ -342,7 +342,7 @@ /** * Gets the timeout value for the {@link WebConnection}. - * + * The default timeout is 90 seconds (it was 0 up to HtmlUnit-2.11). * @return the timeout value in milliseconds * @see WebClientOptions#getTimeout(int) */ @@ -351,7 +351,7 @@ } /** - * <p>Sets the timeout of the {@link WebConnection}. Set to zero (the default) for an infinite wait.</p> + * <p>Sets the timeout of the {@link WebConnection}. Set to zero for an infinite wait.</p> * * <p>Note: The timeout is used twice. The first is for making the socket connection, the second is * for data retrieval. If the time is critical you must allow for twice the time specified here.</p> |
From: <asa...@us...> - 2012-11-20 10:46:27
|
Revision: 7743 http://sourceforge.net/p/htmlunit/code/7743 Author: asashour Date: 2012-11-20 10:46:23 +0000 (Tue, 20 Nov 2012) Log Message: ----------- Support Internationalized Domain Name (IDN). Issue 1459 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebRequestTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-20 09:51:49 UTC (rev 7742) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-20 10:46:23 UTC (rev 7743) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour" issue="1459"> + Support Internationalized Domain Name (IDN). + </action> <action type="udpate" dev="mguillem"> Change default network timeout from infinite wait to 90 seconds. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2012-11-20 09:51:49 UTC (rev 7742) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebRequest.java 2012-11-20 10:46:23 UTC (rev 7743) @@ -15,6 +15,7 @@ package com.gargoylesoftware.htmlunit; import java.io.Serializable; +import java.net.IDN; import java.net.URL; import java.util.Collections; import java.util.HashMap; @@ -118,6 +119,15 @@ final String query = (url.getQuery() != null) ? "?" + url.getQuery() : ""; url = buildUrlWithNewFile(url, removeDots(path) + query); } + final String idn = IDN.toASCII(url.getHost()); + if (!idn.equals(url.getHost())) { + try { + url = new URL(url.getProtocol(), idn, url.getPort(), url.getFile()); + } + catch (final Exception e) { + throw new RuntimeException("Cannot change hostname of URL: " + url.toExternalForm(), e); + } + } url_ = url.toExternalForm(); // http://john.smith:secret@localhost Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebRequestTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebRequestTest.java 2012-11-20 09:51:49 UTC (rev 7742) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/WebRequestTest.java 2012-11-20 10:46:23 UTC (rev 7743) @@ -163,4 +163,16 @@ final WebRequest request = new WebRequest(url); assertEquals("gzip, deflate", request.getAdditionalHeaders().get("Accept-Encoding")); } + + /** + * @throws Exception if the test fails + */ + @Test + public void idn() throws Exception { + final String internationalized = "\u0645\u0635\u0631"; + final URL url = new URL("http://" + internationalized + ".com/" + internationalized); + final WebRequest request = new WebRequest(url); + final URL expected = new URL("http://xn--wgbh1c.com/" + internationalized); + assertEquals(expected, request.getUrl()); + } } |
From: <mgu...@us...> - 2012-11-20 11:06:43
|
Revision: 7744 http://sourceforge.net/p/htmlunit/code/7744 Author: mguillem Date: 2012-11-20 11:06:39 +0000 (Tue, 20 Nov 2012) Log Message: ----------- Change default RefreshHander to a NiceRefreshHandler(2). Issue 1126 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-20 10:46:23 UTC (rev 7743) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-20 11:06:39 UTC (rev 7744) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="udpate" dev="mguillem" issue="1126"> + Change default RefreshHander to a NiceRefreshHandler(2). + </action> <action type="fix" dev="asashour" issue="1459"> Support Internationalized Domain Name (IDN). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2012-11-20 10:46:23 UTC (rev 7743) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2012-11-20 11:06:39 UTC (rev 7744) @@ -164,7 +164,7 @@ private ScriptPreProcessor scriptPreProcessor_; private Map<String, String> activeXObjectMap_ = Collections.emptyMap(); - private RefreshHandler refreshHandler_ = new ImmediateRefreshHandler(); + private RefreshHandler refreshHandler_ = new NiceRefreshHandler(2); private JavaScriptErrorListener javaScriptErrorListener_; private WebClientOptions options_ = new WebClientOptions(); @@ -1586,7 +1586,7 @@ */ public void setRefreshHandler(final RefreshHandler handler) { if (handler == null) { - refreshHandler_ = new ImmediateRefreshHandler(); + refreshHandler_ = new NiceRefreshHandler(2); } else { refreshHandler_ = handler; @@ -1594,8 +1594,9 @@ } /** - * Returns the current refresh handler or null if one has not been set. - * @return the current RefreshHandler or null + * Returns the current refresh handler. + * The default refresh handler is a {@link NiceRefreshHandler NiceRefreshHandler(2)} (since HtmlUnit-2.12). + * @return the current RefreshHandler */ public RefreshHandler getRefreshHandler() { return refreshHandler_; |
From: <asa...@us...> - 2012-11-20 18:19:24
|
Revision: 7748 http://sourceforge.net/p/htmlunit/code/7748 Author: asashour Date: 2012-11-20 18:18:57 +0000 (Tue, 20 Nov 2012) Log Message: ----------- JavaScript: element.outerHTML should not print end tag if it is forbidden. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAreaElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBRElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseFontElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLFrameElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLHRElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLImageElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLInputElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIsIndexElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLinkElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLMetaElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLParamElement.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLTableColElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBRElementTest.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 2012-11-20 13:24:52 UTC (rev 7747) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-20 18:18:57 UTC (rev 7748) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour"> + JavaScript: element.outerHTML should not print end tag if it is forbidden. + </action> <action type="udpate" dev="mguillem" issue="1126"> Change default RefreshHander to a NiceRefreshHandler(2). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAreaElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAreaElement.java 2012-11-20 13:24:52 UTC (rev 7747) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAreaElement.java 2012-11-20 18:18:57 UTC (rev 7748) @@ -91,4 +91,11 @@ super.setAccessKey(accessKey); } + /** + * {@inheritDoc} + */ + @Override + protected boolean isEndTagForbidden() { + return true; + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBRElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBRElement.java 2012-11-20 13:24:52 UTC (rev 7747) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBRElement.java 2012-11-20 18:18:57 UTC (rev 7748) @@ -70,4 +70,11 @@ getDomNodeOrDie().setAttribute("clear", clear); } + /** + * {@inheritDoc} + */ + @Override + protected boolean isEndTagForbidden() { + return true; + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseElement.java 2012-11-20 13:24:52 UTC (rev 7747) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseElement.java 2012-11-20 18:18:57 UTC (rev 7748) @@ -71,4 +71,11 @@ getDomNodeOrDie().setAttribute("target", target); } + /** + * {@inheritDoc} + */ + @Override + protected boolean isEndTagForbidden() { + return true; + } } 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 2012-11-20 13:24:52 UTC (rev 7747) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLBaseFontElement.java 2012-11-20 18:18:57 UTC (rev 7748) @@ -90,4 +90,12 @@ public void setSize(final int size) { getDomNodeOrDie().setAttribute("size", Context.toString(Integer.valueOf(size))); } + + /** + * {@inheritDoc} + */ + @Override + protected boolean isEndTagForbidden() { + return true; + } } 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 2012-11-20 13:24:52 UTC (rev 7747) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2012-11-20 18:18:57 UTC (rev 7748) @@ -933,8 +933,9 @@ buffer.append(">"); // Add the children. printChildren(buffer, node, html); - // Close the tag. IE does it i |
From: <asa...@us...> - 2012-11-21 10:25:38
|
Revision: 7751 http://sourceforge.net/p/htmlunit/code/7751 Author: asashour Date: 2012-11-21 10:25:36 +0000 (Wed, 21 Nov 2012) Log Message: ----------- JavaScript: element.outerHTML should throw an error if the provided value closes the parent. Issue 1452 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 2012-11-21 07:47:01 UTC (rev 7750) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-21 10:25:36 UTC (rev 7751) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour" issue="1452"> + JavaScript: element.outerHTML should throw an error if the provided value closes the parent. + </action> <action type="fix" dev="asashour"> JavaScript: element.outerHTML should not print end tag if it is forbidden. </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 2012-11-21 07:47:01 UTC (rev 7750) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2012-11-21 10:25:36 UTC (rev 7751) @@ -66,6 +66,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.cyberneko.html.HTMLElements; import org.w3c.css.sac.CSSException; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; @@ -1033,8 +1034,26 @@ throw Context.reportRuntimeError("outerHTML is read-only for tag " + domNode.getNodeName()); } - final DomNode proxyNode = new ProxyDomNode(domNode.getPage(), domNode, false); - parseHtmlSnippet(proxyNode, false, value); + final DomDocumentFragment fragment = (DomDocumentFragment) domNode.getPage().createDocumentFragment(); + parseHtmlSnippet(fragment, false, value); + DomNode child = fragment.getFirstChild(); + if (child instanceof DomElement) { + final String parentName = domNode.getParentNode().getNodeName().toUpperCase(); + final short[] closes = HTMLElements.getElement(child.getNodeName()).closes; + if (closes != null) { + for (final short close : closes) { + if (HTMLElements.getElement(close).name.equals(parentName)) { + throw Context.reportRuntimeError("outerHTML can not set '" + value + + "' while its parent is " + domNode.getParentNode()); + } + } + } + } + + while (child != null) { + domNode.insertBefore(child); + child = fragment.getFirstChild(); + } domNode.remove(); } 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 2012-11-21 07:47:01 UTC (rev 7750) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2012-11-21 10:25:36 UTC (rev 7751) @@ -915,7 +915,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(IE) public void setOuterHTMLAddBlockToParagraph() throws Exception { final String html = createPageForSetOuterHTML("p", "<div>test</div>"); loadPageWithAlerts2(html); @@ -932,7 +931,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(IE) public void setOuterHTMLAddParagraphToParagraph() throws Exception { final String html = createPageForSetOuterHTML("p", "<p>test</p>"); loadPageWithAlerts2(html); @@ -964,7 +962,6 @@ "New = <span id=\"innerNode\">Old outerHTML</span>" }, FF = { "Old = <span id=\"innerNode\">Old outerHTML</span>", "New = <span id=\"innerNode\">Old outerHTML</span>" }) - @NotYetImplemented(IE) public void setOuterHTMLAddAnchorToAnchor() throws Exception { final String html = createPageForSetOuterHTML("a", "<a>test</a>"); loadPageWithAlerts2(html); |
From: <asa...@us...> - 2012-11-23 07:17:20
|
Revision: 7756 http://sourceforge.net/p/htmlunit/code/7756 Author: asashour Date: 2012-11-23 07:17:17 +0000 (Fri, 23 Nov 2012) Log Message: ----------- Properly handle spaces after "em" element. Issue 1463 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HTMLParser2Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-22 19:18:55 UTC (rev 7755) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-23 07:17:17 UTC (rev 7756) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour" issue="1463"> + Properly handle spaces after "em" element. + </action> <action type="fix" dev="asashour" issue="1452"> JavaScript: element.outerHTML should throw an error if the provided value closes the parent. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java 2012-11-22 19:18:55 UTC (rev 7755) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java 2012-11-23 07:17:17 UTC (rev 7756) @@ -660,7 +660,8 @@ if (node.getFirstChild() != null && (node instanceof HtmlAnchor || node instanceof HtmlSpan || node instanceof HtmlFont || node instanceof HtmlStrong || node instanceof HtmlBold - || node instanceof HtmlItalic || node instanceof HtmlUnderlined)) { + || node instanceof HtmlItalic || node instanceof HtmlUnderlined + || node instanceof HtmlEmphasis)) { return false; } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HTMLParser2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HTMLParser2Test.java 2012-11-22 19:18:55 UTC (rev 7755) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HTMLParser2Test.java 2012-11-23 07:17:17 UTC (rev 7756) @@ -441,4 +441,28 @@ loadPageWithAlerts2(html); } + /** + * @throws Exception on test failure + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_em() throws Exception { + final String html = "<html><head><title>test_getChildNodes</title>\n" + + "<script>\n" + + "function test() {\n" + + " for (var i = 1; i <= 6; i++) {\n" + + " alert(document.getElementById('p' + i).childNodes.length);\n" + + " }\n" + + "}\n" + + "</script>\n" + + "</head><body onload='test()'>\n" + + "<p id='p1'> <em></em> </p>\n" + + "<p id='p2'><em></em> </p>\n" + + "<p id='p3'> <em></em></p>\n" + + "<p id='p4'> <em>something</em> </p>\n" + + "<p id='p5'><em>something</em> </p>\n" + + "<p id='p6'> <em>something</em></p>\n" + + "</body></html>"; + loadPageWithAlerts2(html); + } } |
From: <mgu...@us...> - 2012-11-23 10:15:04
|
Revision: 7757 http://sourceforge.net/p/htmlunit/code/7757 Author: mguillem Date: 2012-11-23 10:14:58 +0000 (Fri, 23 Nov 2012) Log Message: ----------- - Cookies: use 1970 as two digits year start for the expiration date. - Cookies: accept more non standard date formats for the expiration date. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/CookieManagerTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-23 07:17:17 UTC (rev 7756) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-23 10:14:58 UTC (rev 7757) @@ -8,6 +8,12 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="mguillem"> + Cookies: use 1970 as two digits year start for the expiration date. + </action> + <action type="fix" dev="mguillem"> + Cookies: accept more non standard date formats for the expiration date. + </action> <action type="fix" dev="asashour" issue="1463"> Properly handle spaces after "em" element. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2012-11-23 07:17:17 UTC (rev 7756) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/HttpWebConnection.java 2012-11-23 10:14:58 UTC (rev 7757) @@ -29,14 +29,13 @@ import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.Charset; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.Random; @@ -97,6 +96,8 @@ import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.impl.cookie.BasicPathHandler; import org.apache.http.impl.cookie.BrowserCompatSpec; +import org.apache.http.impl.cookie.DateParseException; +import org.apache.http.impl.cookie.DateUtils; import org.apache.http.message.BasicHeader; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.CoreConnectionPNames; @@ -734,9 +735,27 @@ */ private static final Comparator<Cookie> COOKIE_COMPARATOR = new CookiePathComparator(); - private static final SimpleDateFormat INCORRECT_FORMAT - = new SimpleDateFormat("EEE,dd MMM yyyy HH:mm:ss z", Locale.US); + private static final Date DATE_1_1_1970; + static { + final Calendar calendar = Calendar.getInstance(); + calendar.setTimeZone(DateUtils.GMT); + calendar.set(1970, Calendar.JANUARY, 1, 0, 0, 0); + calendar.set(Calendar.MILLISECOND, 0); + DATE_1_1_1970 = calendar.getTime(); + } + + // simplified patterns from BrowserCompatSpec, with yy patterns before similar yyyy patterns + private static final String[] DEFAULT_DATE_PATTERNS = new String[] { + "EEE dd MMM yy HH mm ss zzz", + "EEE dd MMM yyyy HH mm ss zzz", + "EEE MMM d HH mm ss yyyy", + "EEE dd MMM yy HH mm ss z ", + "EEE dd MMM yyyy HH mm ss z ", + "EEE dd MM yy HH mm ss z ", + "EEE dd MM yyyy HH mm ss z ", + }; + HtmlUnitBrowserCompatCookieSpec(final IncorrectnessListener incorrectnessListener) { super(); final BasicPathHandler pathHandler = new BasicPathHandler() { @@ -749,6 +768,7 @@ final CookieAttributeHandler originalExpiresHandler = getAttribHandler(ClientCookie.EXPIRES_ATTR); final CookieAttributeHandler wrapperExpiresHandler = new CookieAttributeHandler() { + public void validate(final Cookie cookie, final CookieOrigin origin) throws MalformedCookieException { originalExpiresHandler.validate(cookie, origin); } @@ -757,22 +777,11 @@ if (value.startsWith("\"") && value.endsWith("\"")) { value = value.substring(1, value.length() - 1); } - final int length = value.length(); - if (value.endsWith("GMT") && length > 16 && !Character.isDigit(value.charAt(length - 16))) { - //add "19" prefix to the year - value = value.substring(0, length - 15) + "19" + value.substring(length - 15); - try { - INCORRECT_FORMAT.parse(value); - value = value.substring(0, 4) + ' ' + value.substring(4); - } - catch (final Exception e) { - //this is ok - } - } + value = value.replaceAll("[ ,:-]+", " "); try { - originalExpiresHandler.parse(cookie, value); + cookie.setExpiryDate(DateUtils.parseDate(value, DEFAULT_DATE_PATTERNS, DATE_1_1_1970)); } - catch (final MalformedCookieException e) { + catch (final DateParseException e) { incorrectnessListener.notify("Incorrect cookie expiration time: " + value, this); } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/CookieManagerTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/CookieManagerTest.java 2012-11-23 07:17:17 UTC (rev 7756) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/CookieManagerTest.java 2012-11-23 10:14:58 UTC (rev 7757) @@ -281,9 +281,63 @@ } /** + * Two digits years should be interpreted as 20xx if before 1970 and as 19xx otherwise. * @throws Exception if the test fails */ @Test + @Alerts("cookie1=1; cookie2=2; cookie3=3") + public void setCookieExpires_twoDigits() throws Exception { + final List<NameValuePair> responseHeader1 = new ArrayList<NameValuePair>(); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie1=1;expires=Sun 01-Dec-68 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie2=2;expires=Thu 01-Dec-69 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie3=3;expires=Mon 31-Dec-69 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie4=4;expires=Thu 01-Jan-70 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie5=5;expires=Tue 01-Dec-70 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie6=6;expires=Wed 01-Dec-71 16:00:00 GMT")); + getMockWebConnection().setResponse(getDefaultUrl(), HTML_ALERT_COOKIE, 200, "OK", "text/html", responseHeader1); + + loadPageWithAlerts2(getDefaultUrl()); + } + + /** + * Two digits years should be interpreted as 20xx if before 1970 and as 19xx otherwise. + * @throws Exception if the test fails + */ + @Test + @Alerts("cookie1=1; cookie2=2; cookie3=3") + public void setCookieExpires_twoDigits2() throws Exception { + final List<NameValuePair> responseHeader1 = new ArrayList<NameValuePair>(); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie1=1;expires=Sun,01 Dec 68 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie2=2;expires=Thu,01 Dec 69 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie3=3;expires=Mon,31 Dec 69 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie4=4;expires=Thu,01 Jan 70 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie5=5;expires=Tue,01 Dec 70 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie6=6;expires=Wed,01 Dec 71 16:00:00 GMT")); + getMockWebConnection().setResponse(getDefaultUrl(), HTML_ALERT_COOKIE, 200, "OK", "text/html", responseHeader1); + + loadPageWithAlerts2(getDefaultUrl()); + } + + /** + * Two digits years should be interpreted as 20xx if before 1970 and as 19xx otherwise, + * even with a quite strange date format. + * @throws Exception if the test fails + */ + @Test + @Alerts("cookie1=1") + public void setCookieExpires_badDateFormat() throws Exception { + final List<NameValuePair> responseHeader1 = new ArrayList<NameValuePair>(); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie1=1;expires=Sun-01 Dec 68 16:00:00 GMT")); + responseHeader1.add(new NameValuePair("Set-Cookie", "cookie6=6;expires=Wed-01 Dec 71 16:00:00 GMT")); + getMockWebConnection().setResponse(getDefaultUrl(), HTML_ALERT_COOKIE, 200, "OK", "text/html", responseHeader1); + + loadPageWithAlerts2(getDefaultUrl()); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts public void setCookieExpired_badDateFormat2() throws Exception { final List<NameValuePair> responseHeader1 = new ArrayList<NameValuePair>(); |
From: <asa...@us...> - 2012-11-23 19:32:02
|
Revision: 7759 http://sourceforge.net/p/htmlunit/code/7759 Author: asashour Date: 2012-11-23 19:31:58 +0000 (Fri, 23 Nov 2012) Log Message: ----------- Properly handle spaces after elements: "abbr", "acronym", "basefont", "bdo", "big", "blink", "cite", "code", "del", "dfn", "em", "ins", "kbd", "label", "map", "nobr", "q", "s", "samp", "small", "strike", "sub", "sup", "tt" and "var". Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HTMLParser2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPageTest.java Added Paths: ----------- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/source/TestSource.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-23 10:19:25 UTC (rev 7758) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-23 19:31:58 UTC (rev 7759) @@ -15,7 +15,9 @@ Cookies: accept more non standard date formats for the expiration date. </action> <action type="fix" dev="asashour" issue="1463"> - Properly handle spaces after "em" element. + Properly handle spaces after elements: "abbr", "acronym", "basefont", "bdo", "big", "blink", "cite", + "code", "del", "dfn", "em", "ins", "kbd", "label", "map", "nobr", "q", "s", "samp", "small", "strike", + "sub", "sup", "tt" and "var". </action> <action type="fix" dev="asashour" issue="1452"> JavaScript: element.outerHTML should throw an error if the provided value closes the parent. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java 2012-11-23 10:19:25 UTC (rev 7758) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HTMLParser.java 2012-11-23 19:31:58 UTC (rev 7759) @@ -658,10 +658,24 @@ return false; } if (node.getFirstChild() != null - && (node instanceof HtmlAnchor || node instanceof HtmlSpan || node instanceof HtmlFont + && (node instanceof HtmlAnchor || node instanceof HtmlSpan + || node instanceof HtmlFont || node instanceof HtmlStrong || node instanceof HtmlBold || node instanceof HtmlItalic || node instanceof HtmlUnderlined - || node instanceof HtmlEmphasis)) { + || node instanceof HtmlEmphasis + || node instanceof HtmlAbbreviated || node instanceof HtmlAcronym + || node instanceof HtmlBaseFont || node instanceof HtmlBidirectionalOverride + || node instanceof HtmlBig || node instanceof HtmlBlink + || node instanceof HtmlCitation || node instanceof HtmlCode + || node instanceof HtmlDeletedText || node instanceof HtmlDefinition + || node instanceof HtmlInsertedText || node instanceof HtmlKeyboard + || node instanceof HtmlLabel || node instanceof HtmlMap + || node instanceof HtmlNoBreak || node instanceof HtmlInlineQuotation + || node instanceof HtmlS || node instanceof HtmlSample + || node instanceof HtmlSmall || node instanceof HtmlStrike + || node instanceof HtmlSubscript || node instanceof HtmlSuperscript + || node instanceof HtmlTeletype || node instanceof HtmlVariable + )) { return false; } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HTMLParser2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HTMLParser2Test.java 2012-11-23 10:19:25 UTC (rev 7758) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HTMLParser2Test.java 2012-11-23 19:31:58 UTC (rev 7759) @@ -14,6 +14,9 @@ */ package com.gargoylesoftware.htmlunit.html; +import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.FF; +import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.IE; + import org.junit.Test; import org.junit.runner.RunWith; @@ -226,7 +229,7 @@ @Test @Alerts(IE = { "2", "1", "2", "1", "1", "1", "2", "2", "1", "1", "1", "1" }, FF = { "2", "2", "3", "3", "2", "2", "3", "2", "2", "3", "2", "2" }) - public void childNodes_p() throws Exception { + public void childNodes_p_parent() throws Exception { final String html = "<html><head><title>test_getChildNodes</title>\n" + "<script>\n" + "function test() {\n" @@ -286,183 +289,1041 @@ loadPageWithAlerts2(html); } + private String createHtmlForChildNodes(final String tagName) { + return "<html><head><title>test_getChildNodes</title>\n" + + "<script>\n" + + "function test() {\n" + + " for (var i = 1; i <= 6; i++) {\n" + + " alert(document.getElementById('p' + i).childNodes.length);\n" + + " }\n" + + "}\n" + + "</script>\n" + + "</head><body onload='test()'>\n" + + "<p id='p1'> <" + tagName + "></" + tagName + "> </p>\n" + + "<p id='p2'><" + tagName + "></" + tagName + "> </p>\n" + + "<p id='p3'> <" + tagName + "></" + tagName + "></p>\n" + + "<p id='p4'> <" + tagName + ">something</" + tagName + "> </p>\n" + + "<p id='p5'><" + tagName + ">something</" + tagName + "> </p>\n" + + "<p id='p6'> <" + tagName + ">something</" + tagName + "></p>\n" + + "</body></html>"; + } + /** - * @throws Exception on test failure + * @throws Exception if the test fails */ @Test @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) - public void childNodes_span() throws Exception { - final String html = "<html><head><title>test_getChildNodes</title>\n" - + "<script>\n" - + "function test() {\n" - + " for (var i = 1; i <= 6; i++) {\n" - + " alert(document.getElementById('p' + i).childNodes.length);\n" - + " }\n" - + "}\n" - + "</script>\n" - + "</head><body onload='test()'>\n" - + "<p id='p1'> <span></span> </p>\n" - + "<p id='p2'><span></span> </p>\n" - + "<p id='p3'> <span></span></p>\n" - + "<p id='p4'> <span>something</span> </p>\n" - + "<p id='p5'><span>something</span> </p>\n" - + "<p id='p6'> <span>something</span></p>\n" - + "</body></html>"; + public void childNodes_abbr() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("abbr")); + } - loadPageWithAlerts2(html); + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_acronym() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("acronym")); } /** - * @throws Exception on test failure + * @throws Exception if the test fails */ @Test @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) - public void childNodes_strong() throws Exception { - final String html = "<html><head><title>test_getChildNodes</title>\n" - + "<script>\n" - + "function test() {\n" - + " for (var i = 1; i <= 6; i++) {\n" - + " alert(document.getElementById('p' + i).childNodes.length);\n" - + " }\n" - + "}\n" - + "</script>\n" - + "</head><body onload='test()'>\n" - + "<p id='p1'> <strong></strong> </p>\n" - + "<p id='p2'><strong></strong> </p>\n" - + "<p id='p3'> <strong></strong></p>\n" - + "<p id='p4'> <strong>something</strong> </p>\n" - + "<p id='p5'><strong>something</strong> </p>\n" - + "<p id='p6'> <strong>something</strong></p>\n" - + "</body></html>"; + public void childNodes_a() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("a")); + } - loadPageWithAlerts2(html); + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_address() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("address")); } /** - * @throws Exception on test failure + * @throws Exception if the test fails */ @Test + @Alerts(IE = { "2", "2", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_applet() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("applet")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented + public void childNodes_area() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("area")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_audio() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("audio")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented(IE) + public void childNodes_bgsound() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("bgsound")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "2" }, FF = { "3", "2", "2", "3", "2", "3" }) + public void childNodes_base() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("base")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented(FF) + public void childNodes_basefont() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("basefont")); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) - public void childNodes_i() throws Exception { - final String html = "<html><head><title>test_getChildNodes</title>\n" - + "<script>\n" - + "function test() {\n" - + " for (var i = 1; i <= 6; i++) {\n" - + " alert(document.getElementById('p' + i).childNodes.length);\n" - + " }\n" - + "}\n" - + "</script>\n" - + "</head><body onload='test()'>\n" - + "<p id='p1'> <i></i> </p>\n" - + "<p id='p2'><i></i> </p>\n" - + "<p id='p3'> <i></i></p>\n" - + "<p id='p4'> <i>something</i> </p>\n" - + "<p id='p5'><i>something</i> </p>\n" - + "<p id='p6'> <i>something</i></p>\n" - + "</body></html>"; + public void childNodes_bdo() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("bdo")); + } - loadPageWithAlerts2(html); + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_big() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("big")); } /** - * @throws Exception on test failure + * @throws Exception if the test fails */ @Test @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_blink() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("blink")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_blockquote() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("blockquote")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "1", "1", "1" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(FF) + public void childNodes_body() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("body")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) public void childNodes_b() throws Exception { - final String html = "<html><head><title>test_getChildNodes</title>\n" - + "<script>\n" - + "function test() {\n" - + " for (var i = 1; i <= 6; i++) {\n" - + " alert(document.getElementById('p' + i).childNodes.length);\n" - + " }\n" - + "}\n" - + "</script>\n" - + "</head><body onload='test()'>\n" - + "<p id='p1'> <b></b> </p>\n" - + "<p id='p2'><b></b> </p>\n" - + "<p id='p3'> <b></b></p>\n" - + "<p id='p4'> <b>something</b> </p>\n" - + "<p id='p5'><b>something</b> </p>\n" - + "<p id='p6'> <b>something</b></p>\n" - + "</body></html>"; + loadPageWithAlerts2(createHtmlForChildNodes("b")); + } - loadPageWithAlerts2(html); + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "3", "3", "3" }, FF = { "4", "3", "3", "5", "4", "4" }) + @NotYetImplemented + public void childNodes_br() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("br")); } /** - * @throws Exception on test failure + * @throws Exception if the test fails */ @Test + @Alerts(IE = { "2", "2", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_button() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("button")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_canvas() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("canvas")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_caption() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("caption")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_center() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("center")); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) - public void childNodes_u() throws Exception { - final String html = "<html><head><title>test_getChildNodes</title>\n" - + "<script>\n" - + "function test() {\n" - + " for (var i = 1; i <= 6; i++) {\n" - + " alert(document.getElementById('p' + i).childNodes.length);\n" - + " }\n" - + "}\n" - + "</script>\n" - + "</head><body onload='test()'>\n" - + "<p id='p1'> <u></u> </p>\n" - + "<p id='p2'><u></u> </p>\n" - + "<p id='p3'> <u></u></p>\n" - + "<p id='p4'> <u>something</u> </p>\n" - + "<p id='p5'><u>something</u> </p>\n" - + "<p id='p6'> <u>something</u></p>\n" - + "</body></html>"; + public void childNodes_cite() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("cite")); + } - loadPageWithAlerts2(html); + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_code() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("code")); } /** - * @throws Exception on test failure + * @throws Exception if the test fails */ @Test @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) - public void childNodes_font() throws Exception { - final String html = "<html><head><title>test_getChildNodes</title>\n" - + "<script>\n" - + "function test() {\n" - + " for (var i = 1; i <= 6; i++) {\n" - + " alert(document.getElementById('p' + i).childNodes.length);\n" - + " }\n" - + "}\n" - + "</script>\n" - + "</head><body onload='test()'>\n" - + "<p id='p1'> <font></font> </p>\n" - + "<p id='p2'><font></font> </p>\n" - + "<p id='p3'> <font></font></p>\n" - + "<p id='p4'> <font>something</font> </p>\n" - + "<p id='p5'><font>something</font> </p>\n" - + "<p id='p6'> <font>something</font></p>\n" - + "</body></html>"; - loadPageWithAlerts2(html); + public void childNodes_dfn() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("dfn")); } /** - * @throws Exception on test failure + * @throws Exception if the test fails */ @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_dd() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("dd")); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_del() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("del")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_dir() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("dir")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_div() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("div")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_dl() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("dl")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_dt() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("dt")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "3", "3", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented + public void childNodes_embed() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("embed")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) public void childNodes_em() throws Exception { - final String html = "<html><head><title>test_getChildNodes</title>\n" - + "<script>\n" - + "function test() {\n" - + " for (var i = 1; i <= 6; i++) {\n" - + " alert(document.getElementById('p' + i).childNodes.length);\n" - + " }\n" - + "}\n" - + "</script>\n" - + "</head><body onload='test()'>\n" - + "<p id='p1'> <em></em> </p>\n" - + "<p id='p2'><em></em> </p>\n" - + "<p id='p3'> <em></em></p>\n" - + "<p id='p4'> <em>something</em> </p>\n" - + "<p id='p5'><em>something</em> </p>\n" - + "<p id='p6'> <em>something</em></p>\n" - + "</body></html>"; - loadPageWithAlerts2(html); + loadPageWithAlerts2(createHtmlForChildNodes("em")); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_fieldset() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("fieldset")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_font() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("font")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented(IE) + public void childNodes_form() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("form")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented + public void childNodes_frame() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("frame")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "1", "1", "3", "3", "2" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented + public void childNodes_frameset() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("frameset")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_h1() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("h1")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_h2() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("h2")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_h3() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("h3")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_h4() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("h4")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_h5() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("h5")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_h6() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("h6")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "1", "1", "1" }, FF = { "1", "1", "1", "1", "1", "1" }) + public void childNodes_head() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("head")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_hr() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("hr")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "1", "1", "1" }, FF = { "1", "1", "1", "1", "1", "1" }) + public void childNodes_html() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("html")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_iframe() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("iframe")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_q() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("q")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "3", "3", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented(IE) + public void childNodes_img() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("img")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_ins() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("ins")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(FF) + public void childNodes_isindex() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("isindex")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_i() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("i")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_kbd() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("kbd")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_label() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("label")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented + public void childNodes_legend() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("legend")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_listing() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("listing")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_li() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("li")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented(IE) + public void childNodes_link() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("link")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_map() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("map")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_marquee() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("marquee")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_menu() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("menu")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented(IE) + public void childNodes_meta() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("meta")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_multicol() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("multicol")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_nobr() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("nobr")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_noembed() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("noembed")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_noframes() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("noframes")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_noscript() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("noscript")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_object() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("object")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_ol() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("ol")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented + public void childNodes_optgroup() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("optgroup")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented + public void childNodes_option() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("option")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + public void childNodes_p() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("p")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented + public void childNodes_param() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("param")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0" }, FF = { "1" }) + @NotYetImplemented + public void childNodes_plaintext() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("plaintext")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_pre() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("pre")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_progress() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("progress")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_s() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("s")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_samp() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("samp")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented + public void childNodes_script() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("script")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_select() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("select")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_small() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("small")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented + public void childNodes_source() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("source")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented + public void childNodes_spacer() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("spacer")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_span() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("span")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_strike() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("strike")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_strong() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("strong")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_style() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("style")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_sub() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("sub")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_sup() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("sup")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "1", "1", "1" }, FF = { "3", "2", "2", "3", "3", "2" }) + @NotYetImplemented(FF) + public void childNodes_table() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("table")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_col() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("col")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_colgroup() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("colgroup")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_tbody() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("tbody")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_td() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("td")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_th() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("th")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_tr() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("tr")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_textarea() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("textarea")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_tfoot() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("tfoot")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "1", "1", "1", "1", "1", "1" }) + @NotYetImplemented(IE) + public void childNodes_thead() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("thead")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_tt() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("tt")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(FF) + public void childNodes_title() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("title")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_u() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("u")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_ul() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("ul")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "1", "1", "1", "2", "2", "1" }, FF = { "3", "2", "2", "3", "2", "2" }) + public void childNodes_var() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("var")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "2" }) + @NotYetImplemented(IE) + public void childNodes_video() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("video")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "2", "2", "2", "4", "4", "3" }, FF = { "3", "2", "2", "3", "2", "3" }) + @NotYetImplemented(IE) + public void childNodes_wbr() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("wbr")); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(IE = { "0", "0", "0", "0", "0", "0" }, FF = { "1", "0", "1", "1", "0", "1" }) + @NotYetImplemented + public void childNodes_xmp() throws Exception { + loadPageWithAlerts2(createHtmlForChildNodes("xmp")); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPageTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPageTest.java 2012-11-23 10:19:25 UTC (rev 7758) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/HtmlPageTest.java 2012-11-23 19:31:58 UTC (rev 7759) @@ -80,6 +80,9 @@ public static final String STANDARDS_MODE_PREFIX_ = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n"; + /** List of all HTML tags.*/ + public static final List<String> HTML_TAGS_ = DefaultElementFactory.SUPPORTED_TAGS_; + /** * @throws Exception if the test fails */ Added: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/source/TestSource.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/source/TestSource.java (rev 0) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/source/TestSource.java 2012-11-23 19:31:58 UTC (rev 7759) @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2002-2012 Gargoyle Software Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gargoylesoftware.htmlunit.source; + +import com.gargoylesoftware.htmlunit.html.HtmlPageTest; + +/** + * Use to generate test cases. + * + * @version $Revision$ + * @author Ahmed Ashour + */ +public final class TestSource { + + private TestSource() { } + + /** + * Generate test case for each one HTML elements. + * @param testNamePrefix the prefix of the test name + * @param htmlGeneratorMethod the method name which is called to generate the HTML, it expects a tag name parameter + * @param defaultAlerts default string inside the parenthesis of <tt>@Alerts()</tt>, can be null + */ + public static void generateTestForHtmlElements(final String testNamePrefix, final String htmlGeneratorMethod, + final String defaultAlerts) { + for (final String tag : HtmlPageTest.HTML_TAGS_) { + System.out.println(); + System.out.println(" /**"); + System.out.println(" * @throws Exception if the test fails"); + System.out.println(" */"); + System.out.println(" @Test"); + System.out.print(" @Alerts("); + if (defaultAlerts != null) { + System.out.print(defaultAlerts); + } + System.out.println(")"); + System.out.println(" public void " + testNamePrefix + '_' + tag + "() throws Exception {"); + System.out.println(" loadPageWithAlerts2(" + htmlGeneratorMethod + "(\"" + tag + "\"));"); + System.out.println(" }"); + } + } +} Property changes on: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/source/TestSource.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native |
From: <asa...@us...> - 2012-11-24 07:20:29
|
Revision: 7760 http://sourceforge.net/p/htmlunit/code/7760 Author: asashour Date: 2012-11-24 07:20:25 +0000 (Sat, 24 Nov 2012) Log Message: ----------- JavaScript: prevent infinite loop during adding a DomNode to a descendant. Issue 1253 Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2012-11-23 19:31:58 UTC (rev 7759) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2012-11-24 07:20:25 UTC (rev 7760) @@ -884,6 +884,9 @@ return this; } final DomNode domNode = (DomNode) node; + if (domNode.isDescendant(this)) { + Context.throwAsScriptRuntimeEx(new Exception("Can not add (grand)parent to itself " + this)); + } if (domNode instanceof DomDocumentFragment) { final DomDocumentFragment fragment = (DomDocumentFragment) domNode; @@ -1623,4 +1626,19 @@ protected boolean hasFeature(final BrowserVersionFeatures feature) { return getPage().getWebClient().getBrowserVersion().hasFeature(feature); } + + /** + * Checks whether the specified node is descendant of this node or not. + * @param node the node to check if it is descendant or not + * @return whether the specified node is descendant of this node or not + */ + protected boolean isDescendant(final DomNode node) { + for (DomNode parent = node; parent != null; parent = parent.getParentNode()) { + if (parent == this) { + return true; + } + } + return false; + } + } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2012-11-23 19:31:58 UTC (rev 7759) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlPage.java 2012-11-24 07:20:25 UTC (rev 7760) @@ -1760,18 +1760,6 @@ } } - /** - * Checks whether the specified element is descendant of this HtmlPage or not. - */ - private boolean isDescendant(final DomElement element) { - for (DomNode parent = element; parent != null; parent = parent.getParentNode()) { - if (parent == this) { - return true; - } - } - return false; - } - private void addElement(final Map<String, List<DomElement>> map, final DomElement element, final String attribute, final boolean recurse) { final String value = element.getAttribute(attribute); Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeTest.java 2012-11-23 19:31:58 UTC (rev 7759) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeTest.java 2012-11-24 07:20:25 UTC (rev 7760) @@ -788,4 +788,31 @@ loadPageWithAlerts(html); } + /** + * Test for Bug #1253. + * + * @throws Exception on test failure + */ + @Test + @Alerts({ "true", "exception", "1", "0" }) + public void appendChild_recursive_parent() throws Exception { + final String html = "<html><head><title>foo</title>\n" + + "<script>\n" + + "function test(){\n" + + " var e1 = document.createElement('div');\n" + + " var e2 = document.createElement('div');\n" + + " try {\n" + + " alert(e1.appendChild(e2) === e2);\n" + + " alert(e2.appendChild(e1) === e1);\n" + + " } catch(e) {alert('exception');}\n" + + " alert(e1.childNodes.length);" + + " alert(e2.childNodes.length);" + + "}\n" + + "</script>\n" + + "</head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts(html); + } + } |
From: <asa...@us...> - 2012-11-25 10:54:43
|
Revision: 7766 http://sourceforge.net/p/htmlunit/code/7766 Author: asashour Date: 2012-11-25 10:54:39 +0000 (Sun, 25 Nov 2012) Log Message: ----------- JavaScript: element.set/getAttribute() should fix the name (e.g. "className") only in Quirks mode (IE). 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/Element.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 trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/JQuery182Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-25 09:56:52 UTC (rev 7765) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-25 10:54:39 UTC (rev 7766) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour"> + JavaScript: element.set/getAttribute() should fix the name (e.g. "className") only in Quirks mode (IE). + </action> <action type="fix" dev="mguillem"> Cookies: use 1970 as two digits year start for the expiration date. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-25 09:56:52 UTC (rev 7765) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-25 10:54:39 UTC (rev 7766) @@ -450,10 +450,6 @@ /** Was originally .isIE(). */ @BrowserFeature(@WebBrowser(IE)) - GENERATED_66, - - /** Was originally .isIE(). */ - @BrowserFeature(@WebBrowser(IE)) GENERATED_69, /** Was originally .isIE(). */ @@ -583,6 +579,13 @@ @BrowserFeature({ @WebBrowser(FF), @WebBrowser(CHROME) }) HTMLELEMENT_ALIGN_INVALID, + /** + * Indicates that attribute name should be fixed for get/setAttribute(), specifically "className" and "class", + * only in quirks mode. + */ + @BrowserFeature(@WebBrowser(IE)) + HTMLELEMENT_ATTRIBUTE_FIX_IN_QUIRKS_MODE, + /** */ HTMLELEMENT_TRIM_CLASS_ATTRIBUTE, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java 2012-11-25 09:56:52 UTC (rev 7765) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java 2012-11-25 10:54:39 UTC (rev 7766) @@ -138,8 +138,8 @@ */ @JsxFunction public Object getAttribute(String attributeName, final Integer flags) { + attributeName = fixAttributeName(attributeName); final boolean supportsFlags = getBrowserVersion().hasFeature(JS_GET_ATTRIBUTE_SUPPORTS_FLAGS); - attributeName = fixAttributeName(attributeName); Object value; if (supportsFlags && flags != null && flags == 2 && "style".equalsIgnoreCase(attributeName)) { 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 2012-11-25 09:56:52 UTC (rev 7765) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2012-11-25 10:54:39 UTC (rev 7766) @@ -16,7 +16,7 @@ import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_167; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_65; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_66; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.HTMLELEMENT_ATTRIBUTE_FIX_IN_QUIRKS_MODE; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_69; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_70; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_71; @@ -564,7 +564,8 @@ */ @Override protected String fixAttributeName(final String attributeName) { - if (getBrowserVersion().hasFeature(GENERATED_66)) { + if (getBrowserVersion().hasFeature(HTMLELEMENT_ATTRIBUTE_FIX_IN_QUIRKS_MODE) + && ((HtmlPage) getDomNodeOrDie().getPage()).isQuirksMode()) { if ("className".equals(attributeName)) { return "class"; } 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 2012-11-25 09:56:52 UTC (rev 7765) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2012-11-25 10:54:39 UTC (rev 7766) @@ -27,6 +27,7 @@ import com.gargoylesoftware.htmlunit.BrowserRunner.Browsers; import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; import com.gargoylesoftware.htmlunit.WebDriverTestCase; +import com.gargoylesoftware.htmlunit.html.HtmlPageTest; /** * Tests for {@link HTMLElement}. @@ -2555,14 +2556,13 @@ * @throws Exception on test failure */ @Test - @Alerts("") - @NotYetImplemented(IE) + @Alerts(IE = "t", FF = "") public void setAttribute_className() throws Exception { final String html = "<html><head>\n" + "<script>\n" + " function test(){\n" + " var div = document.createElement('div');\n" - + " div.setAttribute('className', 't');" + + " div.setAttribute('className', 't');\n" + " alert(div.className);\n" + " }\n" + "</script>\n" @@ -2576,14 +2576,13 @@ * @throws Exception on test failure */ @Test - @Alerts("t") - @NotYetImplemented(IE) + @Alerts(IE = "", FF = "t") public void setAttribute_class() throws Exception { final String html = "<html><head>\n" + "<script>\n" + " function test(){\n" + " var div = document.createElement('div');\n" - + " div.setAttribute('class', 't');" + + " div.setAttribute('class', 't');\n" + " alert(div.className);\n" + " }\n" + "</script>\n" @@ -2593,4 +2592,44 @@ loadPageWithAlerts2(html); } + /** + * @throws Exception on test failure + */ + @Test + @Alerts("") + public void setAttribute_className_standards() throws Exception { + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head>\n" + + "<script>\n" + + " function test(){\n" + + " var div = document.createElement('div');\n" + + " div.setAttribute('className', 't');\n" + + " alert(div.className);\n" + + " }\n" + + "</script>\n" + + "</head>\n" + + "<body onload='test()'></body></html>"; + + loadPageWithAlerts2(html); + } + + /** + * @throws Exception on test failure + */ + @Test + @Alerts("t") + public void setAttribute_class_standards() throws Exception { + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html><head>\n" + + "<script>\n" + + " function test(){\n" + + " var div = document.createElement('div');\n" + + " div.setAttribute('class', 't');\n" + + " alert(div.className);\n" + + " }\n" + + "</script>\n" + + "</head>\n" + + "<body onload='test()'></body></html>"; + + loadPageWithAlerts2(html); + } + } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/JQuery182Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/JQuery182Test.java 2012-11-25 09:56:52 UTC (rev 7765) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/JQuery182Test.java 2012-11-25 10:54:39 UTC (rev 7766) @@ -1080,7 +1080,6 @@ */ @Test @Alerts("support: A background on the testElement does not cause IE8 to crash (#9823) (0, 1, 1)") - @NotYetImplemented(IE) public void test_106() throws Exception { runTest(106); } @@ -1504,6 +1503,7 @@ FF10 = "attributes: attr(jquery_method) (0, 9, 9)", CHROME = "attributes: attr(jquery_method) (0, 9, 9)", IE = "attributes: attr(String, Object) (0, 81, 81)") + @NotYetImplemented(IE) public void test_143() throws Exception { runTest(143); } @@ -1588,6 +1588,7 @@ FF10 = "attributes: prop(String, Object) (0, 31, 31)", CHROME = "attributes: prop(String, Object) (0, 31, 31)", IE = "attributes: removeAttr(Multi String, variable space width) (0, 8, 8)") + @NotYetImplemented(IE) public void test_150() throws Exception { runTest(150); } |
From: <asa...@us...> - 2012-11-25 14:38:53
|
Revision: 7769 http://sourceforge.net/p/htmlunit/code/7769 Author: asashour Date: 2012-11-25 14:38:51 +0000 (Sun, 25 Nov 2012) Log Message: ----------- JavaScript: fix the return value of element.getAttribute() in standards mode (IE). 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/Element.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/JQuery182Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-25 13:33:33 UTC (rev 7768) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-25 14:38:51 UTC (rev 7769) @@ -9,6 +9,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> <action type="fix" dev="asashour"> + JavaScript: fix the return value of element.getAttribute() in standards mode (IE). + </action> + <action type="fix" dev="asashour"> JavaScript: element.set/getAttribute() should fix the name (e.g. "className") only in Quirks mode (IE). </action> <action type="fix" dev="mguillem"> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-25 13:33:33 UTC (rev 7768) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2012-11-25 14:38:51 UTC (rev 7769) @@ -873,9 +873,9 @@ @BrowserFeature(@WebBrowser(FF)) JS_FUNCTION_TOSOURCE, - /** Indicates that the getAttribute method supports ie style flags. */ + /** Indicates that the getAttribute method supports IE style flags, only in quirks mode . */ @BrowserFeature(@WebBrowser(IE)) - JS_GET_ATTRIBUTE_SUPPORTS_FLAGS, + JS_GET_ATTRIBUTE_SUPPORTS_FLAGS_IN_QUIRKS_MODE, /** Javascript function getBackgroundColor of computed styles returns the color as rgb. */ @BrowserFeature({ @WebBrowser(FF), @WebBrowser(CHROME) }) Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java 2012-11-25 13:33:33 UTC (rev 7768) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/Element.java 2012-11-25 14:38:51 UTC (rev 7769) @@ -15,7 +15,7 @@ package com.gargoylesoftware.htmlunit.javascript.host; import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.GENERATED_37; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_GET_ATTRIBUTE_SUPPORTS_FLAGS; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_GET_ATTRIBUTE_SUPPORTS_FLAGS_IN_QUIRKS_MODE; 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; @@ -27,9 +27,11 @@ import net.sourceforge.htmlunit.corejs.javascript.Scriptable; +import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.html.DomAttr; import com.gargoylesoftware.htmlunit.html.DomElement; import com.gargoylesoftware.htmlunit.html.DomNode; +import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.javascript.NamedNodeMap; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxClass; import com.gargoylesoftware.htmlunit.javascript.configuration.JsxFunction; @@ -139,7 +141,9 @@ @JsxFunction public Object getAttribute(String attributeName, final Integer flags) { attributeName = fixAttributeName(attributeName); - final boolean supportsFlags = getBrowserVersion().hasFeature(JS_GET_ATTRIBUTE_SUPPORTS_FLAGS); + final Page page = getDomNodeOrDie().getPage(); + final boolean supportsFlags = getBrowserVersion().hasFeature(JS_GET_ATTRIBUTE_SUPPORTS_FLAGS_IN_QUIRKS_MODE) + && page instanceof HtmlPage && ((HtmlPage) page).isQuirksMode(); Object value; if (supportsFlags && flags != null && flags == 2 && "style".equalsIgnoreCase(attributeName)) { 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 2012-11-25 13:33:33 UTC (rev 7768) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2012-11-25 14:38:51 UTC (rev 7769) @@ -2665,7 +2665,6 @@ */ @Test @Alerts({ "null", "", "null", "undefined" }) - @NotYetImplemented(IE) public void getAttribute2_standards() throws Exception { final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + "<html>\n" + "<head>\n" Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/JQuery182Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/JQuery182Test.java 2012-11-25 13:33:33 UTC (rev 7768) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/libraries/JQuery182Test.java 2012-11-25 14:38:51 UTC (rev 7769) @@ -1457,7 +1457,6 @@ @Alerts(FF3_6 = "attributes: attr(String) (0, 46, 46)", FF10 = "attributes: attr(String) in XML Files (0, 3, 3)", CHROME = "attributes: attr(String) in XML Files (0, 3, 3)", IE = "attributes: attr(String) (0, 46, 46)") - @NotYetImplemented(IE) public void test_139() throws Exception { runTest(139); } @@ -1503,7 +1502,6 @@ FF10 = "attributes: attr(jquery_method) (0, 9, 9)", CHROME = "attributes: attr(jquery_method) (0, 9, 9)", IE = "attributes: attr(String, Object) (0, 81, 81)") - @NotYetImplemented(IE) public void test_143() throws Exception { runTest(143); } @@ -1562,7 +1560,6 @@ FF10 = "attributes: removeAttr(String) in XML (0, 7, 7)", CHROME = "attributes: removeAttr(String) in XML (0, 7, 7)", IE = "attributes: removeAttr(String) (0, 12, 12)") - @NotYetImplemented(IE) public void test_148() throws Exception { runTest(148); } @@ -1588,7 +1585,6 @@ FF10 = "attributes: prop(String, Object) (0, 31, 31)", CHROME = "attributes: prop(String, Object) (0, 31, 31)", IE = "attributes: removeAttr(Multi String, variable space width) (0, 8, 8)") - @NotYetImplemented(IE) public void test_150() throws Exception { runTest(150); } |
From: <asa...@us...> - 2012-11-26 06:52:36
|
Revision: 7772 http://sourceforge.net/p/htmlunit/code/7772 Author: asashour Date: 2012-11-26 06:52:33 +0000 (Mon, 26 Nov 2012) Log Message: ----------- Correctly handle local file URL if it is in a separate driver (Windows). Issue 1464 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-11-26 06:38:07 UTC (rev 7771) +++ trunk/htmlunit/src/changes/changes.xml 2012-11-26 06:52:33 UTC (rev 7772) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="fix" dev="asashour" issue="1464"> + Correctly handle local file URL if it is in a separate driver (Windows). + </action> <action type="fix" dev="asashour"> JavaScript: fix the return value of element.getAttribute() in standards mode (IE). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2012-11-26 06:38:07 UTC (rev 7771) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/WebClient.java 2012-11-26 06:52:33 UTC (rev 7772) @@ -46,7 +46,6 @@ import net.sourceforge.htmlunit.corejs.javascript.ScriptableObject; import org.apache.commons.codec.DecoderException; -import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -1286,7 +1285,7 @@ cleanUrl = UrlUtils.getUrlWithNewRef(cleanUrl, null); } - final File file = FileUtils.toFile(cleanUrl); + final File file = new File(cleanUrl.toExternalForm().substring(5)); if (!file.exists()) { // construct 404 final List<NameValuePair> compiledHeaders = new ArrayList<NameValuePair>(); |