OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 } else { | 216 } else { |
217 assertTrue(response.body.object.ref >= 0); | 217 assertTrue(response.body.object.ref >= 0); |
218 } | 218 } |
219 var found = false; | 219 var found = false; |
220 for (var i = 0; i < response.refs.length && !found; i++) { | 220 for (var i = 0; i < response.refs.length && !found; i++) { |
221 found = response.refs[i].handle == response.body.object.ref; | 221 found = response.refs[i].handle == response.body.object.ref; |
222 } | 222 } |
223 assertTrue(found, "Scope object " + response.body.object.ref + " not found"); | 223 assertTrue(found, "Scope object " + response.body.object.ref + " not found"); |
224 } | 224 } |
225 | 225 |
| 226 // Check that the scopes have positions as expected. |
| 227 function CheckScopeChainPositions(positions, exec_state) { |
| 228 var all_scopes = exec_state.frame().allScopes(); |
| 229 assertEquals(positions.length, all_scopes.length, "FrameMirror.allScopes lengt
h"); |
| 230 for (var i = 0; i < positions.length; i++) { |
| 231 var scope = exec_state.frame().scope(i); |
| 232 assertTrue(scope.isScope()); |
| 233 var position = positions[i]; |
| 234 if (!position) |
| 235 continue; |
| 236 |
| 237 assertEquals(position.start, scope.details().startPosition()) |
| 238 assertEquals(position.end, scope.details().endPosition()) |
| 239 } |
| 240 } |
226 | 241 |
227 // Simple empty local scope. | 242 // Simple empty local scope. |
228 BeginTest("Local 1"); | 243 BeginTest("Local 1"); |
229 | 244 |
230 function local_1() { | 245 function local_1() { |
231 debugger; | 246 debugger; |
232 } | 247 } |
233 | 248 |
234 listener_delegate = function(exec_state) { | 249 listener_delegate = function(exec_state) { |
235 CheckScopeChain([debug.ScopeType.Local, | 250 CheckScopeChain([debug.ScopeType.Local, |
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1102 class C1 { | 1117 class C1 { |
1103 m() { | 1118 m() { |
1104 debugger; | 1119 debugger; |
1105 } | 1120 } |
1106 } | 1121 } |
1107 new C1().m(); | 1122 new C1().m(); |
1108 })(); | 1123 })(); |
1109 | 1124 |
1110 EndTest(); | 1125 EndTest(); |
1111 | 1126 |
| 1127 BeginTest("Scope positions"); |
| 1128 var code1 = "function f() { \n" + |
| 1129 " var a = 1; \n" + |
| 1130 " function b() { \n" + |
| 1131 " debugger; \n" + |
| 1132 " return a + 1; \n" + |
| 1133 " } \n" + |
| 1134 " b(); \n" + |
| 1135 "} \n" + |
| 1136 "f(); \n"; |
| 1137 |
| 1138 listener_delegate = function(exec_state) { |
| 1139 CheckScopeChainPositions([{start: 58, end: 118}, {start: 10, end: 162}, {}, {}
], exec_state); |
| 1140 } |
| 1141 eval(code1); |
| 1142 EndTest(); |
| 1143 |
| 1144 |
| 1145 function catch_block_2() { |
| 1146 try { |
| 1147 throw 'Exception'; |
| 1148 } catch (e) { |
| 1149 with({n:10}) { |
| 1150 debugger; |
| 1151 } |
| 1152 } |
| 1153 }; |
| 1154 |
| 1155 BeginTest("Scope positions in catch and 'with' statement"); |
| 1156 var code2 = "function catch_block() { \n" + |
| 1157 " try { \n" + |
| 1158 " throw 'Exception'; \n" + |
| 1159 " } catch (e) { \n" + |
| 1160 " with({n : 10}) { \n" + |
| 1161 " debugger; \n" + |
| 1162 " } \n" + |
| 1163 " } \n" + |
| 1164 "} \n" + |
| 1165 "catch_block(); \n"; |
| 1166 |
| 1167 listener_delegate = function(exec_state) { |
| 1168 CheckScopeChainPositions([{start: 131, end: 173}, {start: 94, end: 199}, {star
t: 20, end: 225}, {}, {}], exec_state); |
| 1169 } |
| 1170 eval(code2); |
| 1171 EndTest(); |
| 1172 |
| 1173 BeginTest("Scope positions in for statement"); |
| 1174 var code3 = "function for_statement() { \n" + |
| 1175 " for (let i = 0; i < 1; i++) { \n" + |
| 1176 " debugger; \n" + |
| 1177 " } \n" + |
| 1178 "} \n" + |
| 1179 "for_statement(); \n"; |
| 1180 |
| 1181 listener_delegate = function(exec_state) { |
| 1182 CheckScopeChain([debug.ScopeType.Block, |
| 1183 debug.ScopeType.Block, |
| 1184 debug.ScopeType.Local, |
| 1185 debug.ScopeType.Script, |
| 1186 debug.ScopeType.Global], exec_state); |
| 1187 CheckScopeChainPositions([{start: 52, end: 111}, {start: 42, end: 111}, {start
: 22, end: 145}, {}, {}], exec_state); |
| 1188 } |
| 1189 eval(code3); |
| 1190 EndTest(); |
1112 | 1191 |
1113 assertEquals(begin_test_count, break_count, | 1192 assertEquals(begin_test_count, break_count, |
1114 'one or more tests did not enter the debugger'); | 1193 'one or more tests did not enter the debugger'); |
1115 assertEquals(begin_test_count, end_test_count, | 1194 assertEquals(begin_test_count, end_test_count, |
1116 'one or more tests did not have its result checked'); | 1195 'one or more tests did not have its result checked'); |
OLD | NEW |