js/src/jit-test/tests/basic/functionnames.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/jit-test/tests/basic/functionnames.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,158 @@
     1.4 +/*
     1.5 + * Most of these test cases are adapted from:
     1.6 + * http://johnjbarton.github.com/nonymous/index.html
     1.7 + */
     1.8 +
     1.9 +function assertName(fn, name) {
    1.10 +    assertEq(displayName(fn), name)
    1.11 +}
    1.12 +
    1.13 +/* simple names */
    1.14 +var a = function b() {};
    1.15 +function c() {};
    1.16 +assertName(a, 'b');
    1.17 +assertName(c, 'c');
    1.18 +
    1.19 +var a = function(){},
    1.20 +    b = function(){};
    1.21 +assertName(a, 'a');
    1.22 +assertName(b, 'b');
    1.23 +
    1.24 +/* nested names */
    1.25 +var main = function() {
    1.26 +    function Foo(a) { assertName(a, 'main/foo<') }
    1.27 +    var foo = new Foo(function() {});
    1.28 +};
    1.29 +assertName(main, 'main')
    1.30 +main();
    1.31 +
    1.32 +/* duplicated */
    1.33 +var Baz = Bar = function(){}
    1.34 +assertName(Baz, 'Bar');
    1.35 +assertName(Bar, 'Bar');
    1.36 +
    1.37 +/* returned from an immediate function */
    1.38 +var Foo = function (){
    1.39 +    assertName(arguments.callee, 'Foo<')
    1.40 +    return function(){};
    1.41 +}();
    1.42 +assertName(Foo, 'Foo</<');
    1.43 +
    1.44 +/* various properties and such */
    1.45 +var x = {fox: { bax: function(){} } };
    1.46 +assertName(x.fox.bax, 'x.fox.bax');
    1.47 +var foo = {foo: {foo: {}}};
    1.48 +foo.foo.foo = function(){};
    1.49 +assertName(foo.foo.foo, 'foo.foo.foo');
    1.50 +var z = {
    1.51 +    foz: function() {
    1.52 +             var baz = function() {
    1.53 +                 var y = {bay: function() {}};
    1.54 +                 assertName(y.bay, 'z.foz/baz/y.bay');
    1.55 +             };
    1.56 +             assertName(baz, 'z.foz/baz');
    1.57 +             baz();
    1.58 +         }
    1.59 +};
    1.60 +assertName(z.foz, 'z.foz');
    1.61 +z.foz();
    1.62 +
    1.63 +var outer = function() {
    1.64 +    x.fox.bax.nx = function(){};
    1.65 +    var w = {fow: { baw: function(){} } };
    1.66 +    assertName(x.fox.bax.nx, 'outer/x.fox.bax.nx')
    1.67 +    assertName(w.fow.baw, 'outer/w.fow.baw');
    1.68 +};
    1.69 +assertName(outer, 'outer');
    1.70 +outer();
    1.71 +function Fuz(){};
    1.72 +Fuz.prototype = {
    1.73 +  add: function() {}
    1.74 +}
    1.75 +assertName(Fuz.prototype.add, 'Fuz.prototype.add');
    1.76 +
    1.77 +var x = 1;
    1.78 +x = function(){};
    1.79 +assertName(x, 'x');
    1.80 +
    1.81 +var a = {b: {}};
    1.82 +a.b.c = (function() {
    1.83 +    assertName(arguments.callee, 'a.b.c<')
    1.84 +}());
    1.85 +
    1.86 +a.b = function() {
    1.87 +    function foo(f) { assertName(f, 'a.b/<'); };
    1.88 +    return foo(function(){});
    1.89 +}
    1.90 +a.b();
    1.91 +
    1.92 +var bar = 'bar';
    1.93 +a.b[bar] = function(){};
    1.94 +assertName(a.b.bar, 'a.b[bar]');
    1.95 +
    1.96 +a.b = function() {
    1.97 +    assertName(arguments.callee, 'a.b<');
    1.98 +    return { a: function() {} }
    1.99 +}();
   1.100 +assertName(a.b.a, 'a.b</<.a');
   1.101 +
   1.102 +a = {
   1.103 +    b: function(a) {
   1.104 +        if (a)
   1.105 +            return function() {};
   1.106 +        else
   1.107 +            return function() {};
   1.108 +    }
   1.109 +};
   1.110 +assertName(a.b, 'a.b');
   1.111 +assertName(a.b(true), 'a.b/<')
   1.112 +assertName(a.b(false), 'a.b/<')
   1.113 +
   1.114 +function f(g) {
   1.115 +    assertName(g, 'x<');
   1.116 +    return g();
   1.117 +}
   1.118 +var x = f(function () { return function() {}; });
   1.119 +assertName(x, 'x</<');
   1.120 +
   1.121 +var a = {'b': function(){}};
   1.122 +assertName(a.b, 'a.b');
   1.123 +
   1.124 +function g(f) {
   1.125 +  assertName(f, '');
   1.126 +}
   1.127 +label: g(function () {});
   1.128 +
   1.129 +var z = [function() {}];
   1.130 +assertName(z[0], 'z<');
   1.131 +
   1.132 +/* fuzz bug from 785089 */
   1.133 +odeURIL:(function(){})
   1.134 +
   1.135 +a = { 1: function () {} };
   1.136 +assertName(a[1], 'a[1]');
   1.137 +
   1.138 +a = {
   1.139 +  "embedded spaces": function(){},
   1.140 +  "dots.look.like.property.references": function(){},
   1.141 +  "\"\'quotes\'\"": function(){},
   1.142 +  "!@#$%": function(){}
   1.143 +};
   1.144 +assertName(a["embedded spaces"], 'a["embedded spaces"]');
   1.145 +assertName(a["dots.look.like.property.references"], 'a["dots.look.like.property.references"]');
   1.146 +assertName(a["\"\'quotes\'\""], 'a["\\\"\'quotes\'\\\""]');
   1.147 +assertName(a["!@#$%"], 'a["!@#$%"]');
   1.148 +
   1.149 +a.b = {};
   1.150 +a.b.c = {};
   1.151 +a.b["c"]["d e"] = { f: { 1: { "g": { "h i": function() {} } } } };
   1.152 +assertName(a.b.c["d e"].f[1].g["h i"], 'a.b.c["d e"].f[1].g["h i"]');
   1.153 +
   1.154 +this.m = function () {};
   1.155 +assertName(m, "this.m");
   1.156 +
   1.157 +function N() {
   1.158 +  this.o = function () {}
   1.159 +}
   1.160 +let n = new N()
   1.161 +assertName(n.o, "N/this.o");

mercurial