chromium/third_party/blink/web_tests/fast/parser/resources/p-in-scope.js

function testAsChild(tag)
{
    var markup = "<p>1<" + tag + ">";
    var container = document.createElement("body");

    container.innerHTML = markup;

    if (container.childNodes.length == 1)
        return "allowed";

    if (container.lastChild.tagName.toLowerCase() == tag)
        return "closed";

    return "other";
}

function testAsGrandchild(tag, intermediateTag)
{
    var markup = "<p>1<" + intermediateTag + ">2<" + tag + ">3";
    var container = document.createElement("body");
    container.innerHTML = markup;

    if (container.childNodes.length == 1)
        return "allowed";
    if (container.firstChild.lastChild && container.firstChild.lastChild.tagName && container.firstChild.lastChild.tagName.toLowerCase() == tag)
        return "allowed";

    return "closed";
}

function log(message)
{
    document.getElementById("console").appendChild(document.createTextNode(message + "\n\r"));
}

var leafTags = [
    "address",
    "blockquote",
    "center",
    "dir",
    "div",
    "dl",
    "fieldset",
    "h1",
    "h2",
    "h3",
    "h4",
    "h5",
    "h6",
    "menu",
    "ol",
    "p",
    "ul",

    "pre",
    "listing",

    "form",

    "hr",

    "li",

    "dd",
    "dt",

    "plaintext",

    "table",
];

var intermediateTags = [
    "a",            // formatting

    "b",            // formatting
    "big",          // formatting
    "em",           // formatting
    "i",            // formatting
    "s",            // formatting
    "small",        // formatting
    "strike",       // formatting
    "strong",       // formatting
    "tt",           // formatting
    "u",            // formatting

    "abbr",
    "acronym",
    "bdo",
    "cite",
    "code",
    "dfn",
    "kbd",
    "q",
    "samp",
    "sub",
    "sup",
    "var",

    "font",         // formatting

    "nobr",         // formatting

    "button",       // scoping

    "applet",       // scoping
    "object",       // scoping

    "span",         // phrasing
    "del",          // phrasing?
    "ins",          // phrasing?

    "marquee",      // scoping
];

if (window.testRunner)
    testRunner.dumpAsText();

var headerRow = document.getElementById("header-row");
for (var i = 0; i < intermediateTags.length; ++i)
    headerRow.appendChild(document.createElement("th")).appendChild(document.createTextNode(intermediateTags[i]));

for (var i = 0; i < leafTags.length; ++i) {
    var tag = leafTags[i];
    var row = document.getElementById("results").appendChild(document.createElement("tr"));
    row.appendChild(document.createElement("td")).appendChild(document.createTextNode(tag));
    var asChild = testAsChild(tag);
    var cell = row.appendChild(document.createElement("td"));
    cell.className = asChild;
    cell.appendChild(document.createTextNode(asChild == "allowed" ? "+" : asChild == "closed" ? "-" : "?"));
    for (var j = 0; j < intermediateTags.length; ++j) {
        var intermediateTag = intermediateTags[j];
        var asGrandchild = testAsGrandchild(tag, intermediateTag);
        cell = row.appendChild(document.createElement("td"));
        cell.className = asGrandchild;
        cell.appendChild(document.createTextNode(asGrandchild == "allowed" ? "+" : asGrandchild == "closed" ? "-" : "?"));
    }
}