js/src/tests/ecma_6/Array/find_findindex.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 //-----------------------------------------------------------------------------
     7 var BUGNUMBER = 885553;
     8 var summary = 'Array.prototype.find and Array.prototype.findIndex';
    10 print(BUGNUMBER + ": " + summary);
    12 /**************
    13  * BEGIN TEST *
    14  **************/
    16 function isString(v, index, array)
    17 {
    18   assertEq(array[index], v);
    19   return typeof v == 'string';
    20 }
    22 function dumpError(e)
    23 {
    24   var s = e.name + ': ' + e.message +
    25     ' File: ' + e.fileName +
    26     ', Line: ' + e.lineNumber +
    27     ', Stack: ' + e.stack;
    28   return s;
    29 }
    31 var expect;
    32 var actual;
    33 var obj;
    35 var strings = ['hello', 'Array', 'WORLD'];
    36 var mixed   = [0, '1', 2];
    37 var sparsestrings = new Array();
    38 sparsestrings[2] = 'sparse';
    39 var arraylike = {0:0, 1:'string', 2:2, length:3};
    40 // array for which JSObject::isIndexed() holds.
    41 var indexedArray = [];
    42 Object.defineProperty(indexedArray, 42, { get: function() { return 42; } });
    43 Object.defineProperty(indexedArray, 142, { get: function() { return 'string'; } });
    45 // find and findIndex have 1 required argument
    47 expect = 1;
    48 actual = Array.prototype.find.length;
    49 reportCompare(expect, actual, 'Array.prototype.find.length == 1');
    50 actual = Array.prototype.findIndex.length;
    51 reportCompare(expect, actual, 'Array.prototype.findIndex.length == 1');
    53 // throw TypeError if no predicate specified
    54 expect = 'TypeError';
    55 try
    56 {
    57   strings.find();
    58   actual = 'no error';
    59 }
    60 catch(e)
    61 {
    62   actual = e.name;
    63 }
    64 reportCompare(expect, actual, 'Array.find(undefined) throws TypeError');
    65 try
    66 {
    67   strings.findIndex();
    68   actual = 'no error';
    69 }
    70 catch(e)
    71 {
    72   actual = e.name;
    73 }
    74 reportCompare(expect, actual, 'Array.findIndex(undefined) throws TypeError');
    76 // Length gets treated as integer, not uint32
    77 obj = { length: -4294967295, 0: 42 };
    78 expected = undefined;
    79 actual = Array.prototype.find.call(obj, () => true);
    80 reportCompare(expected, actual, 'find correctly treats "length" as an integer');
    81 expected = -1
    82 actual = Array.prototype.findIndex.call(obj, () => true);
    83 reportCompare(expected, actual, 'findIndex correctly treats "length" as an integer');
    85 // test find and findIndex results
    86 try
    87 {
    88   expect = 'hello';
    89   actual = strings.find(isString);
    90 }
    91 catch(e)
    92 {
    93   actual = dumpError(e);
    94 }
    95 reportCompare(expect, actual, 'strings: find finds first string element');
    97 try
    98 {
    99   expect = 0;
   100   actual = strings.findIndex(isString);
   101 }
   102 catch(e)
   103 {
   104   actual = dumpError(e);
   105 }
   106 reportCompare(expect, actual, 'strings: findIndex finds first string element');
   108 try
   109 {
   110   expect = '1';
   111   actual = mixed.find(isString);
   112 }
   113 catch(e)
   114 {
   115   actual = dumpError(e);
   116 }
   117 reportCompare(expect, actual, 'mixed: find finds first string element');
   119 try
   120 {
   121   expect = 1;
   122   actual = mixed.findIndex(isString);
   123 }
   124 catch(e)
   125 {
   126   actual = dumpError(e);
   127 }
   128 reportCompare(expect, actual, 'mixed: findIndex finds first string element');
   130 try
   131 {
   132   expect = 'sparse';
   133   actual = sparsestrings.find(isString);
   134 }
   135 catch(e)
   136 {
   137   actual = dumpError(e);
   138 }
   139 reportCompare(expect, actual, 'sparsestrings: find finds first string element');
   141 try
   142 {
   143   expect = 2;
   144   actual = sparsestrings.findIndex(isString);
   145 }
   146 catch(e)
   147 {
   148   actual = dumpError(e);
   149 }
   150 reportCompare(expect, actual, 'sparsestrings: findIndex finds first string element');
   152 try
   153 {
   154   expect = 'string';
   155   actual = [].find.call(arraylike, isString);
   156 }
   157 catch(e)
   158 {
   159   actual = dumpError(e);
   160 }
   161 reportCompare(expect, actual, 'arraylike: find finds first string element');
   163 try
   164 {
   165   expect = 1;
   166   actual = [].findIndex.call(arraylike, isString);
   167 }
   168 catch(e)
   169 {
   170   actual = dumpError(e);
   171 }
   172 reportCompare(expect, actual, 'arraylike: findIndex finds first string element');
   174 try
   175 {
   176   expect = 1;
   177   actual = 0;
   178   Array.prototype.find.call({get 0(){ actual++ }, length: 1}, ()=>true);
   179 }
   180 catch(e)
   181 {
   182   actual = dumpError(e);
   183 }
   184 reportCompare(expect, actual, 'arraylike with getter: getter only called once');
   186 try
   187 {
   188   expect = 'string';
   189   actual = [].find.call(indexedArray, isString);
   190 }
   191 catch(e)
   192 {
   193   actual = dumpError(e);
   194 }
   195 reportCompare(expect, actual, 'indexedArray: find finds first string element');
   197 try
   198 {
   199   expect = 142;
   200   actual = [].findIndex.call(indexedArray, isString);
   201 }
   202 catch(e)
   203 {
   204   actual = dumpError(e);
   205 }
   206 reportCompare(expect, actual, 'indexedArray: findIndex finds first string element');

mercurial