<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=408231
-->
<head>
  <title>Test for Bug 408231</title>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=408231">Mozilla Bug 408231</a>
<p id="display"></p>
<div id="content" style="display: none">
  
</div>
<pre id="test">
<script class="testbody" type="text/javascript">

/** Test for Bug 408231 **/

    var commandEnabledResults = [
      ["contentReadOnly", "true"],
      ["copy", "false"],
      ["createlink", "true"],
      ["cut", "false"],
      ["decreasefontsize", "true"],
      ["delete", "true"],
      ["fontname", "true"],
      ["fontsize", "true"],
      ["formatblock", "true"],
      ["heading", "true"],
      ["hilitecolor", "true"],
      ["increasefontsize", "true"],
      ["indent", "true"],
      ["inserthorizontalrule", "true"],
      ["inserthtml", "true"],
      ["insertimage", "true"],
      ["insertorderedlist", "true"],
      ["insertunorderedlist", "true"],
      ["insertparagraph", "true"],
      ["italic", "true"],
      ["justifycenter", "true"],
      ["justifyfull", "true"],
      ["justifyleft", "true"],
      ["justifyright", "true"],
      ["outdent", "true"],
      ["paste", "false"],
      ["redo", "false"],
      ["removeformat", "true"],
      ["selectall", "true"],
      ["strikethrough", "true"],
      ["styleWithCSS", "true"],
      ["subscript", "true"],
      ["superscript", "true"],
      ["underline", "true"],
      ["undo", "false"],
      ["unlink", "true"],
      ["not-a-command", "false"]
    ];

    var commandIndetermResults = [
      ["contentReadOnly", "false"],
      ["copy", "false"],
      ["createlink", "false"],
      ["cut", "false"],
      ["decreasefontsize", "false"],
      ["delete", "false"],
      ["fontname", "false"],
      ["fontsize", "false"],
      ["formatblock", "false"],
      ["heading", "false"],
      ["hilitecolor", "false"],
      ["increasefontsize", "false"],
      ["indent", "false"],
      ["inserthorizontalrule", "false"],
      ["inserthtml", "false"],
      ["insertimage", "false"],
      ["insertorderedlist", "false"],
      ["insertunorderedlist", "false"],
      ["insertparagraph", "false"],
      ["italic", "false"],
      ["justifycenter", "false"],
      ["justifyfull", "false"],
      ["justifyleft", "false"],
      ["justifyright", "false"],
      ["outdent", "false"],
      //["paste", "false"],
      ["redo", "false"],
      ["removeformat", "false"],
      ["selectall", "false"],
      ["strikethrough", "false"],
      ["styleWithCSS", "false"],
      ["subscript", "false"],
      ["superscript", "false"],
      ["underline", "false"],
      ["undo", "false"],
      ["unlink", "false"],
      ["not-a-command", "false"]
    ];
    
    var commandStateResults = [
      ["contentReadOnly", "false"],
      ["copy", "false"],
      ["createlink", "false"],
      ["cut", "false"],
      ["decreasefontsize", "false"],
      ["delete", "false"],
      ["fontname", "false"],
      ["fontsize", "false"],
      ["formatblock", "false"],
      ["heading", "false"],
      ["hilitecolor", "false"],
      ["increasefontsize", "false"],
      ["indent", "false"],
      ["inserthorizontalrule", "false"],
      ["inserthtml", "false"],
      ["insertimage", "false"],
      ["insertorderedlist", "false"],
      ["insertunorderedlist", "false"],
      ["insertparagraph", "false"],
      ["italic", "false"],
      ["justifycenter", "false"],
      ["justifyfull", "false"],
      ["justifyleft", "true"],
      ["justifyright", "false"],
      ["outdent", "false"],
      //["paste", "false"],
      ["redo", "false"],
      ["removeformat", "false"],
      ["selectall", "false"],
      ["strikethrough", "false"],
      ["styleWithCSS", "false"],
      ["subscript", "false"],
      ["superscript", "false"],
      ["underline", "false"],
      ["undo", "false"],
      ["unlink", "false"],
      ["not-a-command", "false"]
    ];
    
    var commandValueResults = [
      ["contentReadOnly", ""],
      ["copy", ""],
      ["createlink", ""],
      ["cut", ""],
      ["decreasefontsize", ""],
      ["delete", ""],
      ["fontname", "serif"],
      ["fontsize", ""],
      ["formatblock", ""],
      ["heading", ""],
      ["hilitecolor", "transparent"],
      ["increasefontsize", ""],
      ["indent", ""],
      ["inserthorizontalrule", ""],
      ["inserthtml", ""],
      ["insertimage", ""],
      ["insertorderedlist", ""],
      ["insertunorderedlist", ""],
      ["insertparagraph", ""],
      ["italic", ""],
      ["justifycenter", "left"],
      ["justifyfull", "left"],
      ["justifyleft", "left"],
      ["justifyright", "left"],
      ["outdent", ""],
      //["paste", ""],
      ["redo", ""],
      ["removeformat", ""],
      ["selectall", ""],
      ["strikethrough", ""],
      ["styleWithCSS", ""],
      ["subscript", ""],
      ["superscript", ""],
      ["underline", ""],
      ["undo", ""],
      ["unlink", ""],
      ["not-a-command", ""],
    ];
    
  
    function callQueryCommandEnabled(cmdName) {
      var result;
      try {
        result = '' + document.queryCommandEnabled( cmdName );
      } catch( error ) {
        result = 'name' in error ? error.name : 'exception';
      }
      return result;
    }

    function callQueryCommandIndeterm(cmdName) {
      var result;
      try {
        result = '' + document.queryCommandIndeterm( cmdName );
      } catch( error ) {
        result = 'name' in error ? error.name : 'exception';
      }
      return result;
    }
    
    function callQueryCommandState(cmdName) {
      var result;
      try {
        result = '' + document.queryCommandState( cmdName );
      } catch( error ) {
        result = 'name' in error ? error.name : 'exception';
      }
      return result;
    }

    function callQueryCommandValue(cmdName) {
      var result;
      try {
        result = '' + document.queryCommandValue( cmdName );
      } catch( error ) {
        result = 'name' in error ? error.name : 'exception';
      }
      return result;    
    }

    function testQueryCommand(expectedResults, fun, funName) {
      for (i=0; i<expectedResults.length; i++) {
        var commandName = expectedResults[i][0];
        var expectedResult = expectedResults[i][1];
        var result = fun(commandName);
        ok(result == expectedResult, funName + '('+commandName+') result=' +result+ ' expected=' + expectedResult);
      }
    }

    function runTests() {
      document.designMode='on';
      window.getSelection().collapse(document.body, 0);
      testQueryCommand(commandEnabledResults, callQueryCommandEnabled, "queryCommandEnabled");
      testQueryCommand(commandIndetermResults, callQueryCommandIndeterm, "queryCommandIndeterm");
      testQueryCommand(commandStateResults, callQueryCommandState, "queryCommandState");
      testQueryCommand(commandValueResults, callQueryCommandValue, "queryCommandValue");
      document.designMode='off';
      SimpleTest.finish();
    }
    
    window.onload = runTests;
    SimpleTest.waitForExplicitFinish();

</script>
</pre>
</body>
</html>