coercion-errors.js (2440B)
1 // Copyright (C) 2017 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-date-year-month-date-hours-minutes-seconds-ms 6 description: Abrupt completions from coercing input values 7 info: | 8 3. If NewTarget is not undefined, then 9 a. Let y be ? ToNumber(year). 10 b. Let m be ? ToNumber(month). 11 c. If date is supplied, let dt be ? ToNumber(date); else let dt be 1. 12 d. If hours is supplied, let h be ? ToNumber(hours); else let h be 0. 13 e. If minutes is supplied, let min be ? ToNumber(minutes); else let min be 0. 14 f. If seconds is supplied, let s be ? ToNumber(seconds); else let s be 0. 15 g. If ms is supplied, let milli be ? ToNumber(ms); else let milli be 0. 16 h. If y is not NaN and 0 ≤ ToInteger(y) ≤ 99, let yr be 1900+ToInteger(y); otherwise, 17 let yr be y. 18 i. Let finalDate be MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli)). 19 j. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%DatePrototype%", « [[DateValue]] »). 20 k. Set O.[[DateValue]] to TimeClip(UTC(finalDate)). 21 l. Return O. 22 ---*/ 23 24 var thrower = { toString: function() { throw new Test262Error(); } }; 25 var counter = { toString: function() { callCount += 1; } }; 26 var callCount = 0; 27 28 assert.throws(Test262Error, function() { 29 new Date(thrower, counter); 30 }, 'year'); 31 assert.sameValue(callCount, 0, 'coercion halts following error from "year"'); 32 33 assert.throws(Test262Error, function() { 34 new Date(0, thrower, counter); 35 }, 'month'); 36 assert.sameValue(callCount, 0, 'coercion halts following error from "month"'); 37 38 assert.throws(Test262Error, function() { 39 new Date(0, 0, thrower, counter); 40 }, 'date'); 41 assert.sameValue(callCount, 0, 'coercion halts following error from "date"'); 42 43 assert.throws(Test262Error, function() { 44 new Date(0, 0, 1, thrower, counter); 45 }, 'hours'); 46 assert.sameValue(callCount, 0, 'coercion halts following error from "hours"'); 47 48 assert.throws(Test262Error, function() { 49 new Date(0, 0, 1, 0, thrower, counter); 50 }, 'minutes'); 51 assert.sameValue( 52 callCount, 0, 'coercion halts following error from "minutes"' 53 ); 54 55 assert.throws(Test262Error, function() { 56 new Date(0, 0, 1, 0, 0, thrower, counter); 57 }, 'seconds'); 58 assert.sameValue( 59 callCount, 0, 'coercion halts following error from "seconds"' 60 ); 61 62 assert.throws(Test262Error, function() { 63 new Date(0, 0, 1, 0, 0, 0, thrower); 64 }, 'ms'); 65 66 reportCompare(0, 0);