tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);