<html>
<head>

<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/elements-test.js"></script>
<script src="set-outer-html-test.js"></script>
<script>

function onload()
{
    document.getElementById("identity").wrapperIdentity = "identity";
    runTest();
}

function test()
{
    InspectorTest.runTestSuite([
        function testSetUp(next)
        {
            InspectorTest.setUpTestSuite(next);
        },

        function testChangeCharacterData(next)
        {
            InspectorTest.patchOuterHTML("Getting involved", "Getting not involved", next);
        },

        function testChangeAttributes(next)
        {
            InspectorTest.patchOuterHTML("<a href", "<a foo=\"bar\" href", next);
        },

        function testRemoveLastChild(next)
        {
            InspectorTest.patchOuterHTML("Getting involved", "", next);
        },

        function testSplitNode(next)
        {
            InspectorTest.patchOuterHTML("Getting involved", "Getting</h2><h2>involved", next);
        },

        function testChangeNodeName(next)
        {
            InspectorTest.patchOuterHTML("<h2>Getting involved</h2>", "<h3>Getting involved</h3>", next);
        }
    ]);
}
</script>
</head>

<body onload="onload()">
<p>
Tests DOMAgent.setOuterHTML protocol method.
</p>

<div id="container" style="display:none">
<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc.</a>.</p>
<h2>Getting involved</h2>
<p id="identity">There are many ways to get involved. You can:</p>
</div>

</body>
</html>
