<!DOCTYPE html>
<html>
<head>
    <script src="../../resources/js-test-pre.js"></script>
<style>
    .underline_important {
        text-decoration: underline !important;
    }
    .linethrough_important{
        text-decoration: line-through !important;
    }

    .underline_decoration {
        text-decoration: underline;
    }
    .linethrough_decoration{
        text-decoration: line-through;
    }
</style>
</head>
<body>
<script>
description('Test to make sure we return correct text-decoration state on applying different command.');

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

function textdecorationState(decoration, content, command)
{
    testContainer.innerHTML = content;
    var target = document.getElementById('e');
    var selection = window.getSelection();
    var range = document.createRange();
    range.setStart(target, 0);
    range.setEnd(target, 1);
    target.focus();
    selection.removeAllRanges();
    selection.addRange(range);
    document.execCommand(command, false, null);

    return document.queryCommandState(decoration);
}

//!important
shouldBe('textdecorationState("underline","<span id=e style=\'text-decoration: none !important;\'>hello world</span>", "underline")', 'false');
shouldBe('textdecorationState("underline","<span id=e style=\'text-decoration: underline !important;\'>hello world</span>", "underline")', 'true');
shouldBe('textdecorationState("strikeThrough","<span id=e style=\'text-decoration: underline !important;\'>hello world</span>", "strikethrough")', 'false');
shouldBe('textdecorationState("strikeThrough","<span style=\'text-decoration: underline !important;\'><em id=e>hello world</em></span>", "strikethrough")', 'true');
shouldBe('textdecorationState("underline","<span id=e class=\'underline_important\'>hello world</span>", "removeFormat")', 'true');
shouldBe('textdecorationState("strikeThrough","<span id=e class=\'linethrough_important\'>hello world</span>", "removeFormat")', 'true');
shouldBe('textdecorationState("underline","<u><span id=e style=\'text-decoration: underline !important;\'>hello world</span></u>", "underline")', 'false');

//general
shouldBe('textdecorationState("underline","<span id=e style=\'text-decoration: none;\'>hello world</span>", "underline")', 'true');
shouldBe('textdecorationState("underline","<span id=e style=\'text-decoration: underline;\'>hello world</span>", "underline")', 'false');
shouldBe('textdecorationState("strikeThrough","<span id=e style=\'text-decoration: underline;\'>hello world</span>", "strikethrough")', 'true');
shouldBe('textdecorationState("strikeThrough","<span style=\'text-decoration: underline;\'><em id=e>hello world</em></span>", "strikethrough")', 'true');
shouldBe('textdecorationState("underline","<span id=e  class=\'underline_decoration\'>hello world</span>", "removeFormat")', 'false');
shouldBe('textdecorationState("strikeThrough","<span id=e class=\'linethrough_decoration\'>hello world</span>", "removeFormat")', 'true');

shouldBe('textdecorationState("underline","<span id=e style=\'text-decoration: underline;\'>hello world</span>", "removeFormat")', 'false');
shouldBe('textdecorationState("underline","<span id=e>hello world</span>", "underline")', 'true');

shouldBe('textdecorationState("underline","<u><span id=e>hello world</span></u>", "underline")', 'false');
shouldBe('textdecorationState("underline","<u><span id=e style=\'text-decoration: underline;\'>hello world</span></u>", "underline")', 'false');

document.body.removeChild(testContainer);

var successfullyParsed = true;
</script>
</body>
</html>
