|
31 | 31 | #include <csignal>
|
32 | 32 | #include <map>
|
33 | 33 | #include <memory>
|
| 34 | +#include <sstream> |
34 | 35 | #include <string>
|
35 | 36 |
|
36 | 37 | #include "test/cctest/cctest.h"
|
@@ -4869,6 +4870,51 @@ TEST(MessageGetSourceLine) {
|
4869 | 4870 | });
|
4870 | 4871 | }
|
4871 | 4872 |
|
| 4873 | +void GetCurrentStackTrace(const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 4874 | + std::stringstream ss; |
| 4875 | + v8::Message::PrintCurrentStackTrace(args.GetIsolate(), ss); |
| 4876 | + std::string str = ss.str(); |
| 4877 | + args.GetReturnValue().Set(v8_str(str.c_str())); |
| 4878 | +} |
| 4879 | + |
| 4880 | +THREADED_TEST(MessagePrintCurrentStackTrace) { |
| 4881 | + v8::Isolate* isolate = CcTest::isolate(); |
| 4882 | + v8::HandleScope scope(isolate); |
| 4883 | + Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); |
| 4884 | + templ->Set(isolate, "getCurrentStackTrace", |
| 4885 | + v8::FunctionTemplate::New(isolate, GetCurrentStackTrace)); |
| 4886 | + LocalContext context(nullptr, templ); |
| 4887 | + |
| 4888 | + v8::ScriptOrigin origin = v8::ScriptOrigin(isolate, v8_str("test"), 0, 0); |
| 4889 | + v8::Local<v8::String> script = v8_str( |
| 4890 | + "function c() {\n" |
| 4891 | + " return getCurrentStackTrace();\n" |
| 4892 | + "}\n" |
| 4893 | + "function b() {\n" |
| 4894 | + " return c();\n" |
| 4895 | + "}\n" |
| 4896 | + "function a() {\n" |
| 4897 | + " return b();\n" |
| 4898 | + "}\n" |
| 4899 | + "a();"); |
| 4900 | + v8::Local<v8::Value> stack_trace = |
| 4901 | + v8::Script::Compile(context.local(), script, &origin) |
| 4902 | + .ToLocalChecked() |
| 4903 | + ->Run(context.local()) |
| 4904 | + .ToLocalChecked(); |
| 4905 | + |
| 4906 | + CHECK(stack_trace->IsString()); |
| 4907 | + v8::String::Utf8Value stack_trace_value(isolate, |
| 4908 | + stack_trace.As<v8::String>()); |
| 4909 | + std::string stack_trace_string(*stack_trace_value); |
| 4910 | + std::string expected( |
| 4911 | + "c (test:2:10)\n" |
| 4912 | + "b (test:5:10)\n" |
| 4913 | + "a (test:8:10)\n" |
| 4914 | + "test:10:1"); |
| 4915 | + CHECK_EQ(stack_trace_string, expected); |
| 4916 | +} |
| 4917 | + |
4872 | 4918 | THREADED_TEST(GetSetProperty) {
|
4873 | 4919 | LocalContext context;
|
4874 | 4920 | v8::Isolate* isolate = context->GetIsolate();
|
|
0 commit comments