chromium/third_party/blink/web_tests/fast/forms/calendar-picker/time-picker-open-to-focused-field.html

<!DOCTYPE html>
<meta name=fuzzy content="maxDifference=0-3; totalPixels=0-1000">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../resources/testdriver.js"></script>
<script src="../../../resources/testdriver-vendor.js"></script>
<script src="../resources/common.js"></script>
<script src="../resources/picker-common.js"></script>

<script>
if (window.internals)
    internals.runtimeFlags.langAttributeAwareFormControlUIEnabled = true;
else
    debug('Require testRunner.');
</script>

<input type="time" id="time" value="11:34:00" />
<input type="time" step="1" id="timeWithSeconds" value="11:34:34" />
<input type="time" lang="ko" id="timeAmFirst" value="11:34:00" />

<script>

function runTimeTest(input, includesSeconds)
{
  let seconds = includesSeconds ? 34 : 0;
  let secondsStr = includesSeconds ? (":" + seconds) : "";
  // Update hours
  assert_equals(internals.pagePopupWindow, null);
  return openPicker(input)
  .then(() => {
    assert_not_equals(internals.pagePopupWindow, null);
    eventSender.keyDown('ArrowUp');
    assert_equals(input.value, "10:34" + secondsStr);
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "11:34" + secondsStr);
    eventSender.keyDown("Tab");
    eventSender.keyDown('ArrowUp');
    assert_equals(input.value, "11:33" + secondsStr);
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "11:34" + secondsStr);
    if (includesSeconds) {
      // Update seconds
      eventSender.keyDown("Tab"); // To seconds
      eventSender.keyDown('ArrowUp');
      seconds--;
      assert_equals(input.value, "11:34:" + seconds);
      eventSender.keyDown('ArrowDown');
      seconds++;
      assert_equals(input.value, "11:34:" + seconds);
    }
    // Update am/pm
    eventSender.keyDown("Tab");
    eventSender.keyDown('ArrowUp');
    assert_equals(input.value, "23:34" + secondsStr);
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "11:34" + secondsStr);
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "23:34" + secondsStr);
    return attemptToClosePicker(input);
  });
}

promise_test(() => {
  var input = document.getElementById("time");
  return runTimeTest(input, false);
}, "Test opening time picker to focused field.");

promise_test(() => {
  var input = document.getElementById("timeWithSeconds");
  return runTimeTest(input, true);
}, "Test opening time picker to focused field with seconds.");

promise_test(() => {
  var input = document.getElementById("timeAmFirst");
  // Update am/pm
  assert_equals(internals.pagePopupWindow, null);
  return openPicker(input)
  .then(() => {
    assert_not_equals(internals.pagePopupWindow, null);
    eventSender.keyDown('ArrowUp');
    assert_equals(input.value, "23:34");
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "11:34");
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "23:34");
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "11:34");
    // Update hours
    eventSender.keyDown("Tab");
    eventSender.keyDown('ArrowUp');
    assert_equals(input.value, "10:34");
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "11:34");
    // Update minutes
    eventSender.keyDown("Tab");
    eventSender.keyDown('ArrowUp');
    assert_equals(input.value, "11:33");
    eventSender.keyDown('ArrowDown');
    assert_equals(input.value, "11:34");
    return attemptToClosePicker(input);
  });
}, "Test opening time picker to focused field for AM/PM first.");

</script>