<!DOCTYPE html>
<meta charset=utf-8>
<title>input type reset</title>
<link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org">
<link rel=help href="https://html.spec.whatwg.org/multipage/#reset-button-state-(type=reset)">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<form>
  <input type=text id=input1 value="foobar">
  <input type=text id=input2>
  <input type=reset id=r1>
</form>

<input type=text id=input3 value="barfoo">

<table>
  <form>
    <tr>
      <td>
        <input type=text id=input4 value="foobar">
        <input type=reset id=r2>
      </td>
    </tr>
  </form>
</table>

<div>
  <form>
    <input type=text id=input5 value="foobar">
  </div>
  <input type=reset id=r3>
</form>

<div>
  <form>
    <input type=reset id=r4>
  </div>
  <input type=text id=input6 value="foobar">
</form>

<form id=form5>
  <input type=reset id=r5>
</form>
<input form=form5 type=text id=input7 value="foobar">

<form id=form6>
  <input type=text id=input8 value="foobar">
</form>
<input type=reset form=form6 id=r6>

<script>
  var input1 = document.getElementById('input1'),
      input2 = document.getElementById('input2'),
      input3 = document.getElementById('input3'),
      input7 = document.getElementById('input7'),
      input8 = document.getElementById('input8'),
      r1 = document.getElementById('r1');

  test(function(){
    assert_equals(input1.value, "foobar");
    assert_equals(input2.value, "");
    assert_equals(input3.value, "barfoo");
    input1.value = "foobar1";
    input2.value = "notempty";
    input3.value = "barfoo1";
    assert_equals(input1.value, "foobar1");
    assert_equals(input2.value, "notempty");
    assert_equals(input3.value, "barfoo1");
    r1.click();
    assert_equals(input1.value, "foobar");
    assert_equals(input2.value, "");
    assert_equals(input3.value, "barfoo1");
  }, "reset button only resets the form owner");

  test(function(){
    assert_false(r1.willValidate);
  }, "the element is barred from constraint validation");

  test(function(){
    assert_equals(input1.value, "foobar");
    assert_equals(input2.value, "");
    assert_equals(input3.value, "barfoo1");
    r1.disabled = true;
    r1.click();
    assert_equals(input1.value, "foobar");
    assert_equals(input2.value, "");
    assert_equals(input3.value, "barfoo1");
  }, "clicking on a disabled reset does nothing");

  function testReset(inputId, buttonId) {
    var inp = document.getElementById(inputId);
    assert_equals(inp.value, "foobar");
    inp.value = "barfoo";
    assert_equals(inp.value, "barfoo");
    document.getElementById(buttonId).click();
    assert_equals(inp.value, "foobar");
  }

  test(function(){
    testReset("input4", "r2");
    testReset("input5", "r3");
    testReset("input6", "r4");
  }, "reset button resets controls associated with their form using the form element pointer");

  test(function(){
    testReset("input7", "r5");
  }, "reset button resets controls associated with a form using the form attribute");

  test(function(){
    testReset("input8", "r6");
  }, "reset button associated with a form using the form attribute resets all the form's controls");
</script>
