tor-browser

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

errors-iterabletolist-failures.js (3758B)


      1 // Copyright (C) 2019 Leo Balter. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 esid: sec-aggregate-error
      6 description: >
      7  Return abrupt completion from IterableToList(errors)
      8 info: |
      9  AggregateError ( errors, message )
     10 
     11  ...
     12  3. Let errorsList be ? IterableToList(errors).
     13  4. Set O.[[AggregateErrors]] to errorsList.
     14  ...
     15  6. Return O.
     16 
     17  Runtime Semantics: IterableToList ( items [ , method ] )
     18 
     19  1. If method is present, then
     20    ...
     21  2. Else,
     22    b. Let iteratorRecord be ? GetIterator(items, sync).
     23  3. Let values be a new empty List.
     24  4. Let next be true.
     25  5. Repeat, while next is not false
     26    a. Set next to ? IteratorStep(iteratorRecord).
     27    b. If next is not false, then
     28      i. Let nextValue be ? IteratorValue(next).
     29      ii. Append nextValue to the end of the List values.
     30  6. Return values.
     31 
     32  GetIterator ( obj [ , hint [ , method ] ] )
     33 
     34  ...
     35  3. If method is not present, then
     36    a. If hint is async, then
     37      ...
     38    b. Otherwise, set method to ? GetMethod(obj, @@iterator).
     39  4. Let iterator be ? Call(method, obj).
     40  5. If Type(iterator) is not Object, throw a TypeError exception.
     41  6. Let nextMethod be ? GetV(iterator, "next").
     42  ...
     43  8. Return iteratorRecord.
     44 features: [AggregateError, Symbol.iterator]
     45 ---*/
     46 
     47 var case1 = {
     48  get [Symbol.iterator]() {
     49    throw new Test262Error();
     50  }
     51 };
     52 
     53 assert.throws(Test262Error, () => {
     54  var obj = new AggregateError(case1);
     55 }, 'get Symbol.iterator');
     56 
     57 var case2 = {
     58  get [Symbol.iterator]() {
     59    return {};
     60  }
     61 };
     62 
     63 assert.throws(TypeError, () => {
     64  var obj = new AggregateError(case2);
     65 }, 'GetMethod(obj, @@iterator) abrupts from non callable');
     66 
     67 var case3 = {
     68  [Symbol.iterator]() {
     69    throw new Test262Error();
     70  }
     71 };
     72 
     73 assert.throws(Test262Error, () => {
     74  var obj = new AggregateError(case3);
     75 }, 'Abrupt from @@iterator call');
     76 
     77 var case4 = {
     78  [Symbol.iterator]() {
     79    return 'a string';
     80  }
     81 };
     82 
     83 assert.throws(TypeError, () => {
     84  var obj = new AggregateError(case4);
     85 }, '@@iterator call returns a string');
     86 
     87 var case5 = {
     88  [Symbol.iterator]() {
     89    return undefined;
     90  }
     91 };
     92 
     93 assert.throws(TypeError, () => {
     94  var obj = new AggregateError(case5);
     95 }, '@@iterator call returns undefined');
     96 
     97 var case6 = {
     98  [Symbol.iterator]() {
     99    return {
    100      get next() {
    101        throw new Test262Error();
    102      }
    103    }
    104  }
    105 };
    106 
    107 assert.throws(Test262Error, () => {
    108  var obj = new AggregateError(case6);
    109 }, 'GetV(iterator, next) returns abrupt');
    110 
    111 var case7 = {
    112  [Symbol.iterator]() {
    113    return {
    114      get next() {
    115        return {};
    116      }
    117    }
    118  }
    119 };
    120 
    121 assert.throws(TypeError, () => {
    122  var obj = new AggregateError(case7);
    123 }, 'GetV(iterator, next) returns a non callable');
    124 
    125 var case8 = {
    126  [Symbol.iterator]() {
    127    return {
    128      next() {
    129        throw new Test262Error();
    130      }
    131    }
    132  }
    133 };
    134 
    135 assert.throws(Test262Error, () => {
    136  var obj = new AggregateError(case8);
    137 }, 'abrupt from iterator.next()');
    138 
    139 var case9 = {
    140  [Symbol.iterator]() {
    141    return {
    142      next() {
    143        return undefined;
    144      }
    145    }
    146  }
    147 };
    148 
    149 assert.throws(TypeError, () => {
    150  var obj = new AggregateError(case9);
    151 }, 'iterator.next() returns undefined');
    152 
    153 var case10 = {
    154  [Symbol.iterator]() {
    155    return {
    156      next() {
    157        return 'a string';
    158      }
    159    }
    160  }
    161 };
    162 
    163 assert.throws(TypeError, () => {
    164  var obj = new AggregateError(case10);
    165 }, 'iterator.next() returns a string');
    166 
    167 var case11 = {
    168  [Symbol.iterator]() {
    169    return {
    170      next() {
    171        return {
    172          get done() {
    173            throw new Test262Error();
    174          }
    175        };
    176      }
    177    }
    178  }
    179 };
    180 
    181 assert.throws(Test262Error, () => {
    182  var obj = new AggregateError(case11);
    183 }, 'IteratorCompete abrupts getting the done property');
    184 
    185 reportCompare(0, 0);