// 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(','));