2
* Most of these test cases are adapted from:
3
* http://johnjbarton.github.com/nonymous/index.html
6
function assertName(fn, name) {
7
assertEq(displayName(fn), name)
11
var a = function b() {};
22
var main = function() {
23
function Foo(a) { assertName(a, 'main/foo<') }
24
var foo = new Foo(function() {});
26
assertName(main, 'main')
30
var Baz = Bar = function(){}
31
assertName(Baz, 'Bar');
32
assertName(Bar, 'Bar');
34
/* returned from an immediate function */
35
var Foo = function (){
36
assertName(arguments.callee, 'Foo<')
39
assertName(Foo, 'Foo');
41
/* various properties and such */
42
var x = {fox: { bax: function(){} } };
43
assertName(x.fox.bax, 'x.fox.bax');
44
var foo = {foo: {foo: {}}};
45
foo.foo.foo = function(){};
46
assertName(foo.foo.foo, 'foo.foo.foo');
49
var baz = function() {
50
var y = {bay: function() {}};
51
assertName(y.bay, 'z.foz/baz/y.bay');
53
assertName(baz, 'z.foz/baz');
57
assertName(z.foz, 'z.foz');
60
var outer = function() {
61
x.fox.bax.nx = function(){};
62
var w = {fow: { baw: function(){} } };
63
assertName(x.fox.bax.nx, 'outer/x.fox.bax.nx')
64
assertName(w.fow.baw, 'outer/w.fow.baw');
66
assertName(outer, 'outer');
72
assertName(Fuz.prototype.add, 'Fuz.add');
80
assertName(arguments.callee, 'a.b.c<')
84
function foo(f) { assertName(f, 'a.b/<'); };
85
return foo(function(){});
90
a.b[bar] = function(){};
91
assertName(a.b.bar, 'a.b[bar]');
94
assertName(arguments.callee, 'a.b<');
95
return { a: function() {} }
97
assertName(a.b.a, 'a.b.a');
102
return function() {};
104
return function() {};
107
assertName(a.b, 'a.b');
108
assertName(a.b(true), 'a.b/<')
109
assertName(a.b(false), 'a.b/<')
115
var x = f(function () { return function() {}; });
116
assertName(x, 'x</<');
118
var a = {'b': function(){}};
119
assertName(a.b, 'a.b');
124
label: g(function () {});
126
var z = [function() {}];
127
assertName(z[0], 'z<');
129
/* fuzz bug from 785089 */
130
odeURIL:(function(){})