Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Side by Side Diff: test/mjsunit/bugs/harmony/debug-blockscopes.js

Issue 2566093002: [debug-wrapper] migrate some scope related tests (Closed)
Patch Set: address comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/debugger/test-api.js ('k') | test/mjsunit/debug-changebreakpoint.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 // Flags: --expose-debug-as debug
29 // The functions used for testing backtraces. They are at the top to make the
30 // testing of source line/column easier.
31
32
33 // Get the Debug object exposed from the debug context global object.
34 Debug = debug.Debug;
35
36 var test_name;
37 var listener_delegate;
38 var listener_called;
39 var exception;
40 var begin_test_count = 0;
41 var end_test_count = 0;
42 var break_count = 0;
43
44
45 // Debug event listener which delegates.
46 function listener(event, exec_state, event_data, data) {
47 try {
48 if (event == Debug.DebugEvent.Break) {
49 break_count++;
50 listener_called = true;
51 listener_delegate(exec_state);
52 }
53 } catch (e) {
54 exception = e;
55 print(e + e.stack);
56 }
57 }
58
59 // Add the debug event listener.
60 Debug.setListener(listener);
61
62
63 // Initialize for a new test.
64 function BeginTest(name) {
65 test_name = name;
66 listener_delegate = null;
67 listener_called = false;
68 exception = null;
69 begin_test_count++;
70 }
71
72
73 // Check result of a test.
74 function EndTest() {
75 assertTrue(listener_called, "listerner not called for " + test_name);
76 assertNull(exception, test_name);
77 end_test_count++;
78 }
79
80
81 // Check that the scope chain contains the expected types of scopes.
82 function CheckScopeChain(scopes, exec_state) {
83 assertEquals(scopes.length, exec_state.frame().scopeCount());
84 for (var i = 0; i < scopes.length; i++) {
85 var scope = exec_state.frame().scope(i);
86 assertTrue(scope.isScope());
87 assertEquals(scopes[i], scope.scopeType());
88
89 // Check the global object when hitting the global scope.
90 if (scopes[i] == debug.ScopeType.Global) {
91 // Objects don't have same class (one is "global", other is "Object",
92 // so just check the properties directly.
93 assertPropertiesEqual(this, scope.scopeObject().value());
94 }
95 }
96 }
97
98 // Check that the content of the scope is as expected. For functions just check
99 // that there is a function.
100 function CheckScopeContent(content, number, exec_state) {
101 var scope = exec_state.frame().scope(number);
102 var count = 0;
103 for (var p in content) {
104 var property_mirror = scope.scopeObject().property(p);
105 if (property_mirror.isUndefined()) {
106 print('property ' + p + ' not found in scope');
107 }
108 assertFalse(property_mirror.isUndefined(),
109 'property ' + p + ' not found in scope');
110 if (typeof(content[p]) === 'function') {
111 assertTrue(property_mirror.value().isFunction());
112 } else {
113 assertEquals(content[p], property_mirror.value().value(),
114 'property ' + p + ' has unexpected value');
115 }
116 count++;
117 }
118
119 // 'arguments' and might be exposed in the local and closure scope. Just
120 // ignore this.
121 var scope_size = scope.scopeObject().properties().length;
122 if (!scope.scopeObject().property('arguments').isUndefined()) {
123 scope_size--;
124 }
125 // Skip property with empty name.
126 if (!scope.scopeObject().property('').isUndefined()) {
127 scope_size--;
128 }
129
130 if (count != scope_size) {
131 print('Names found in scope:');
132 var names = scope.scopeObject().propertyNames();
133 for (var i = 0; i < names.length; i++) {
134 print(names[i]);
135 }
136 }
137 assertEquals(count, scope_size);
138 }
139
140
141 // Simple closure formed by returning an inner function referering to an outer
142 // block local variable and an outer function's parameter. Due to VM
143 // optimizations parts of the actual closure is missing from the debugger
144 // information.
145 BeginTest("Closure 1");
146
147 function closure_1(a) {
148 var x = 2;
149 let y = 3;
150 if (true) {
151 let z = 4;
152 function f() {
153 debugger;
154 return a + x + y + z;
155 };
156 return f;
157 }
158 }
159
160 listener_delegate = function(exec_state) {
161 CheckScopeChain([debug.ScopeType.Local,
162 debug.ScopeType.Block,
163 debug.ScopeType.Closure,
164 debug.ScopeType.Global], exec_state);
165 CheckScopeContent({}, 0, exec_state);
166 CheckScopeContent({z:4}, 1, exec_state);
167 CheckScopeContent({a:1,x:2,y:3}, 2, exec_state);
168 };
169 closure_1(1)();
170 EndTest();
OLDNEW
« no previous file with comments | « test/debugger/test-api.js ('k') | test/mjsunit/debug-changebreakpoint.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698