initial import
[vuplus_webkit] / Source / JavaScriptCore / tests / mozilla / js1_5 / Scope / scope-003.js
1 /*
2 * The contents of this file are subject to the Netscape Public
3 * License Version 1.1 (the "License"); you may not use this file
4 * except in compliance with the License. You may obtain a copy of
5 * the License at http://www.mozilla.org/NPL/
6 *
7 * Software distributed under the License is distributed on an
8 * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed
9 * or implied. See the License for the specific language governing
10 * rights and limitations under the License.
11 *
12 * The Original Code is mozilla.org code.
13 *
14 * The Initial Developer of the Original Code is Netscape
15 * Communications Corporation.  Portions created by Netscape are
16 * Copyright (C) 1998 Netscape Communications Corporation.
17 * All Rights Reserved.
18 *
19 * Contributor(s): coliver@mminternet.com, pschwartau@netscape.com
20 * Date: 2001-07-03
21 *
22 * SUMMARY:  Testing scope with nested functions
23 *
24 * From correspondence with Christopher Oliver <coliver@mminternet.com>:
25 *
26 * > Running this test with Rhino produces the following exception:
27 * >
28 * > uncaught JavaScript exception: undefined: Cannot find default value for
29 * > object. (line 3)
30 * >
31 * > This is due to a bug in org.mozilla.javascript.NativeCall which doesn't
32 * > implement toString or valueOf or override getDefaultValue.
33 * > However, even after I hacked in an implementation of getDefaultValue in
34 * > NativeCall, Rhino still produces a different result then SpiderMonkey:
35 * >
36 * > [object Call]
37 * > [object Object]
38 * > [object Call]
39 *
40 * Note the results should be:
41 *
42 *   [object global]
43 *   [object Object]
44 *   [object global]
45 *
46 * This is what we are checking for in this testcase -
47 */
48 //-----------------------------------------------------------------------------
49 var UBound = 0;
50 var bug = '(none)';
51 var summary = 'Testing scope with nested functions';
52 var statprefix = 'Section ';
53 var statsuffix = ' of test -';
54 var self = this; // capture a reference to the global object;
55 var cnGlobal = self.toString();
56 var cnObject = (new Object).toString();
57 var statusitems = [];
58 var actualvalues = [];
59 var expectedvalues = [];
60
61
62 function a()
63 {
64   function b()
65   {
66     capture(this.toString());
67   }
68
69   this.c = function()
70   {
71     capture(this.toString());
72     b();
73   }
74
75   b();
76 }
77
78
79 var obj = new a();  // captures actualvalues[0]
80 obj.c();            // captures actualvalues[1], actualvalues[2]
81
82
83 // The values we expect - see introduction above -
84 expectedvalues[0] = cnGlobal;
85 expectedvalues[1] = cnObject;
86 expectedvalues[2] = cnGlobal;
87
88
89
90 //-----------------------------------------------------------------------------
91 test();
92 //-----------------------------------------------------------------------------
93
94
95
96 function capture(val)
97 {
98   actualvalues[UBound] = val;
99   statusitems[UBound] = getStatus(UBound);
100   UBound++;
101 }
102
103
104 function test()
105 {
106   enterFunc ('test');
107   printBugNumber (bug);
108   printStatus (summary);
109  
110   for (var i=0; i<UBound; i++)
111   {
112     reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
113   }
114
115   exitFunc ('test');
116 }
117
118
119 function getStatus(i)
120 {
121   return statprefix + i + statsuffix;
122 }