| Index: LayoutTests/fast/svg/tabindex-focus.html
|
| diff --git a/LayoutTests/fast/svg/tabindex-focus.html b/LayoutTests/fast/svg/tabindex-focus.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f80ce72d29c776467448d0e11b5ec452cde6c35d
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/svg/tabindex-focus.html
|
| @@ -0,0 +1,205 @@
|
| +<!doctype html>
|
| +<title>Tabindex on svg elements tests</title>
|
| +<script src=../../resources/testharness.js></script>
|
| +<script src=../../resources/testharnessreport.js></script>
|
| +<body>
|
| +<div id="testcontainer"><svg id="testroot" width="1" height="1"/></div>
|
| +<div id=log></div>
|
| +<script>
|
| +var svg = document.getElementById("testroot");
|
| +function isFocusable(elm) {
|
| + switch (elm.nodeName) {
|
| + case "a":
|
| + return elm.hasAttributeNS("http://www.w3.org/1999/xlink", "href");
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +function isFocusableWithTabindex(elm) {
|
| + switch (elm.nodeName) {
|
| + case "a":
|
| + case "circle":
|
| + case "ellipse":
|
| + case "foreignObject":
|
| + case "g":
|
| + case "image":
|
| + case "line":
|
| + case "path":
|
| + case "polygon":
|
| + case "polyline":
|
| + case "rect":
|
| + case "svg":
|
| + case "switch":
|
| + case "text":
|
| + return true;
|
| + case "textPath":
|
| + //case "tref": /* not supported */
|
| + case "tspan":
|
| + // only if inside a <text> element
|
| + return elm.parentNode.nodeName == "text";
|
| + case "use":
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +function createSvg() {
|
| + var svgelements = [
|
| + "a",
|
| + "altGlyph",
|
| + "altGlyphDef",
|
| + "altGlyphItem",
|
| + "animate",
|
| + "animateColor",
|
| + "animateMotion",
|
| + "animateTransform",
|
| + "circle",
|
| + "clipPath",
|
| + "color-profile",
|
| + "cursor",
|
| + "definition-src",
|
| + "defs",
|
| + "desc",
|
| + "ellipse",
|
| + "feBlend",
|
| + "feColorMatrix",
|
| + "feComponentTransfer",
|
| + "feComposite",
|
| + "feConvolveMatrix",
|
| + "feDiffuseLighting",
|
| + "feDisplacementMap",
|
| + "feDistantLight",
|
| + "feFlood",
|
| + "feFuncA",
|
| + "feFuncB",
|
| + "feFuncG",
|
| + "feFuncR",
|
| + "feGaussianBlur",
|
| + "feImage",
|
| + "feMerge",
|
| + "feMergeNode",
|
| + "feMorphology",
|
| + "feOffset",
|
| + "fePointLight",
|
| + "feSpecularLighting",
|
| + "feSpotLight",
|
| + "feTile",
|
| + "feTurbulence",
|
| + "filter",
|
| + "font",
|
| + "font-face",
|
| + "font-face-format",
|
| + "font-face-name",
|
| + "font-face-src",
|
| + "font-face-uri",
|
| + "foreignObject",
|
| + "g",
|
| + "glyph",
|
| + "glyphRef",
|
| + "hkern",
|
| + "image",
|
| + "line",
|
| + "linearGradient",
|
| + "marker",
|
| + "mask",
|
| + "metadata",
|
| + "missing-glyph",
|
| + "mpath",
|
| + "path",
|
| + "pattern",
|
| + "polygon",
|
| + "polyline",
|
| + "radialGradient",
|
| + "rect",
|
| + "script",
|
| + "set",
|
| + "stop",
|
| + "style",
|
| + "svg",
|
| + "switch",
|
| + "symbol",
|
| + "text",
|
| + "textPath",
|
| + "title",
|
| + "tref",
|
| + "tspan",
|
| + "use",
|
| + "view",
|
| + "vkern"];
|
| + for (var i = 0; i < svgelements.length; i++) {
|
| + svg.appendChild(document.createElementNS("http://www.w3.org/2000/svg", svgelements[i]));
|
| + }
|
| +}
|
| +
|
| +function setupTextContentElements() {
|
| + // specialcases for the text content elements
|
| +
|
| + // cleanup any old content
|
| + while(svg.firstChild)
|
| + svg.removeChild(svg.firstChild);
|
| +
|
| + var textContentChildElements = ["textPath", "tref", "tspan"];
|
| + for (var i = 0; i < textContentChildElements.length; i++) {
|
| + var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
|
| + text.appendChild(document.createElementNS("http://www.w3.org/2000/svg", textContentChildElements[i]));
|
| + svg.appendChild(text);
|
| + }
|
| +}
|
| +
|
| +setup(createSvg);
|
| +var element = svg.firstElementChild;
|
| +while(element) {
|
| + test(function() {
|
| + try {
|
| + element.focus();
|
| + assert_equals(document.activeElement, isFocusable(element) ? element : document.body);
|
| + }
|
| + finally {
|
| + document.body.focus();
|
| + }
|
| + }, element.nodeName + ".focus() without tabindex set.");
|
| + test(function() {
|
| + try {
|
| + element.setAttribute("tabindex", "1");
|
| + element.focus();
|
| + assert_equals(document.activeElement, isFocusableWithTabindex(element) ? element : document.body);
|
| + element.removeAttribute("tabindex");
|
| + }
|
| + finally {
|
| + document.body.focus();
|
| + }
|
| + }, element.nodeName + ".focus() with tabindex set.");
|
| +
|
| + element.parentNode.removeChild(element);
|
| + element = svg.firstElementChild;
|
| +}
|
| +
|
| +setupTextContentElements();
|
| +var element = svg.firstElementChild;
|
| +while(element) {
|
| + test(function() {
|
| + try {
|
| + element.firstElementChild.focus();
|
| + assert_equals(document.activeElement, isFocusable(element.firstElementChild) ? element.firstElementChild : document.body);
|
| + }
|
| + finally {
|
| + document.body.focus();
|
| + }
|
| + }, element.firstElementChild.nodeName + ".focus() without tabindex set.");
|
| + test(function() {
|
| + try {
|
| + element.firstElementChild.setAttribute("tabindex", "1");
|
| + element.firstElementChild.focus();
|
| + assert_equals(document.activeElement, isFocusableWithTabindex(element.firstElementChild) ? element.firstElementChild : document.body);
|
| + element.firstElementChild.removeAttribute("tabindex");
|
| + }
|
| + finally {
|
| + document.body.focus();
|
| + }
|
| + }, element.firstElementChild.nodeName + ".focus() with tabindex set.");
|
| +
|
| + element.parentNode.removeChild(element);
|
| + element = svg.firstElementChild;
|
| +}
|
| +</script>
|
| +</body>
|
|
|