<!DOCTYPE html>
<html>
  <head>
    <title>Inputs Month</title>
    <link rel="author" title="Morishita Hiromitsu" href="mailto:hero@asterisk-works.jp">
    <link rel="author" title="kaseijin" href="mailto:pcmkas@gmail.com">
    <link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org">
    <link rel="help" href="https://html.spec.whatwg.org/multipage/#months">
    <link rel="help" href="https://html.spec.whatwg.org/multipage/#month-state-(type=month)">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <h1>Inputs Month</h1>
    <div style="display: none">
      <input id="valid_value_1" type="month" value="20133-12" />
      <input id="valid_value_2" type="month" value="2013-12" />
      <input id="valid_value_3" type="month" value="0003-01" />
      <input id="valid" type="month" value="2011-11" min="2011-01" max="2011-12" />
      <input id="invalid_value" type="month" value="invalid-month" min="2011-01" max="2011-12"/>
      <input id="value_can_be_empty_string" type="month" value="2013-06" />
      <input id="invalid_value_with_two_digits_year" type="month" value="13-06" />
      <input id="invalid_value_is_set" type="month" />
      <input id="step_attribute_is_invalid_value" type="month" value="2013-06" step="invalid_step_value" />
      <input id="invalid_month_too_high" type="month" value="2013-13" />
      <input id="invalid_month_too_low" type="month" value="2013-00" />
      <input id="invalid_year_all_zero" type="month" value="0000-10" />
      <input id="invalid_month_with_one_number" type="month" value="2013-1" />
      <input id="invalid_month_non_numerical" type="month" value="2013-abc" />
      <input id="invalid_date_additional_tuples" type="month" value="2013-11-1-1" />
    </div>

    <div id="log"></div>

    <script>
      test(function() {
        assert_equals(document.getElementById("valid_value_1").value, "20133-12")
      }, "year can be more than four digits");

      test(function() {
        assert_equals(document.getElementById("valid_value_2").value, "2013-12")
      }, "valid value test");

      test(function() {
        assert_equals(document.getElementById("valid_value_3").value, "0003-01")
      }, "year can contain prefixes of zero, as long as there are at least four digits");

      test(function() {
        assert_equals(document.getElementById("valid").type, "month")
      }, "month type support on input element");

      test(function() {
        assert_equals(document.getElementById("invalid_value").value, "")
      }, "User agents must not allow the user to set the value to a non-empty string that is not a valid month string.");

      test(function() {
        document.getElementById("value_can_be_empty_string").value = "";
        assert_equals(document.getElementById("value_can_be_empty_string").value, "")
      }, "Month value can be empty string.");

      test(function() {
        assert_equals(document.getElementById("invalid_value_with_two_digits_year").value, "")
      }, "When value attribute has two digits year value, the value,which is invalid, must return empty string.");

      test(function() {
        document.getElementById("invalid_value_is_set").value = "invalid value";
        assert_equals(document.getElementById("invalid_value_is_set").value, "")
      }, "When value is set with invalid value, the value must return empty string.");

      test(function() {
        document.getElementById("step_attribute_is_invalid_value").stepUp();
        assert_equals(document.getElementById("step_attribute_is_invalid_value").value, "2013-07")
      }, "When step attribute is given invalid value, it must ignore the invalid value and use defaul value instead.");

      test(function() {
        assert_equals(document.getElementById("invalid_month_too_high").value, "");
      }, "Month should be <= 13: If the value of the element is not a valid month string, then set it to the empty string instead.");

      test(function() {
        assert_equals(document.getElementById("invalid_month_too_low").value, "");
      }, "Month should be > 0: If the value of the element is not a valid month string, then set it to the empty string instead.>");

      test(function() {
        assert_equals(document.getElementById("invalid_year_all_zero").value, "");
      }, "Year should be > 0: If the value of the element is not a valid year string, then set it to the empty string instead.>");

      test(function() {
        assert_equals(document.getElementById("invalid_month_with_one_number").value, "");
      }, "Month should be two digits: If the value of the element is not a valid month string, then set it to the empty string instead.>");

      test(function() {
        assert_equals(document.getElementById("invalid_month_non_numerical").value, "");
      }, "Month should be two digits not characters: If the value of the element is not a valid month string, then set it to the empty string instead.>");

      test(function() {
        assert_equals(document.getElementById("invalid_date_additional_tuples").value, "");
      }, "Value should be two parts: If the value of the element is not a valid month string, then set it to the empty string instead.>");
    </script>
  </body>
</html>
