tor-browser

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

regress-90596-001.js (5196B)


      1 // |reftest| skip-if(!Object.prototype.toSource)
      2 
      3 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      4 /* This Source Code Form is subject to the terms of the Mozilla Public
      5 * License, v. 2.0. If a copy of the MPL was not distributed with this
      6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      7 
      8 /*
      9 * Date: 28 August 2001
     10 *
     11 * SUMMARY: A [DontEnum] prop, if overridden, should appear in toSource().
     12 * See http://bugzilla.mozilla.org/show_bug.cgi?id=90596
     13 *
     14 * NOTE: some inefficiencies in the test are made for the sake of readability.
     15 * Sorting properties alphabetically is done for definiteness in comparisons.
     16 */
     17 //-----------------------------------------------------------------------------
     18 var UBound = 0;
     19 var BUGNUMBER = 90596;
     20 var summary = 'A [DontEnum] prop, if overridden, should appear in toSource()';
     21 var cnCOMMA = ',';
     22 var cnLBRACE = '{';
     23 var cnRBRACE = '}';
     24 var cnLPAREN = '(';
     25 var cnRPAREN = ')';
     26 var status = '';
     27 var statusitems = [];
     28 var actual = '';
     29 var actualvalues = [];
     30 var expect= '';
     31 var expectedvalues = [];
     32 var obj = {};
     33 
     34 
     35 status = inSection(1);
     36 obj = {toString:9};
     37 actual = obj.toSource();
     38 expect = '({toString:9})';
     39 addThis();
     40 
     41 status = inSection(2);
     42 obj = {hasOwnProperty:"Hi"};
     43 actual = obj.toSource();
     44 expect = '({hasOwnProperty:"Hi"})';
     45 addThis();
     46 
     47 status = inSection(3);
     48 obj = {toString:9, hasOwnProperty:"Hi"};
     49 actual = obj.toSource();
     50 expect = '({toString:9, hasOwnProperty:"Hi"})';
     51 addThis();
     52 
     53 status = inSection(4);
     54 obj = {prop1:1, toString:9, hasOwnProperty:"Hi"};
     55 actual = obj.toSource();
     56 expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})';
     57 addThis();
     58 
     59 
     60 // TRY THE SAME THING IN EVAL CODE
     61 var s = '';
     62 
     63 status = inSection(5);
     64 s = 'obj = {toString:9}';
     65 eval(s);
     66 actual = obj.toSource();
     67 expect = '({toString:9})';
     68 addThis();
     69 
     70 status = inSection(6);
     71 s = 'obj = {hasOwnProperty:"Hi"}';
     72 eval(s);
     73 actual = obj.toSource();
     74 expect = '({hasOwnProperty:"Hi"})';
     75 addThis();
     76 
     77 status = inSection(7);
     78 s = 'obj = {toString:9, hasOwnProperty:"Hi"}';
     79 eval(s);
     80 actual = obj.toSource();
     81 expect = '({toString:9, hasOwnProperty:"Hi"})';
     82 addThis();
     83 
     84 status = inSection(8);
     85 s = 'obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}';
     86 eval(s);
     87 actual = obj.toSource();
     88 expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})';
     89 addThis();
     90 
     91 
     92 // TRY THE SAME THING IN FUNCTION CODE
     93 function A()
     94 {
     95  status = inSection(9);
     96  var s = 'obj = {toString:9}';
     97  eval(s);
     98  actual = obj.toSource();
     99  expect = '({toString:9})';
    100  addThis();
    101 }
    102 A();
    103 
    104 function B()
    105 {
    106  status = inSection(10);
    107  var s = 'obj = {hasOwnProperty:"Hi"}';
    108  eval(s);
    109  actual = obj.toSource();
    110  expect = '({hasOwnProperty:"Hi"})';
    111  addThis();
    112 }
    113 B();
    114 
    115 function C()
    116 {
    117  status = inSection(11);
    118  var s = 'obj = {toString:9, hasOwnProperty:"Hi"}';
    119  eval(s);
    120  actual = obj.toSource();
    121  expect = '({toString:9, hasOwnProperty:"Hi"})';
    122  addThis();
    123 }
    124 C();
    125 
    126 function D()
    127 {
    128  status = inSection(12);
    129  var s = 'obj = {prop1:1, toString:9, hasOwnProperty:"Hi"}';
    130  eval(s);
    131  actual = obj.toSource();
    132  expect = '({prop1:1, toString:9, hasOwnProperty:"Hi"})';
    133  addThis();
    134 }
    135 D();
    136 
    137 
    138 
    139 //-----------------------------------------------------------------------------
    140 test();
    141 //-----------------------------------------------------------------------------
    142 
    143 
    144 
    145 /*
    146 * Sort properties alphabetically -
    147 */
    148 function addThis()
    149 {
    150  statusitems[UBound] = status;
    151  actualvalues[UBound] = sortThis(actual);
    152  expectedvalues[UBound] = sortThis(expect);
    153  UBound++;
    154 }
    155 
    156 
    157 /*
    158 * Takes string of form '({"c", "b", "a", 2})' and returns '({"a","b","c",2})'
    159 */
    160 function sortThis(sList)
    161 {
    162  sList = compactThis(sList);
    163  sList = stripParens(sList);
    164  sList = stripBraces(sList);
    165  var arr = sList.split(cnCOMMA);
    166  arr = arr.sort();
    167  var ret = String(arr);
    168  ret = addBraces(ret);
    169  ret = addParens(ret);
    170  return ret;
    171 }
    172 
    173 
    174 /*
    175 * Strips out any whitespace from the text -
    176 */
    177 function compactThis(text)
    178 {
    179  var charCode = 0;
    180  var ret = '';
    181 
    182  for (var i=0; i<text.length; i++)
    183  {
    184    charCode = text.charCodeAt(i);
    185 
    186    if (!isWhiteSpace(charCode))
    187      ret += text.charAt(i);
    188  }
    189 
    190  return ret;
    191 }
    192 
    193 
    194 function isWhiteSpace(charCode)
    195 {
    196  switch (charCode)
    197  {
    198  case (0x0009):
    199  case (0x000B):
    200  case (0x000C):
    201  case (0x0020):
    202  case (0x000A):  // '\n'
    203  case (0x000D):  // '\r'
    204    return true;
    205    break;
    206 
    207  default:
    208    return false;
    209  }
    210 }
    211 
    212 
    213 /*
    214 * strips off parens at beginning and end of text -
    215 */
    216 function stripParens(text)
    217 {
    218  // remember to escape the parens...
    219  var arr = text.match(/^\((.*)\)$/);
    220 
    221  // defend against a null match...
    222  if (arr != null && arr[1] != null)
    223    return arr[1];
    224  return text;
    225 }
    226 
    227 
    228 /*
    229 * strips off braces at beginning and end of text -
    230 */
    231 function stripBraces(text)
    232 {
    233  // remember to escape the braces...
    234  var arr = text.match(/^\{(.*)\}$/);
    235 
    236  // defend against a null match...
    237  if (arr != null && arr[1] != null)
    238    return arr[1];
    239  return text;
    240 }
    241 
    242 
    243 function addBraces(text)
    244 {
    245  return cnLBRACE + text + cnRBRACE;
    246 }
    247 
    248 
    249 function addParens(text)
    250 {
    251  return cnLPAREN + text + cnRPAREN;
    252 }
    253 
    254 
    255 function test()
    256 {
    257  printBugNumber(BUGNUMBER);
    258  printStatus (summary);
    259 
    260  for (var i=0; i<UBound; i++)
    261  {
    262    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
    263  }
    264 }