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");