| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 16977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16988 v8::Local<v8::Object> global = env->Global(); | 16988 v8::Local<v8::Object> global = env->Global(); |
| 16989 Local<Value> trouble = | 16989 Local<Value> trouble = |
| 16990 global->Get(env.local(), v8_str("bar")).ToLocalChecked(); | 16990 global->Get(env.local(), v8_str("bar")).ToLocalChecked(); |
| 16991 CHECK(trouble->IsFunction()); | 16991 CHECK(trouble->IsFunction()); |
| 16992 CHECK(Function::Cast(*trouble)->Call(env.local(), global, 0, NULL).IsEmpty()); | 16992 CHECK(Function::Cast(*trouble)->Call(env.local(), global, 0, NULL).IsEmpty()); |
| 16993 isolate->SetCaptureStackTraceForUncaughtExceptions(false); | 16993 isolate->SetCaptureStackTraceForUncaughtExceptions(false); |
| 16994 isolate->RemoveMessageListeners(StackTraceForUncaughtExceptionListener); | 16994 isolate->RemoveMessageListeners(StackTraceForUncaughtExceptionListener); |
| 16995 CHECK_EQ(1, report_count); | 16995 CHECK_EQ(1, report_count); |
| 16996 } | 16996 } |
| 16997 | 16997 |
| 16998 | |
| 16999 TEST(GetStackTraceForUncaughtExceptionFromSimpleStackTrace) { | |
| 17000 report_count = 0; | |
| 17001 LocalContext env; | |
| 17002 v8::Isolate* isolate = env->GetIsolate(); | |
| 17003 v8::HandleScope scope(isolate); | |
| 17004 | |
| 17005 // Create an Error object first. | |
| 17006 CompileRunWithOrigin( | |
| 17007 "function foo() {\n" | |
| 17008 "e=new Error('err');\n" | |
| 17009 "};\n" | |
| 17010 "function bar() {\n" | |
| 17011 " foo();\n" | |
| 17012 "};\n" | |
| 17013 "var e;", | |
| 17014 "origin"); | |
| 17015 v8::Local<v8::Object> global = env->Global(); | |
| 17016 Local<Value> trouble = | |
| 17017 global->Get(env.local(), v8_str("bar")).ToLocalChecked(); | |
| 17018 CHECK(trouble->IsFunction()); | |
| 17019 Function::Cast(*trouble)->Call(env.local(), global, 0, NULL).ToLocalChecked(); | |
| 17020 | |
| 17021 // Enable capturing detailed stack trace late, and throw the exception. | |
| 17022 // The detailed stack trace should be extracted from the simple stack. | |
| 17023 isolate->AddMessageListener(StackTraceForUncaughtExceptionListener); | |
| 17024 isolate->SetCaptureStackTraceForUncaughtExceptions(true); | |
| 17025 CompileRunWithOrigin("throw e", "origin"); | |
| 17026 isolate->SetCaptureStackTraceForUncaughtExceptions(false); | |
| 17027 isolate->RemoveMessageListeners(StackTraceForUncaughtExceptionListener); | |
| 17028 CHECK_EQ(1, report_count); | |
| 17029 } | |
| 17030 | |
| 17031 | |
| 17032 TEST(CaptureStackTraceForUncaughtExceptionAndSetters) { | 16998 TEST(CaptureStackTraceForUncaughtExceptionAndSetters) { |
| 17033 LocalContext env; | 16999 LocalContext env; |
| 17034 v8::Isolate* isolate = env->GetIsolate(); | 17000 v8::Isolate* isolate = env->GetIsolate(); |
| 17035 v8::HandleScope scope(isolate); | 17001 v8::HandleScope scope(isolate); |
| 17036 isolate->SetCaptureStackTraceForUncaughtExceptions(true, 1024, | 17002 isolate->SetCaptureStackTraceForUncaughtExceptions(true, 1024, |
| 17037 v8::StackTrace::kDetailed); | 17003 v8::StackTrace::kDetailed); |
| 17038 | 17004 |
| 17039 CompileRun( | 17005 CompileRun( |
| 17040 "var setters = ['column', 'lineNumber', 'scriptName',\n" | 17006 "var setters = ['column', 'lineNumber', 'scriptName',\n" |
| 17041 " 'scriptNameOrSourceURL', 'functionName', 'isEval',\n" | 17007 " 'scriptNameOrSourceURL', 'functionName', 'isEval',\n" |
| (...skipping 8328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 25370 CHECK(object->SetPrototype(context.local(), v8::Null(isolate)).IsNothing()); | 25336 CHECK(object->SetPrototype(context.local(), v8::Null(isolate)).IsNothing()); |
| 25371 | 25337 |
| 25372 // The original prototype is still there | 25338 // The original prototype is still there |
| 25373 Local<Value> new_proto = | 25339 Local<Value> new_proto = |
| 25374 object->Get(context.local(), v8_str("__proto__")).ToLocalChecked(); | 25340 object->Get(context.local(), v8_str("__proto__")).ToLocalChecked(); |
| 25375 CHECK(new_proto->IsObject()); | 25341 CHECK(new_proto->IsObject()); |
| 25376 CHECK(new_proto.As<v8::Object>() | 25342 CHECK(new_proto.As<v8::Object>() |
| 25377 ->Equals(context.local(), original_proto) | 25343 ->Equals(context.local(), original_proto) |
| 25378 .FromJust()); | 25344 .FromJust()); |
| 25379 } | 25345 } |
| OLD | NEW |