From: <rb...@us...> - 2013-11-17 13:21:34
|
Revision: 8790 http://sourceforge.net/p/htmlunit/code/8790 Author: rbri Date: 2013-11-17 13:21:30 +0000 (Sun, 17 Nov 2013) Log Message: ----------- support more features for DOMImplementation (Frank Danek) Modified Paths: -------------- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementation.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementationTest.java Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-11-17 08:58:42 UTC (rev 8789) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersionFeatures.java 2013-11-17 13:21:30 UTC (rev 8790) @@ -140,22 +140,6 @@ @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) DOCTYPE_IS_COMMENT, - /** If document.implementation.hasFeature() supports "CSS 3.0". */ - @BrowserFeature(@WebBrowser(value = FF, minVersion = 24)) - DOMIMPLEMENTATION_CSS_3, - - /** If document.implementation.hasFeature() supports "HTML 3.0". */ - @BrowserFeature(@WebBrowser(value = FF, minVersion = 24)) - DOMIMPLEMENTATION_HTML_3, - - /** If document.implementation.hasFeature() supports only "HTML". */ - @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) - DOMIMPLEMENTATION_ONLY_HTML, - - /** If document.implementation.hasFeature() supports "XML 3.0". */ - @BrowserFeature(@WebBrowser(value = FF, minVersion = 24)) - DOMIMPLEMENTATION_XML_3, - /** IE removes all child text nodes, but FF preserves the first. */ @BrowserFeature(@WebBrowser(IE)) DOM_NORMALIZE_REMOVE_CHILDREN, @@ -770,7 +754,7 @@ @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) JS_DOCUMENT_APPEND_CHILD_SUPPORTED, - /** Document instead of HTMLDocument. */ + /** Document instead of HTMLDocument or XMLDocument. */ @BrowserFeature(@WebBrowser(value = IE, minVersion = 10)) JS_DOCUMENT_CLASS_NAME, @@ -806,6 +790,62 @@ @BrowserFeature(@WebBrowser(IE)) JS_DOCUMENT_SETTING_DOMAIN_THROWS_FOR_ABOUT_BLANK, + /** If document.implementation.hasFeature() supports 'Core 1.0'. */ + @BrowserFeature(@WebBrowser(value = IE, minVersion = 10)) + JS_DOMIMPLEMENTATION_FEATURE_CORE_1, + + /** If document.implementation.hasFeature() supports 'CSS2 2.0'. */ + @BrowserFeature(@WebBrowser(FF)) + JS_DOMIMPLEMENTATION_FEATURE_CSS2_2, + + /** If document.implementation.hasFeature() supports 'CSS 2.0'. */ + @BrowserFeature(@WebBrowser(FF)) + JS_DOMIMPLEMENTATION_FEATURE_CSS_2, + + /** If document.implementation.hasFeature() supports 'CSS 3.0'. */ + @BrowserFeature(@WebBrowser(value = FF, minVersion = 24)) + JS_DOMIMPLEMENTATION_FEATURE_CSS_3, + + /** If document.implementation.hasFeature() supports 'Events 3.0'. */ + @BrowserFeature(@WebBrowser(value = IE, minVersion = 10)) + JS_DOMIMPLEMENTATION_FEATURE_EVENTS_3, + + /** If document.implementation.hasFeature() supports 'HTML 3.0'. */ + @BrowserFeature(@WebBrowser(value = FF, minVersion = 24)) + JS_DOMIMPLEMENTATION_FEATURE_HTML_3, + + /** If document.implementation.hasFeature() supports 'MutationEvents 2.0'. */ + @BrowserFeature(@WebBrowser(value = IE, minVersion = 10)) + JS_DOMIMPLEMENTATION_FEATURE_MUTATIONEVENTS_2, + + /** If document.implementation.hasFeature() supports only 'HTML'. */ + @BrowserFeature(@WebBrowser(value = IE, maxVersion = 9)) + JS_DOMIMPLEMENTATION_FEATURE_ONLY_HTML, + + /** If document.implementation.hasFeature() supports 'StyleSheets 2.0'. */ + @BrowserFeature(@WebBrowser(FF)) + JS_DOMIMPLEMENTATION_FEATURE_STYLESHEETS_2, + + /** If document.implementation.hasFeature() supports 'Traversal 2.0'. */ + @BrowserFeature(@WebBrowser(value = IE, minVersion = 10)) + JS_DOMIMPLEMENTATION_FEATURE_TRAVERSAL_2, + + /** If document.implementation.hasFeature() supports 'UIEvents 2.0'. */ + @BrowserFeature(@WebBrowser(FF)) + JS_DOMIMPLEMENTATION_FEATURE_UIEVENTS_2, + + /** If document.implementation.hasFeature() supports 'XHTML 1.0'. */ + @BrowserFeature(@WebBrowser(value = IE, minVersion = 10)) + JS_DOMIMPLEMENTATION_FEATURE_XHTML_1, + + /** If document.implementation.hasFeature() supports 'XML 3.0'. */ + @BrowserFeature(@WebBrowser(value = FF, minVersion = 24)) + JS_DOMIMPLEMENTATION_FEATURE_XML_3, + + /** If document.implementation.hasFeature() supports 'XPath 3.0'. */ + @BrowserFeature(@WebBrowser(FF)) + JS_DOMIMPLEMENTATION_FEATURE_XPATH_3, + /** Don't enumerate functions, see {@link net.sourceforge.htmlunit.corejs.javascript.ScriptableObject#DONTENUM}. */ @BrowserFeature(@WebBrowser(IE)) JS_DONT_ENUM_FUNCTIONS, Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementation.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementation.java 2013-11-17 08:58:42 UTC (rev 8789) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementation.java 2013-11-17 13:21:30 UTC (rev 8790) @@ -14,10 +14,19 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.dom; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.DOMIMPLEMENTATION_CSS_3; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.DOMIMPLEMENTATION_HTML_3; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.DOMIMPLEMENTATION_ONLY_HTML; -import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.DOMIMPLEMENTATION_XML_3; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_CORE_1; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_CSS2_2; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_CSS_2; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_EVENTS_3; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_HTML_3; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_MUTATIONEVENTS_2; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_ONLY_HTML; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_STYLESHEETS_2; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_TRAVERSAL_2; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_UIEVENTS_2; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_XHTML_1; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_XML_3; +import static com.gargoylesoftware.htmlunit.BrowserVersionFeatures.JS_DOMIMPLEMENTATION_FEATURE_XPATH_3; 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; @@ -50,37 +59,105 @@ */ @JsxFunction public boolean hasFeature(final String feature, final String version) { - if (getBrowserVersion().hasFeature(DOMIMPLEMENTATION_ONLY_HTML)) { + if (getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_ONLY_HTML)) { 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; + if ("Core".equals(feature)) { + if ("1.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_CORE_1); + } + else if ("2.0".equals(version)) { + return true; + } } - else if ("HTML".equals(feature) && "3.0".equals(version)) { - return getBrowserVersion().hasFeature(DOMIMPLEMENTATION_HTML_3); + else if ("HTML".equals(feature)) { + if ("1.0".equals(version) || "2.0".equals(version)) { + return true; + } + else if ("3.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_HTML_3); + } } - else if ("XML".equals(feature) && ("1.0".equals(version) || "2.0".equals(version))) { + else if ("XHTML".equals(feature)) { + if ("1.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_XHTML_1); + } + else if ("2.0".equals(version)) { + return true; + } + } + else if ("XML".equals(feature)) { + if ("1.0".equals(version) || "2.0".equals(version)) { + return true; + } + else if ("3.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_XML_3); + } + } + else if ("Views".equals(feature) && "2.0".equals(version)) { return true; } - else if ("XML".equals(feature) && "3.0".equals(version)) { - return getBrowserVersion().hasFeature(DOMIMPLEMENTATION_XML_3); + else if ("StyleSheets".equals(feature) && "2.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_STYLESHEETS_2); } + else if ("CSS".equals(feature) && "2.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_CSS_2); + } else if ("CSS2".equals(feature) && "2.0".equals(version)) { - return true; + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_CSS2_2); } - else if ("CSS2".equals(feature) && ("1.0".equals(version) || "3.0".equals(version))) { - return getBrowserVersion().hasFeature(DOMIMPLEMENTATION_CSS_3); + else if ("Events".equals(feature)) { + if ("2.0".equals(version)) { + return true; + } + else if ("3.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_EVENTS_3); + } } - else if ("CSS3".equals(feature) - && ("1.0".equals(version) || "2.0".equals(version) || "3.0".equals(version))) { - return getBrowserVersion().hasFeature(DOMIMPLEMENTATION_CSS_3); + else if ("UIEvents".equals(feature)) { + if ("2.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_UIEVENTS_2); + } + else if ("3.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_EVENTS_3); + } } - else if ("XPath".equals(feature) && "3.0".equals(version)) { + else if ("MouseEvents".equals(feature)) { + if ("2.0".equals(version)) { + return true; + } + else if ("3.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_EVENTS_3); + } + } + else if ("MutationEvents".equals(feature)) { + if ("2.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_MUTATIONEVENTS_2); + } + else if ("3.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_EVENTS_3); + } + } + else if ("HTMLEvents".equals(feature)) { + if ("2.0".equals(version)) { + return true; + } + else if ("3.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_EVENTS_3); + } + } + else if ("Range".equals(feature) && "2.0".equals(version)) { return true; } + else if ("Traversal".equals(feature) && "2.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_TRAVERSAL_2); + } + else if ("XPath".equals(feature) && "3.0".equals(version)) { + return getBrowserVersion().hasFeature(JS_DOMIMPLEMENTATION_FEATURE_XPATH_3); + } else if ("http://www.w3.org/TR/SVG11/feature#BasicStructure".equals(feature) && ("1.0".equals(version) || "1.1".equals(version))) { return true; @@ -111,7 +188,7 @@ document.setPrototype(getPrototype(document.getClass())); if (qualifiedName != null && !qualifiedName.isEmpty()) { final XmlPage page = document.getDomNodeOrDie(); - page.appendChild(page.createXmlElementNS(namespaceURI, qualifiedName)); + page.appendChild(page.createXmlElementNS("".equals(namespaceURI) ? null : namespaceURI, qualifiedName)); } return document; } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementationTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementationTest.java 2013-11-17 08:58:42 UTC (rev 8789) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/DOMImplementationTest.java 2013-11-17 13:21:30 UTC (rev 8790) @@ -26,6 +26,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 DOMImplementation}. @@ -42,6 +43,17 @@ * @throws Exception if the test fails */ @Test + @Alerts(DEFAULT = { "Core 1.0: false", "Core 2.0: true", "Core 3.0: false" }, + IE8 = { "Core 1.0: false", "Core 2.0: false", "Core 3.0: false" }, + IE10 = { "Core 1.0: true", "Core 2.0: true", "Core 3.0: false" }) + public void hasFeature_Core() throws Exception { + hasFeature("Core", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts(DEFAULT = { "HTML 1.0: true", "HTML 2.0: true", "HTML 3.0: false" }, FF24 = { "HTML 1.0: true", "HTML 2.0: true", "HTML 3.0: true" }, IE8 = { "HTML 1.0: true", "HTML 2.0: false", "HTML 3.0: false" }) @@ -64,6 +76,48 @@ * @throws Exception if the test fails */ @Test + @Alerts(DEFAULT = { "XHTML 1.0: false", "XHTML 2.0: true", "XHTML 3.0: false" }, + IE8 = { "XHTML 1.0: false", "XHTML 2.0: false", "XHTML 3.0: false" }, + IE10 = { "XHTML 1.0: true", "XHTML 2.0: true", "XHTML 3.0: false" }) + public void hasFeature_XHTML() throws Exception { + hasFeature("XHTML", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "Views 1.0: false", "Views 2.0: true", "Views 3.0: false" }, + IE8 = { "Views 1.0: false", "Views 2.0: false", "Views 3.0: false" }) + public void hasFeature_Views() throws Exception { + hasFeature("Views", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "StyleSheets 1.0: false", "StyleSheets 2.0: true", "StyleSheets 3.0: false" }, + IE = { "StyleSheets 1.0: false", "StyleSheets 2.0: false", "StyleSheets 3.0: false" }) + public void hasFeature_StyleSheets() throws Exception { + hasFeature("StyleSheets", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "CSS 1.0: false", "CSS 2.0: true", "CSS 3.0: false" }, + FF24 = { "CSS 1.0: true", "CSS 2.0: true", "CSS 3.0: true" }, + IE = { "CSS 1.0: false", "CSS 2.0: false", "CSS 3.0: false" }) + public void hasFeature_CSS() throws Exception { + hasFeature("CSS", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts(DEFAULT = { "CSS2 1.0: false", "CSS2 2.0: true", "CSS2 3.0: false" }, FF24 = { "CSS2 1.0: true", "CSS2 2.0: true", "CSS2 3.0: true" }, IE = { "CSS2 1.0: false", "CSS2 2.0: false", "CSS2 3.0: false" }) @@ -86,10 +140,138 @@ * @throws Exception if the test fails */ @Test - @Alerts(DEFAULT = "XPath 3.0: true", - IE = "XPath 3.0: false") + @Alerts(DEFAULT = { "Events 1.0: false", "Events 2.0: true", "Events 3.0: false" }, + IE8 = { "Events 1.0: false", "Events 2.0: false", "Events 3.0: false" }, + IE10 = { "Events 1.0: false", "Events 2.0: true", "Events 3.0: true" }) + public void hasFeature_Events() throws Exception { + hasFeature("Events", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "UIEvents 1.0: false", "UIEvents 2.0: true", "UIEvents 3.0: false" }, + IE8 = { "UIEvents 1.0: false", "UIEvents 2.0: false", "UIEvents 3.0: false" }, + IE10 = { "UIEvents 1.0: false", "UIEvents 2.0: false", "UIEvents 3.0: true" }) + public void hasFeature_UIEvents() throws Exception { + hasFeature("UIEvents", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "MouseEvents 1.0: false", "MouseEvents 2.0: true", "MouseEvents 3.0: false" }, + IE8 = { "MouseEvents 1.0: false", "MouseEvents 2.0: false", "MouseEvents 3.0: false" }, + IE10 = { "MouseEvents 1.0: false", "MouseEvents 2.0: true", "MouseEvents 3.0: true" }) + public void hasFeature_MouseEvents() throws Exception { + hasFeature("MouseEvents", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "TextEvents 1.0: false", "TextEvents 2.0: false", "TextEvents 3.0: false" }) + public void hasFeature_TextEvents() throws Exception { + hasFeature("TextEvents", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "KeyboardEvents 1.0: false", "KeyboardEvents 2.0: false", "KeyboardEvents 3.0: false" }) + public void hasFeature_KeyboardEvents() throws Exception { + hasFeature("KeyboardEvents", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "MutationEvents 1.0: false", "MutationEvents 2.0: false", "MutationEvents 3.0: false" }, + IE10 = { "MutationEvents 1.0: false", "MutationEvents 2.0: true", "MutationEvents 3.0: true" }) + public void hasFeature_MutationEvents() throws Exception { + hasFeature("MutationEvents", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "MutationNameEvents 1.0: false", "MutationNameEvents 2.0: false", "MutationNameEvents 3.0: false" }) + public void hasFeature_MutationNameEvents() throws Exception { + hasFeature("MutationNameEvents", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "HTMLEvents 1.0: false", "HTMLEvents 2.0: true", "HTMLEvents 3.0: false" }, + IE8 = { "HTMLEvents 1.0: false", "HTMLEvents 2.0: false", "HTMLEvents 3.0: false" }, + IE10 = { "HTMLEvents 1.0: false", "HTMLEvents 2.0: true", "HTMLEvents 3.0: true" }) + public void hasFeature_HTMLEvents() throws Exception { + hasFeature("HTMLEvents", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "Range 1.0: false", "Range 2.0: true", "Range 3.0: false" }, + IE8 = { "Range 1.0: false", "Range 2.0: false", "Range 3.0: false" }) + public void hasFeature_Range() throws Exception { + hasFeature("Range", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "Traversal 1.0: false", "Traversal 2.0: false", "Traversal 3.0: false" }, + IE10 = { "Traversal 1.0: false", "Traversal 2.0: true", "Traversal 3.0: false" }) + public void hasFeature_Traversal() throws Exception { + hasFeature("Traversal", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "LS 1.0: false", "LS 2.0: false", "LS 3.0: false" }) + public void hasFeature_LS() throws Exception { + hasFeature("LS", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "LS-Async 1.0: false", "LS-Async 2.0: false", "LS-Async 3.0: false" }) + public void hasFeature_LSAsync() throws Exception { + hasFeature("LS-Async", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts({ "Validation 1.0: false", "Validation 2.0: false", "Validation 3.0: false" }) + public void hasFeature_Validation() throws Exception { + hasFeature("Validation", "['1.0', '2.0', '3.0']"); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "XPath 1.0: false", "XPath 2.0: false", "XPath 3.0: true" }, + IE = { "XPath 1.0: false", "XPath 2.0: false", "XPath 3.0: false" }) public void hasFeature_XPath() throws Exception { - hasFeature("XPath", "['3.0']"); + hasFeature("XPath", "['1.0', '2.0', '3.0']"); } /** @@ -121,7 +303,8 @@ } private void hasFeature(final String feature, final String versions) throws Exception { - final String html = "<html><head>\n" + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + + "<html><head>\n" + "<script>\n" + " function test() {\n" + " var feature = '" + feature + "';\n" @@ -147,7 +330,8 @@ FF = "[object XMLDocument]") @NotYetImplemented(CHROME) public void createDocument() throws Exception { - final String html = "<html><head><title>foo</title><script>\n" + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + + "<html><head><title>foo</title><script>\n" + " function test() {\n" + " alert(document.implementation.createDocument('', '', null));\n" + " }\n" @@ -162,16 +346,64 @@ */ @Test @Browsers({ FF, CHROME, IE10 }) - @Alerts("mydoc") + @Alerts({ "mydoc", "null", "mydoc", "null" }) public void createDocument_qualifiedName() throws Exception { - final String html = "<html><head><title>foo</title><script>\n" + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + + "<html><head><title>foo</title><script>\n" + " function test() {\n" + " var doc = document.implementation.createDocument('', 'mydoc', null);\n" + " alert(doc.documentElement.tagName);\n" + + " alert(doc.documentElement.prefix);\n" + + " alert(doc.documentElement.localName);\n" + + " alert(doc.documentElement.namespaceURI);\n" + " }\n" + "</script></head><body onload='test()'>\n" + "</body></html>"; loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Browsers({ FF, CHROME, IE10 }) + @Alerts({ "mydoc", "null", "mydoc", "http://mynamespace" }) + public void createDocument_namespaceAndQualifiedName() throws Exception { + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + + "<html><head><title>foo</title><script>\n" + + " function test() {\n" + + " var doc = document.implementation.createDocument('http://mynamespace', 'mydoc', null);\n" + + " alert(doc.documentElement.tagName);\n" + + " alert(doc.documentElement.prefix);\n" + + " alert(doc.documentElement.localName);\n" + + " alert(doc.documentElement.namespaceURI);\n" + + " }\n" + + "</script></head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } + + /** + * @throws Exception if the test fails + */ + @Test + @Browsers({ FF, CHROME, IE10 }) + @Alerts({ "m:mydoc", "m", "mydoc", "http://mynamespace" }) + public void createDocument_namespaceAndQualifiedNameWithPrefix() throws Exception { + final String html = HtmlPageTest.STANDARDS_MODE_PREFIX_ + + "<html><head><title>foo</title><script>\n" + + " function test() {\n" + + " var doc = document.implementation.createDocument('http://mynamespace', 'm:mydoc', null);\n" + + " alert(doc.documentElement.tagName);\n" + + " alert(doc.documentElement.prefix);\n" + + " alert(doc.documentElement.localName);\n" + + " alert(doc.documentElement.namespaceURI);\n" + + " }\n" + + "</script></head><body onload='test()'>\n" + + "</body></html>"; + + loadPageWithAlerts2(html); + } } |