| // 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', |
| fractionalSecondDigits: 2, |
| }; |
| |
| 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), |
| TypeError, "Can't set option " + key + " when dateStyle is used"); |
| assertThrows( |
| () => new Intl.DateTimeFormat('en', testTimeStyle), |
| TypeError, "Can't set option " + key + " when timeStyle is used"); |
| 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(',')); |