// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

if ("Intl" in this) {
  function overflow() {
    return overflow() + 1;
  }
  Object.defineProperty = overflow;
  assertDoesNotThrow(function() { Intl.Collator.supportedLocalesOf("en"); });

  var date = new Date(Date.UTC(2004, 12, 25, 3, 0, 0));
  var options = {
    weekday: "long",
    year: "numeric",
    month: "long",
    day: "numeric"
  };

  Object.apply = overflow;
  assertDoesNotThrow(function() { date.toLocaleDateString("de-DE", options); });

  var options_incomplete = {};
  assertDoesNotThrow(function() {
    date.toLocaleDateString("de-DE", options_incomplete);
  });
  assertFalse(options_incomplete.hasOwnProperty("year"));

  assertDoesNotThrow(function() { date.toLocaleDateString("de-DE", undefined); });
  assertDoesNotThrow(function() { date.toLocaleDateString("de-DE"); });
  assertThrows(function() { date.toLocaleDateString("de-DE", null); }, TypeError);
}
