<html>
<head>
<script>
function print(message, color) 
{
    var paragraph = document.createElement("div");
    paragraph.appendChild(document.createTextNode(message));
    paragraph.style.fontFamily = "monospace";
    if (color)
        paragraph.style.color = color;
    document.getElementById("console").appendChild(paragraph);
}

function write(s)
{
    document.getElementById('pre').appendChild(document.createTextNode(s));
}

function shouldBe(a, b)
{
    var evalA = eval(a);
    if (evalA == b)
        print("PASS: " + a + " should be " + b + " and is.", "green");
    else
        print("FAIL: " + a + " should be " + b + " but instead is " + evalA + ".", "red");
}

var embed;

function test() 
{
    if (window.testRunner)
        testRunner.dumpAsText();
        
    embed = document.getElementById('embed');
    print("[Embed is element specified in markup]");

    embed.align = 1;
    embed.height = 1;
    embed.name = 1;
    embed.width = 1;
    embed.type = 1; // setting the type attribute should not effect the plugin once loaded
    embed.src = 1; // setting the source attribute should not effect the plugin once loaded

    shouldBe("embed.getAttribute('align')", 1);
    shouldBe("embed.getAttribute('height')", 1);
    shouldBe("embed.getAttribute('name')", 1);
    shouldBe("embed.getAttribute('width')", 1);
    shouldBe("embed.getAttribute('type')", 1);
    shouldBe("embed.getAttribute('src')", 1);
    shouldBe("typeof embed.testCallback", "function");

    print("----------");
    
    embed = document.createElement('embed');
    print("[Embed is dynamically created element with only type specified]");

    embed.style.visibility = "hidden";
    embed.type = "application/x-webkit-test-netscape";
    document.body.appendChild(embed);
    shouldBe("typeof embed.testCallback", "function");
    
    print("----------");
    
    embed = document.createElement('embed');
    print("[Embed is dynamically created element with only src specified]");

    embed.style.visibility = "hidden";
    embed.src = "resources/test.testnetscape";
    document.body.appendChild(embed);
    shouldBe("typeof embed.testCallback", "function");
}
</script>
</head>

<body onload="test();">

<hr>
<div id='console'></div>

<embed style="visibility: hidden" type="application/x-webkit-test-netscape" id='embed'></embed>

</body>
</html>
