OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "bin/builtin.h" | 5 #include "bin/builtin.h" |
6 #include "vm/compiler.h" | 6 #include "vm/compiler.h" |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "include/dart_mirrors_api.h" | 8 #include "include/dart_mirrors_api.h" |
9 #include "include/dart_native_api.h" | 9 #include "include/dart_native_api.h" |
10 #include "include/dart_tools_api.h" | 10 #include "include/dart_tools_api.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 EXPECT_STREQ( | 52 EXPECT_STREQ( |
53 "Unhandled exception:\n" | 53 "Unhandled exception:\n" |
54 "Exception: bad news\n" | 54 "Exception: bad news\n" |
55 "#0 testMain (test-lib:2:3)", | 55 "#0 testMain (test-lib:2:3)", |
56 Dart_GetError(exception)); | 56 Dart_GetError(exception)); |
57 | 57 |
58 EXPECT(Dart_IsError(Dart_ErrorGetException(instance))); | 58 EXPECT(Dart_IsError(Dart_ErrorGetException(instance))); |
59 EXPECT(Dart_IsError(Dart_ErrorGetException(error))); | 59 EXPECT(Dart_IsError(Dart_ErrorGetException(error))); |
60 EXPECT_VALID(Dart_ErrorGetException(exception)); | 60 EXPECT_VALID(Dart_ErrorGetException(exception)); |
61 | 61 |
62 EXPECT(Dart_IsError(Dart_ErrorGetStacktrace(instance))); | 62 EXPECT(Dart_IsError(Dart_ErrorGetStackTrace(instance))); |
63 EXPECT(Dart_IsError(Dart_ErrorGetStacktrace(error))); | 63 EXPECT(Dart_IsError(Dart_ErrorGetStackTrace(error))); |
64 EXPECT_VALID(Dart_ErrorGetStacktrace(exception)); | 64 EXPECT_VALID(Dart_ErrorGetStackTrace(exception)); |
65 } | 65 } |
66 | 66 |
67 | 67 |
68 TEST_CASE(StacktraceInfo) { | 68 TEST_CASE(StackTraceInfo) { |
69 const char* kScriptChars = | 69 const char* kScriptChars = |
70 "bar() => throw new Error();\n" | 70 "bar() => throw new Error();\n" |
71 "foo() => bar();\n" | 71 "foo() => bar();\n" |
72 "testMain() => foo();\n"; | 72 "testMain() => foo();\n"; |
73 | 73 |
74 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 74 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
75 Dart_Handle error = Dart_Invoke(lib, NewString("testMain"), 0, NULL); | 75 Dart_Handle error = Dart_Invoke(lib, NewString("testMain"), 0, NULL); |
76 | 76 |
77 EXPECT(Dart_IsError(error)); | 77 EXPECT(Dart_IsError(error)); |
78 | 78 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 EXPECT_EQ(15, column_number); | 129 EXPECT_EQ(15, column_number); |
130 | 130 |
131 // Out-of-bounds frames. | 131 // Out-of-bounds frames. |
132 result = Dart_GetActivationFrame(stacktrace, frame_count, &frame); | 132 result = Dart_GetActivationFrame(stacktrace, frame_count, &frame); |
133 EXPECT(Dart_IsError(result)); | 133 EXPECT(Dart_IsError(result)); |
134 result = Dart_GetActivationFrame(stacktrace, -1, &frame); | 134 result = Dart_GetActivationFrame(stacktrace, -1, &frame); |
135 EXPECT(Dart_IsError(result)); | 135 EXPECT(Dart_IsError(result)); |
136 } | 136 } |
137 | 137 |
138 | 138 |
139 TEST_CASE(DeepStacktraceInfo) { | 139 TEST_CASE(DeepStackTraceInfo) { |
140 const char* kScriptChars = | 140 const char* kScriptChars = |
141 "foo(n) => n == 1 ? throw new Error() : foo(n-1);\n" | 141 "foo(n) => n == 1 ? throw new Error() : foo(n-1);\n" |
142 "testMain() => foo(50);\n"; | 142 "testMain() => foo(50);\n"; |
143 | 143 |
144 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 144 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
145 Dart_Handle error = Dart_Invoke(lib, NewString("testMain"), 0, NULL); | 145 Dart_Handle error = Dart_Invoke(lib, NewString("testMain"), 0, NULL); |
146 | 146 |
147 EXPECT(Dart_IsError(error)); | 147 EXPECT(Dart_IsError(error)); |
148 | 148 |
149 Dart_StackTrace stacktrace; | 149 Dart_StackTrace stacktrace; |
150 Dart_Handle result = Dart_GetStackTraceFromError(error, &stacktrace); | 150 Dart_Handle result = Dart_GetStackTraceFromError(error, &stacktrace); |
151 EXPECT_VALID(result); | 151 EXPECT_VALID(result); |
152 | 152 |
153 intptr_t frame_count = 0; | 153 intptr_t frame_count = 0; |
154 result = Dart_StackTraceLength(stacktrace, &frame_count); | 154 result = Dart_StackTraceLength(stacktrace, &frame_count); |
155 EXPECT_VALID(result); | 155 EXPECT_VALID(result); |
156 EXPECT_EQ(51, frame_count); | 156 EXPECT_EQ(51, frame_count); |
157 // Test something bigger than the preallocated size to verify nothing was | 157 // Test something bigger than the preallocated size to verify nothing was |
158 // truncated. | 158 // truncated. |
159 EXPECT(51 > Stacktrace::kPreallocatedStackdepth); | 159 EXPECT(51 > StackTrace::kPreallocatedStackdepth); |
160 | 160 |
161 Dart_Handle function_name; | 161 Dart_Handle function_name; |
162 Dart_Handle script_url; | 162 Dart_Handle script_url; |
163 intptr_t line_number = 0; | 163 intptr_t line_number = 0; |
164 intptr_t column_number = 0; | 164 intptr_t column_number = 0; |
165 const char* cstr = ""; | 165 const char* cstr = ""; |
166 | 166 |
167 // Top frame at positioned at throw. | 167 // Top frame at positioned at throw. |
168 Dart_ActivationFrame frame; | 168 Dart_ActivationFrame frame; |
169 result = Dart_GetActivationFrame(stacktrace, 0, &frame); | 169 result = Dart_GetActivationFrame(stacktrace, 0, &frame); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 EXPECT_EQ(15, column_number); | 208 EXPECT_EQ(15, column_number); |
209 | 209 |
210 // Out-of-bounds frames. | 210 // Out-of-bounds frames. |
211 result = Dart_GetActivationFrame(stacktrace, frame_count, &frame); | 211 result = Dart_GetActivationFrame(stacktrace, frame_count, &frame); |
212 EXPECT(Dart_IsError(result)); | 212 EXPECT(Dart_IsError(result)); |
213 result = Dart_GetActivationFrame(stacktrace, -1, &frame); | 213 result = Dart_GetActivationFrame(stacktrace, -1, &frame); |
214 EXPECT(Dart_IsError(result)); | 214 EXPECT(Dart_IsError(result)); |
215 } | 215 } |
216 | 216 |
217 | 217 |
218 TEST_CASE(StackOverflowStacktraceInfo) { | 218 TEST_CASE(StackOverflowStackTraceInfo) { |
219 const char* kScriptChars = | 219 const char* kScriptChars = |
220 "class C {\n" | 220 "class C {\n" |
221 " static foo() => foo();\n" | 221 " static foo() => foo();\n" |
222 "}\n" | 222 "}\n" |
223 "testMain() => C.foo();\n"; | 223 "testMain() => C.foo();\n"; |
224 | 224 |
225 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 225 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
226 Dart_Handle error = Dart_Invoke(lib, NewString("testMain"), 0, NULL); | 226 Dart_Handle error = Dart_Invoke(lib, NewString("testMain"), 0, NULL); |
227 | 227 |
228 EXPECT(Dart_IsError(error)); | 228 EXPECT(Dart_IsError(error)); |
229 | 229 |
230 Dart_StackTrace stacktrace; | 230 Dart_StackTrace stacktrace; |
231 Dart_Handle result = Dart_GetStackTraceFromError(error, &stacktrace); | 231 Dart_Handle result = Dart_GetStackTraceFromError(error, &stacktrace); |
232 EXPECT_VALID(result); | 232 EXPECT_VALID(result); |
233 | 233 |
234 intptr_t frame_count = 0; | 234 intptr_t frame_count = 0; |
235 result = Dart_StackTraceLength(stacktrace, &frame_count); | 235 result = Dart_StackTraceLength(stacktrace, &frame_count); |
236 EXPECT_VALID(result); | 236 EXPECT_VALID(result); |
237 EXPECT_EQ(Stacktrace::kPreallocatedStackdepth - 1, frame_count); | 237 EXPECT_EQ(StackTrace::kPreallocatedStackdepth - 1, frame_count); |
238 | 238 |
239 Dart_Handle function_name; | 239 Dart_Handle function_name; |
240 Dart_Handle script_url; | 240 Dart_Handle script_url; |
241 intptr_t line_number = 0; | 241 intptr_t line_number = 0; |
242 intptr_t column_number = 0; | 242 intptr_t column_number = 0; |
243 const char* cstr = ""; | 243 const char* cstr = ""; |
244 | 244 |
245 // Top frame at recursive call. | 245 // Top frame at recursive call. |
246 Dart_ActivationFrame frame; | 246 Dart_ActivationFrame frame; |
247 result = Dart_GetActivationFrame(stacktrace, 0, &frame); | 247 result = Dart_GetActivationFrame(stacktrace, 0, &frame); |
248 EXPECT_VALID(result); | 248 EXPECT_VALID(result); |
249 result = Dart_ActivationFrameInfo(frame, &function_name, &script_url, | 249 result = Dart_ActivationFrameInfo(frame, &function_name, &script_url, |
250 &line_number, &column_number); | 250 &line_number, &column_number); |
251 EXPECT_VALID(result); | 251 EXPECT_VALID(result); |
252 Dart_StringToCString(function_name, &cstr); | 252 Dart_StringToCString(function_name, &cstr); |
253 EXPECT_STREQ("C.foo", cstr); | 253 EXPECT_STREQ("C.foo", cstr); |
254 Dart_StringToCString(script_url, &cstr); | 254 Dart_StringToCString(script_url, &cstr); |
255 EXPECT_STREQ("test-lib", cstr); | 255 EXPECT_STREQ("test-lib", cstr); |
256 EXPECT_EQ(2, line_number); | 256 EXPECT_EQ(2, line_number); |
257 EXPECT_EQ(13, column_number); | 257 EXPECT_EQ(13, column_number); |
258 | 258 |
259 // Out-of-bounds frames. | 259 // Out-of-bounds frames. |
260 result = Dart_GetActivationFrame(stacktrace, frame_count, &frame); | 260 result = Dart_GetActivationFrame(stacktrace, frame_count, &frame); |
261 EXPECT(Dart_IsError(result)); | 261 EXPECT(Dart_IsError(result)); |
262 result = Dart_GetActivationFrame(stacktrace, -1, &frame); | 262 result = Dart_GetActivationFrame(stacktrace, -1, &frame); |
263 EXPECT(Dart_IsError(result)); | 263 EXPECT(Dart_IsError(result)); |
264 } | 264 } |
265 | 265 |
266 | 266 |
267 TEST_CASE(OutOfMemoryStacktraceInfo) { | 267 TEST_CASE(OutOfMemoryStackTraceInfo) { |
268 const char* kScriptChars = | 268 const char* kScriptChars = |
269 "var number_of_ints = 134000000;\n" | 269 "var number_of_ints = 134000000;\n" |
270 "testMain() {\n" | 270 "testMain() {\n" |
271 " new List<int>(number_of_ints)\n" | 271 " new List<int>(number_of_ints)\n" |
272 "}\n"; | 272 "}\n"; |
273 | 273 |
274 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 274 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
275 Dart_Handle error = Dart_Invoke(lib, NewString("testMain"), 0, NULL); | 275 Dart_Handle error = Dart_Invoke(lib, NewString("testMain"), 0, NULL); |
276 | 276 |
277 EXPECT(Dart_IsError(error)); | 277 EXPECT(Dart_IsError(error)); |
278 | 278 |
279 Dart_StackTrace stacktrace; | 279 Dart_StackTrace stacktrace; |
280 Dart_Handle result = Dart_GetStackTraceFromError(error, &stacktrace); | 280 Dart_Handle result = Dart_GetStackTraceFromError(error, &stacktrace); |
281 EXPECT(Dart_IsError(result)); // No Stacktrace for OutOfMemory. | 281 EXPECT(Dart_IsError(result)); // No StackTrace for OutOfMemory. |
282 } | 282 } |
283 | 283 |
284 | 284 |
285 void CurrentStackTraceNative(Dart_NativeArguments args) { | 285 void CurrentStackTraceNative(Dart_NativeArguments args) { |
286 Dart_EnterScope(); | 286 Dart_EnterScope(); |
287 | 287 |
288 Dart_StackTrace stacktrace; | 288 Dart_StackTrace stacktrace; |
289 Dart_Handle result = Dart_GetStackTrace(&stacktrace); | 289 Dart_Handle result = Dart_GetStackTrace(&stacktrace); |
290 EXPECT_VALID(result); | 290 EXPECT_VALID(result); |
291 | 291 |
292 intptr_t frame_count = 0; | 292 intptr_t frame_count = 0; |
293 result = Dart_StackTraceLength(stacktrace, &frame_count); | 293 result = Dart_StackTraceLength(stacktrace, &frame_count); |
294 EXPECT_VALID(result); | 294 EXPECT_VALID(result); |
295 EXPECT_EQ(52, frame_count); | 295 EXPECT_EQ(52, frame_count); |
296 // Test something bigger than the preallocated size to verify nothing was | 296 // Test something bigger than the preallocated size to verify nothing was |
297 // truncated. | 297 // truncated. |
298 EXPECT(52 > Stacktrace::kPreallocatedStackdepth); | 298 EXPECT(52 > StackTrace::kPreallocatedStackdepth); |
299 | 299 |
300 Dart_Handle function_name; | 300 Dart_Handle function_name; |
301 Dart_Handle script_url; | 301 Dart_Handle script_url; |
302 intptr_t line_number = 0; | 302 intptr_t line_number = 0; |
303 intptr_t column_number = 0; | 303 intptr_t column_number = 0; |
304 const char* cstr = ""; | 304 const char* cstr = ""; |
305 | 305 |
306 // Top frame is inspectStack(). | 306 // Top frame is inspectStack(). |
307 Dart_ActivationFrame frame; | 307 Dart_ActivationFrame frame; |
308 result = Dart_GetActivationFrame(stacktrace, 0, &frame); | 308 result = Dart_GetActivationFrame(stacktrace, 0, &frame); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 static Dart_NativeFunction CurrentStackTraceNativeLookup( | 373 static Dart_NativeFunction CurrentStackTraceNativeLookup( |
374 Dart_Handle name, | 374 Dart_Handle name, |
375 int argument_count, | 375 int argument_count, |
376 bool* auto_setup_scope) { | 376 bool* auto_setup_scope) { |
377 ASSERT(auto_setup_scope != NULL); | 377 ASSERT(auto_setup_scope != NULL); |
378 *auto_setup_scope = true; | 378 *auto_setup_scope = true; |
379 return reinterpret_cast<Dart_NativeFunction>(&CurrentStackTraceNative); | 379 return reinterpret_cast<Dart_NativeFunction>(&CurrentStackTraceNative); |
380 } | 380 } |
381 | 381 |
382 | 382 |
383 TEST_CASE(CurrentStacktraceInfo) { | 383 TEST_CASE(CurrentStackTraceInfo) { |
384 const char* kScriptChars = | 384 const char* kScriptChars = |
385 "inspectStack() native 'CurrentStackTraceNatve';\n" | 385 "inspectStack() native 'CurrentStackTraceNatve';\n" |
386 "foo(n) => n == 1 ? inspectStack() : foo(n-1);\n" | 386 "foo(n) => n == 1 ? inspectStack() : foo(n-1);\n" |
387 "testMain() => foo(50);\n"; | 387 "testMain() => foo(50);\n"; |
388 | 388 |
389 Dart_Handle lib = | 389 Dart_Handle lib = |
390 TestCase::LoadTestScript(kScriptChars, &CurrentStackTraceNativeLookup); | 390 TestCase::LoadTestScript(kScriptChars, &CurrentStackTraceNativeLookup); |
391 Dart_Handle result = Dart_Invoke(lib, NewString("testMain"), 0, NULL); | 391 Dart_Handle result = Dart_Invoke(lib, NewString("testMain"), 0, NULL); |
392 EXPECT_VALID(result); | 392 EXPECT_VALID(result); |
393 EXPECT(Dart_IsInteger(result)); | 393 EXPECT(Dart_IsInteger(result)); |
(...skipping 9513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9907 EXPECT_VALID(result); | 9907 EXPECT_VALID(result); |
9908 result = Dart_FinalizeLoading(false); | 9908 result = Dart_FinalizeLoading(false); |
9909 EXPECT_VALID(result); | 9909 EXPECT_VALID(result); |
9910 result = Dart_Invoke(lib, NewString("foozoo"), 0, NULL); | 9910 result = Dart_Invoke(lib, NewString("foozoo"), 0, NULL); |
9911 EXPECT(Dart_IsError(result)); | 9911 EXPECT(Dart_IsError(result)); |
9912 } | 9912 } |
9913 | 9913 |
9914 #endif // !PRODUCT | 9914 #endif // !PRODUCT |
9915 | 9915 |
9916 } // namespace dart | 9916 } // namespace dart |
OLD | NEW |