<!DOCTYPE html>
<title>document.lastModified should return current local time</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
  var d = new Date();
  var last_modified = document.lastModified;
  var initial_modified = Date.parse(last_modified) / 1000;
  var expected = Math.round(d / 1000);

  test(function() {
    assert_approx_equals(initial_modified, expected, 2.5);
  }, "Date returned by lastModified is current at page load");

  var pattern = /[0-9]{2}\/[0-9]{2}\/[0-9]{4} ([0-9]{2}):([0-9]{2}):([0-9]{2})/

  test(function() {
     assert_regexp_match(last_modified, pattern,
                         "Format should match the pattern \"NN/NN/NNNN NN:NN:NN\".");
  }, "Date returned by lastModified is in the form \"MM/DD/YYYY hh:mm:ss\".");


  var hours = d.getHours()
  var minutes = d.getMinutes()
  var seconds = d.getSeconds()

  // Checking whether d and and new instance of Date have the same timezone.
  // Do not run the time zone test in the case daylight saving occurs.
  var d2 = new Date();
  if (d2.getTimezoneOffset() == d.getTimezoneOffset()) {
    test(function() {
      var local_time = hours * 60 * 60 + minutes * 60 + seconds;
      var m = pattern.exec(last_modified);
      var last_modified_time = parseInt(m[1]) * 60 * 60 + parseInt(m[2]) * 60 + parseInt(m[3]);
      assert_approx_equals(last_modified_time, local_time, 2,
                           "Hours and minutes should match local time.");
    }, "Date returned by lastModified is in the user's local time zone.");
  }
  var t = async_test("Date returned by lastModified is current after timeout.");

  t.step_timeout(function() {
    var new_modified = Date.parse(document.lastModified) / 1000;
    var new_expected = Math.round(new Date() / 1000);
    assert_approx_equals(new_modified, new_expected, 2.5,
                         "(initial value was " + initial_modified + ")");
    t.done();
  }, 4000);
</script>
