Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /*
2 * Most of these test cases are adapted from:
3 * http://johnjbarton.github.com/nonymous/index.html
4 */
6 function assertName(fn, name) {
7 assertEq(displayName(fn), name)
8 }
10 /* simple names */
11 var a = function b() {};
12 function c() {};
13 assertName(a, 'b');
14 assertName(c, 'c');
16 var a = function(){},
17 b = function(){};
18 assertName(a, 'a');
19 assertName(b, 'b');
21 /* nested names */
22 var main = function() {
23 function Foo(a) { assertName(a, 'main/foo<') }
24 var foo = new Foo(function() {});
25 };
26 assertName(main, 'main')
27 main();
29 /* duplicated */
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<')
37 return function(){};
38 }();
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');
47 var z = {
48 foz: function() {
49 var baz = function() {
50 var y = {bay: function() {}};
51 assertName(y.bay, 'z.foz/baz/y.bay');
52 };
53 assertName(baz, 'z.foz/baz');
54 baz();
55 }
56 };
57 assertName(z.foz, 'z.foz');
58 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');
65 };
66 assertName(outer, 'outer');
67 outer();
68 function Fuz(){};
69 Fuz.prototype = {
70 add: function() {}
71 }
72 assertName(Fuz.prototype.add, 'Fuz.prototype.add');
74 var x = 1;
75 x = function(){};
76 assertName(x, 'x');
78 var a = {b: {}};
79 a.b.c = (function() {
80 assertName(arguments.callee, 'a.b.c<')
81 }());
83 a.b = function() {
84 function foo(f) { assertName(f, 'a.b/<'); };
85 return foo(function(){});
86 }
87 a.b();
89 var bar = 'bar';
90 a.b[bar] = function(){};
91 assertName(a.b.bar, 'a.b[bar]');
93 a.b = function() {
94 assertName(arguments.callee, 'a.b<');
95 return { a: function() {} }
96 }();
97 assertName(a.b.a, 'a.b</<.a');
99 a = {
100 b: function(a) {
101 if (a)
102 return function() {};
103 else
104 return function() {};
105 }
106 };
107 assertName(a.b, 'a.b');
108 assertName(a.b(true), 'a.b/<')
109 assertName(a.b(false), 'a.b/<')
111 function f(g) {
112 assertName(g, 'x<');
113 return g();
114 }
115 var x = f(function () { return function() {}; });
116 assertName(x, 'x</<');
118 var a = {'b': function(){}};
119 assertName(a.b, 'a.b');
121 function g(f) {
122 assertName(f, '');
123 }
124 label: g(function () {});
126 var z = [function() {}];
127 assertName(z[0], 'z<');
129 /* fuzz bug from 785089 */
130 odeURIL:(function(){})
132 a = { 1: function () {} };
133 assertName(a[1], 'a[1]');
135 a = {
136 "embedded spaces": function(){},
137 "dots.look.like.property.references": function(){},
138 "\"\'quotes\'\"": function(){},
139 "!@#$%": function(){}
140 };
141 assertName(a["embedded spaces"], 'a["embedded spaces"]');
142 assertName(a["dots.look.like.property.references"], 'a["dots.look.like.property.references"]');
143 assertName(a["\"\'quotes\'\""], 'a["\\\"\'quotes\'\\\""]');
144 assertName(a["!@#$%"], 'a["!@#$%"]');
146 a.b = {};
147 a.b.c = {};
148 a.b["c"]["d e"] = { f: { 1: { "g": { "h i": function() {} } } } };
149 assertName(a.b.c["d e"].f[1].g["h i"], 'a.b.c["d e"].f[1].g["h i"]');
151 this.m = function () {};
152 assertName(m, "this.m");
154 function N() {
155 this.o = function () {}
156 }
157 let n = new N()
158 assertName(n.o, "N/this.o");