js/src/tests/ecma_5/Number/defaultvalue.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2  * Any copyright is dedicated to the Public Domain.
     3  * http://creativecommonn.org/licenses/publicdomain/
     4  */
     6 var BUGNUMBER = 645464;
     7 var summary =
     8   "[[DefaultValue]] behavior wrong for Number with overridden valueOf/toString";
    10 print(BUGNUMBER + ": " + summary);
    12 /**************
    13  * BEGIN TEST *
    14  **************/
    17 // equality
    19 var n = new Number();
    20 assertEq(n == 0, true);
    22 var n2 = new Number();
    23 n2.valueOf = function() { return 17; };
    24 assertEq(n2 == 17, true);
    26 var n3 = new Number();
    27 n3.toString = function() { return 42; };
    28 assertEq(n3 == 0, true);
    30 function testEquality()
    31 {
    32   var n = new Number();
    33   assertEq(n == 0, true);
    35   var n2 = new Number();
    36   n2.valueOf = function() { return 17; };
    37   assertEq(n2 == 17, true);
    39   var n3 = new Number();
    40   n3.toString = function() { return 42; };
    41   assertEq(n3 == 0, true);
    42 }
    43 testEquality();
    46 // addition of Number to number
    48 var n = new Number();
    49 assertEq(n + 5, 5);
    51 var n2 = new Number();
    52 n2.toString = function() { return 9; };
    53 assertEq(n2 + 3, 3);
    55 var n3 = new Number();
    56 n3.valueOf = function() { return 17; };
    57 assertEq(n3 + 5, 22);
    59 function testNumberAddition()
    60 {
    61   var n = new Number();
    62   assertEq(n + 5, 5);
    64   var n2 = new Number();
    65   n2.toString = function() { return 9; };
    66   assertEq(n2 + 3, 3);
    68   var n3 = new Number();
    69   n3.valueOf = function() { return 17; };
    70   assertEq(n3 + 5, 22);
    71 }
    72 testNumberAddition();
    75 // addition of Number to Number
    77 var n = new Number();
    78 assertEq(n + n, 0);
    80 var n2 = new Number();
    81 n2.toString = function() { return 5; };
    82 assertEq(n2 + n2, 0);
    84 var n3 = new Number();
    85 n3.valueOf = function() { return 8.5; };
    86 assertEq(n3 + n3, 17);
    88 function testNonNumberAddition()
    89 {
    90   var n = new Number();
    91   assertEq(n + n, 0);
    93   var n2 = new Number();
    94   n2.toString = function() { return 5; };
    95   assertEq(n2 + n2, 0);
    97   var n3 = new Number();
    98   n3.valueOf = function() { return 8.5; };
    99   assertEq(n3 + n3, 17);
   100 }
   101 testNonNumberAddition();
   104 // Number as bracketed property name
   106 var obj = { 0: 17, 8: 42, 9: 8675309 };
   108 var n = new Number();
   109 assertEq(obj[n], 17);
   111 var n2 = new Number();
   112 n2.valueOf = function() { return 8; }
   113 assertEq(obj[n2], 17);
   115 var n3 = new Number();
   116 n3.toString = function() { return 9; };
   117 assertEq(obj[n3], 8675309);
   119 function testPropertyNameToNumber()
   120 {
   121   var obj = { 0: 17, 8: 42, 9: 8675309 };
   123   var n = new Number();
   124   assertEq(obj[n], 17);
   126   var n2 = new Number();
   127   n2.valueOf = function() { return 8; }
   128   assertEq(obj[n2], 17);
   130   var n3 = new Number();
   131   n3.toString = function() { return 9; };
   132   assertEq(obj[n3], 8675309);
   133 }
   134 testPropertyNameToNumber();
   137 // Number as property name with |in| operator
   139 var n = new Number();
   140 assertEq(n in { 0: 5 }, true);
   142 var n2 = new Number();
   143 n2.toString = function() { return "baz"; };
   144 assertEq(n2 in { baz: 42 }, true);
   146 var n3 = new Number();
   147 n3.valueOf = function() { return "quux"; };
   148 assertEq(n3 in { 0: 17 }, true);
   150 function testInOperatorName()
   151 {
   152   var n = new Number();
   153   assertEq(n in { 0: 5 }, true);
   155   var n2 = new Number();
   156   n2.toString = function() { return "baz"; };
   157   assertEq(n2 in { baz: 42 }, true);
   159   var n3 = new Number();
   160   n3.valueOf = function() { return "quux"; };
   161   assertEq(n3 in { 0: 17 }, true);
   162 }
   163 testInOperatorName();
   165 /******************************************************************************/
   167 if (typeof reportCompare === "function")
   168   reportCompare(true, true);
   170 print("All tests passed!");

mercurial