michael@0: /* michael@0: * Most of these test cases are adapted from: michael@0: * http://johnjbarton.github.com/nonymous/index.html michael@0: */ michael@0: michael@0: function assertName(fn, name) { michael@0: assertEq(displayName(fn), name) michael@0: } michael@0: michael@0: /* simple names */ michael@0: var a = function b() {}; michael@0: function c() {}; michael@0: assertName(a, 'b'); michael@0: assertName(c, 'c'); michael@0: michael@0: var a = function(){}, michael@0: b = function(){}; michael@0: assertName(a, 'a'); michael@0: assertName(b, 'b'); michael@0: michael@0: /* nested names */ michael@0: var main = function() { michael@0: function Foo(a) { assertName(a, 'main/foo<') } michael@0: var foo = new Foo(function() {}); michael@0: }; michael@0: assertName(main, 'main') michael@0: main(); michael@0: michael@0: /* duplicated */ michael@0: var Baz = Bar = function(){} michael@0: assertName(Baz, 'Bar'); michael@0: assertName(Bar, 'Bar'); michael@0: michael@0: /* returned from an immediate function */ michael@0: var Foo = function (){ michael@0: assertName(arguments.callee, 'Foo<') michael@0: return function(){}; michael@0: }(); michael@0: assertName(Foo, 'Foo