tor-browser

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

functionnames.js (3359B)


      1 // |jit-test| skip-if: isLcovEnabled()
      2 
      3 /*
      4 * Most of these test cases are adapted from:
      5 * http://johnjbarton.github.com/nonymous/index.html
      6 */
      7 
      8 function assertName(fn, name) {
      9    assertEq(displayName(fn), name)
     10 }
     11 
     12 /* simple names */
     13 var a = function b() {};
     14 function c() {};
     15 assertName(a, 'b');
     16 assertName(c, 'c');
     17 
     18 var a = function(){},
     19    b = function(){};
     20 assertName(a, 'a');
     21 assertName(b, 'b');
     22 
     23 /* nested names */
     24 var main = function() {
     25    function Foo(a) { assertName(a, 'main/foo<') }
     26    var foo = new Foo(function() {});
     27 };
     28 assertName(main, 'main')
     29 main();
     30 
     31 /* duplicated */
     32 var Baz = Bar = function(){}
     33 assertName(Baz, 'Bar');
     34 assertName(Bar, 'Bar');
     35 
     36 /* returned from an immediate function */
     37 var Foo = function (){
     38    assertName(arguments.callee, 'Foo<')
     39    return function(){};
     40 }();
     41 assertName(Foo, 'Foo</<');
     42 
     43 /* various properties and such */
     44 var x = {fox: { bax: function(){} } };
     45 assertName(x.fox.bax, 'bax');
     46 var foo = {foo: {foo: {}}};
     47 foo.foo.foo = function(){};
     48 assertName(foo.foo.foo, 'foo.foo.foo');
     49 var z = {
     50    foz: function() {
     51             var baz = function() {
     52                 var y = {bay: function() {}};
     53                 assertName(y.bay, 'bay');
     54             };
     55             assertName(baz, 'baz');
     56             baz();
     57         }
     58 };
     59 assertName(z.foz, 'foz');
     60 z.foz();
     61 
     62 var outer = function() {
     63    x.fox.bax.nx = function(){};
     64    var w = {fow: { baw: function(){} } };
     65    assertName(x.fox.bax.nx, 'outer/x.fox.bax.nx')
     66    assertName(w.fow.baw, 'baw');
     67 };
     68 assertName(outer, 'outer');
     69 outer();
     70 function Fuz(){};
     71 Fuz.prototype = {
     72  add: function() {}
     73 }
     74 assertName(Fuz.prototype.add, 'add');
     75 
     76 var x = 1;
     77 x = function(){};
     78 assertName(x, 'x');
     79 
     80 var a = {b: {}};
     81 a.b.c = (function() {
     82    assertName(arguments.callee, 'a.b.c<')
     83 }());
     84 
     85 a.b = function() {
     86    function foo(f) { assertName(f, 'a.b/<'); };
     87    return foo(function(){});
     88 }
     89 a.b();
     90 
     91 var bar = 'bar';
     92 a.b[bar] = function(){};
     93 assertName(a.b.bar, 'a.b[bar]');
     94 
     95 a.b = function() {
     96    assertName(arguments.callee, 'a.b<');
     97    return { a: function() {} }
     98 }();
     99 assertName(a.b.a, 'a');
    100 
    101 a = {
    102    b: function(a) {
    103        if (a)
    104            return function() {};
    105        else
    106            return function() {};
    107    }
    108 };
    109 assertName(a.b, 'b');
    110 assertName(a.b(true), 'b/<')
    111 assertName(a.b(false), 'b/<')
    112 
    113 function f(g) {
    114    assertName(g, 'x<');
    115    return g();
    116 }
    117 var x = f(function () { return function() {}; });
    118 assertName(x, 'x</<');
    119 
    120 var a = {'b': function(){}};
    121 assertName(a.b, 'b');
    122 
    123 function g(f) {
    124  assertName(f, '');
    125 }
    126 label: g(function () {});
    127 
    128 var z = [function() {}];
    129 assertName(z[0], 'z<');
    130 
    131 /* fuzz bug from 785089 */
    132 odeURIL:(function(){})
    133 
    134 a = { 1: function () {} };
    135 assertName(a[1], '1');
    136 
    137 a = {
    138  "embedded spaces": function(){},
    139  "dots.look.like.property.references": function(){},
    140  "\"\'quotes\'\"": function(){},
    141  "!@#$%": function(){}
    142 };
    143 assertName(a["embedded spaces"], 'embedded spaces');
    144 assertName(a["dots.look.like.property.references"], 'dots.look.like.property.references');
    145 assertName(a["\"\'quotes\'\""], '"\'quotes\'"');
    146 assertName(a["!@#$%"], '!@#$%');
    147 
    148 a.b = {};
    149 a.b.c = {};
    150 a.b["c"]["d e"] = { f: { 1: { "g": { "h i": function() {} } } } };
    151 assertName(a.b.c["d e"].f[1].g["h i"], 'h i');
    152 
    153 this.m = function () {};
    154 assertName(m, "this.m");
    155 
    156 function N() {
    157  this.o = function () {}
    158 }
    159 let n = new N()
    160 assertName(n.o, "N/this.o");