<!DOCTYPE html>
<html>
<head>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description('Test useCSS command');

var testContainer = document.createElement("div");
testContainer.contentEditable = true;
document.body.appendChild(testContainer);

function testUseCSS(styleArg, expectedState)
{
    document.execCommand('useCSS', false, styleArg); 
    if (document.queryCommandState('styleWithCSS') === expectedState)
        testPassed('useCSS changed the state successfully');
    else
        testFailed('useCSS failed with the argument ' + styleArg);
}

function testSingleToggle(toggleCommand, initialContents, expectedContents)
{
    testContainer.innerHTML = initialContents;
    window.getSelection().selectAllChildren(testContainer);
    document.execCommand("useCSS", false, false);
    document.execCommand(toggleCommand, false, null);
    if (testContainer.innerHTML === expectedContents)
        testPassed("one " + toggleCommand + " command converted " + initialContents + " to " + expectedContents);
    else
        testFailed("one " + toggleCommand + " command converted " + initialContents + " to " + testContainer.innerHTML + ", expected " + expectedContents);
}

testUseCSS(false, true);
testUseCSS('false', true);
testUseCSS('FALSE', true);
testUseCSS(true, false);
testUseCSS('random string', false);

if (document.queryCommandState('useCSS') === false)
    testPassed("queryCommandState('useCSS') returns false");
else
    testFailed("queryCommandState('useCSS') should return boolean false");

if (document.queryCommandValue('useCSS') === "")
    testPassed("queryCommandValue('useCSS') returns ''");
else
    testFailed("queryCommandValue('useCSS') should return string ''");

testSingleToggle("underline", "test", "<span style=\"text-decoration: underline;\">test</span>");

document.body.removeChild(testContainer);

</script>
<script src="../../fast/js/resources/js-test-post.js"></script>
</body>
</html>
