regress-10613.js 1.79 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// Copyright 2020 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.

// Test
// https://github.com/tc39/proposal-intl-datetime-style/pull/43
// https://github.com/tc39/proposal-intl-datetime-style/pull/47
// https://github.com/tc39/proposal-intl-datetime-style/pull/50
let opt = {
  weekday: 'narrow',
  era: 'narrow',
  year: '2-digit',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
17
  fractionalSecondDigits: 2,
18 19 20 21 22 23 24 25 26 27 28
};

let keys = Object.keys(opt);
let testDateStyle = { ...opt };
let testTimeStyle = { ...opt };
testDateStyle.dateStyle = 'long';
testTimeStyle.timeStyle = 'long';

for (key of keys) {
  assertThrows(
      () => new Intl.DateTimeFormat('en', testDateStyle),
29
      TypeError, "Can't set option " +  key + " when dateStyle is used");
30 31
  assertThrows(
      () => new Intl.DateTimeFormat('en', testTimeStyle),
32
      TypeError, "Can't set option " +  key + " when timeStyle is used");
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
  testDateStyle[key] = undefined;
  testTimeStyle[key] = undefined;
}

assertThrows(
    () => (new Date()).toLocaleDateString("en", {timeStyle: "long"}),
     TypeError, "Invalid option : timeStyle");

assertThrows(
    () => (new Date()).toLocaleTimeString("en", {dateStyle: "long"}),
     TypeError, "Invalid option : dateStyle");

let logs = [];
try {
  var dtf = new Intl.DateTimeFormat("en", {
    get timeStyle() {
      logs.push("get timeStyle");
      return "full";
    },
    get timeZoneName() {
      logs.push("get timeZoneName");
      return "short";
    },
  });
  logs.push(dtf.resolvedOptions().timeStyle);
  logs.push(dtf.resolvedOptions().timeZoneName);
} catch(e) {
  logs.push(e.name);
}

assertEquals(
    "get timeStyle,get timeZoneName,get timeStyle,TypeError",
    logs.join(','));