<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=535043
-->
<head>
  <title>Test for Bug 535043</title>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="/tests/SimpleTest/EventUtils.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=535043">Mozilla Bug 535043</a>
<p id="display"></p>
<div id="content">
  <textarea></textarea>
  <textarea maxlength="-1"></textarea>
  <textarea maxlength="0"></textarea>
  <textarea maxlength="2"></textarea>
</div>
<pre id="test">
<script type="text/javascript">

/** Test for Bug 535043 **/
function checkTextArea(textArea) {
  textArea.value = '';
  textArea.focus();
  for (var j = 0; j < 3; j++) {
    synthesizeKey('x', {});
  }
  var htmlMaxLength = textArea.getAttribute('maxlength');
  var domMaxLength = textArea.maxLength;
  if (htmlMaxLength == null) {
    is(domMaxLength, -1,
      'maxlength is unset but maxLength DOM attribute is not -1');
  } else if (htmlMaxLength < 0) {
    // Per the HTML5 spec, out-of-range values are supposed to translate to -1,
    // not 0, but they don't?
    is(domMaxLength, -1,
      'maxlength is out of range but maxLength DOM attribute is not -1');
  } else {
    is(domMaxLength, parseInt(htmlMaxLength),
      'maxlength in DOM does not match provided value');
  }
  if (textArea.maxLength == -1) {
    is(textArea.value.length, 3,
      'textarea with maxLength -1 should have no length limit');
  } else {
    is(textArea.value.length, textArea.maxLength, 'textarea has maxLength ' +
      textArea.maxLength + ' but length ' + textArea.value.length );
  }
}

SimpleTest.waitForFocus(function() {
  var textAreas = document.getElementsByTagName('textarea');
  for (var i = 0; i < textAreas.length; i++) {
    checkTextArea(textAreas[i]);
  }

  textArea = textAreas[0];
  testNums = [-42, -1, 0, 2];
  for (var i = 0; i < testNums.length; i++) {
    textArea.removeAttribute('maxlength');

    var caught = false;
    try {
      textArea.maxLength = testNums[i];
    } catch (e) {
      caught = true;
    }
    if (testNums[i] < 0) {
      ok(caught, 'Setting negative maxLength should throw exception');
    } else {
      ok(!caught, 'Setting nonnegative maxLength should not throw exception');
    }
    checkTextArea(textArea);

    textArea.setAttribute('maxlength', testNums[i]);
    checkTextArea(textArea);
  }

  SimpleTest.finish();
});

SimpleTest.waitForExplicitFinish();

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