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 5294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5305 | 5305 |
5306 | 5306 |
5307 void TryCatchMixedNestingCheck(v8::TryCatch* try_catch) { | 5307 void TryCatchMixedNestingCheck(v8::TryCatch* try_catch) { |
5308 CHECK(try_catch->HasCaught()); | 5308 CHECK(try_catch->HasCaught()); |
5309 Handle<Message> message = try_catch->Message(); | 5309 Handle<Message> message = try_catch->Message(); |
5310 Handle<Value> resource = message->GetScriptOrigin().ResourceName(); | 5310 Handle<Value> resource = message->GetScriptOrigin().ResourceName(); |
5311 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(resource), "inner")); | 5311 CHECK_EQ(0, strcmp(*v8::String::Utf8Value(resource), "inner")); |
5312 CHECK_EQ(0, | 5312 CHECK_EQ(0, |
5313 strcmp(*v8::String::Utf8Value(message->Get()), "Uncaught Error: a")); | 5313 strcmp(*v8::String::Utf8Value(message->Get()), "Uncaught Error: a")); |
5314 CHECK_EQ(1, message->GetLineNumber()); | 5314 CHECK_EQ(1, message->GetLineNumber()); |
5315 // TODO(3995): Our compilers disagree about the position. | 5315 CHECK_EQ(0, message->GetStartColumn()); |
5316 if (!i::FLAG_always_opt) CHECK_EQ(6, message->GetStartColumn()); | |
5317 } | 5316 } |
5318 | 5317 |
5319 | 5318 |
5320 void TryCatchMixedNestingHelper( | 5319 void TryCatchMixedNestingHelper( |
5321 const v8::FunctionCallbackInfo<v8::Value>& args) { | 5320 const v8::FunctionCallbackInfo<v8::Value>& args) { |
5322 ApiTestFuzzer::Fuzz(); | 5321 ApiTestFuzzer::Fuzz(); |
5323 v8::TryCatch try_catch; | 5322 v8::TryCatch try_catch; |
5324 CompileRunWithOrigin("throw new Error('a');\n", "inner", 0, 0); | 5323 CompileRunWithOrigin("throw new Error('a');\n", "inner", 0, 0); |
5325 CHECK(try_catch.HasCaught()); | 5324 CHECK(try_catch.HasCaught()); |
5326 TryCatchMixedNestingCheck(&try_catch); | 5325 TryCatchMixedNestingCheck(&try_catch); |
(...skipping 4461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9788 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate); | 9787 Local<ObjectTemplate> instance_template = ObjectTemplate::New(isolate); |
9789 Local<Object> instance = instance_template->NewInstance(); | 9788 Local<Object> instance = instance_template->NewInstance(); |
9790 context->Global()->Set(v8_str("obj2"), instance); | 9789 context->Global()->Set(v8_str("obj2"), instance); |
9791 v8::TryCatch try_catch; | 9790 v8::TryCatch try_catch; |
9792 Local<Value> value; | 9791 Local<Value> value; |
9793 CHECK(!try_catch.HasCaught()); | 9792 CHECK(!try_catch.HasCaught()); |
9794 | 9793 |
9795 value = CompileRun("new obj2(28)"); | 9794 value = CompileRun("new obj2(28)"); |
9796 CHECK(try_catch.HasCaught()); | 9795 CHECK(try_catch.HasCaught()); |
9797 String::Utf8Value exception_value1(try_catch.Exception()); | 9796 String::Utf8Value exception_value1(try_catch.Exception()); |
9798 // TODO(3995): Our compilers disagree about the position (and message). | 9797 CHECK_EQ(0, strcmp("TypeError: obj2 is not a function", *exception_value1)); |
9799 if (!i::FLAG_always_opt) { | |
9800 CHECK_EQ(0, | |
9801 strcmp("TypeError: obj2 is not a function", *exception_value1)); | |
9802 } | |
9803 try_catch.Reset(); | 9798 try_catch.Reset(); |
9804 | 9799 |
9805 Local<Value> args[] = {v8_num(29)}; | 9800 Local<Value> args[] = {v8_num(29)}; |
9806 value = instance->CallAsConstructor(1, args); | 9801 value = instance->CallAsConstructor(1, args); |
9807 CHECK(try_catch.HasCaught()); | 9802 CHECK(try_catch.HasCaught()); |
9808 String::Utf8Value exception_value2(try_catch.Exception()); | 9803 String::Utf8Value exception_value2(try_catch.Exception()); |
9809 CHECK_EQ( | 9804 CHECK_EQ( |
9810 0, strcmp("TypeError: #<Object> is not a function", *exception_value2)); | 9805 0, strcmp("TypeError: #<Object> is not a function", *exception_value2)); |
9811 try_catch.Reset(); | 9806 try_catch.Reset(); |
9812 } | 9807 } |
(...skipping 5185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14998 int testGroup = args[0]->Int32Value(); | 14993 int testGroup = args[0]->Int32Value(); |
14999 if (testGroup == kOverviewTest) { | 14994 if (testGroup == kOverviewTest) { |
15000 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace( | 14995 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace( |
15001 args.GetIsolate(), 10, v8::StackTrace::kOverview); | 14996 args.GetIsolate(), 10, v8::StackTrace::kOverview); |
15002 CHECK_EQ(4, stackTrace->GetFrameCount()); | 14997 CHECK_EQ(4, stackTrace->GetFrameCount()); |
15003 checkStackFrame(origin, "bar", 2, 10, false, false, | 14998 checkStackFrame(origin, "bar", 2, 10, false, false, |
15004 stackTrace->GetFrame(0)); | 14999 stackTrace->GetFrame(0)); |
15005 checkStackFrame(origin, "foo", 6, 3, false, false, | 15000 checkStackFrame(origin, "foo", 6, 3, false, false, |
15006 stackTrace->GetFrame(1)); | 15001 stackTrace->GetFrame(1)); |
15007 // This is the source string inside the eval which has the call to foo. | 15002 // This is the source string inside the eval which has the call to foo. |
15008 checkStackFrame(NULL, "", 1, 5, false, false, | 15003 checkStackFrame(NULL, "", 1, 1, false, false, stackTrace->GetFrame(2)); |
15009 stackTrace->GetFrame(2)); | |
15010 // The last frame is an anonymous function which has the initial eval call. | 15004 // The last frame is an anonymous function which has the initial eval call. |
15011 checkStackFrame(origin, "", 8, 7, false, false, | 15005 checkStackFrame(origin, "", 8, 7, false, false, stackTrace->GetFrame(3)); |
15012 stackTrace->GetFrame(3)); | |
15013 | 15006 |
15014 CHECK(stackTrace->AsArray()->IsArray()); | 15007 CHECK(stackTrace->AsArray()->IsArray()); |
15015 } else if (testGroup == kDetailedTest) { | 15008 } else if (testGroup == kDetailedTest) { |
15016 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace( | 15009 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace( |
15017 args.GetIsolate(), 10, v8::StackTrace::kDetailed); | 15010 args.GetIsolate(), 10, v8::StackTrace::kDetailed); |
15018 CHECK_EQ(4, stackTrace->GetFrameCount()); | 15011 CHECK_EQ(4, stackTrace->GetFrameCount()); |
15019 checkStackFrame(origin, "bat", 4, 22, false, false, | 15012 checkStackFrame(origin, "bat", 4, 22, false, false, |
15020 stackTrace->GetFrame(0)); | 15013 stackTrace->GetFrame(0)); |
15021 checkStackFrame(origin, "baz", 8, 3, false, true, | 15014 checkStackFrame(origin, "baz", 8, 3, false, true, |
15022 stackTrace->GetFrame(1)); | 15015 stackTrace->GetFrame(1)); |
15023 bool is_eval = true; | 15016 bool is_eval = true; |
15024 // This is the source string inside the eval which has the call to baz. | 15017 // This is the source string inside the eval which has the call to baz. |
15025 checkStackFrame(NULL, "", 1, 5, is_eval, false, | 15018 checkStackFrame(NULL, "", 1, 1, is_eval, false, stackTrace->GetFrame(2)); |
15026 stackTrace->GetFrame(2)); | |
15027 // The last frame is an anonymous function which has the initial eval call. | 15019 // The last frame is an anonymous function which has the initial eval call. |
15028 checkStackFrame(origin, "", 10, 1, false, false, | 15020 checkStackFrame(origin, "", 10, 1, false, false, stackTrace->GetFrame(3)); |
15029 stackTrace->GetFrame(3)); | |
15030 | 15021 |
15031 CHECK(stackTrace->AsArray()->IsArray()); | 15022 CHECK(stackTrace->AsArray()->IsArray()); |
15032 } | 15023 } |
15033 } | 15024 } |
15034 | 15025 |
15035 | 15026 |
15036 // Tests the C++ StackTrace API. | 15027 // Tests the C++ StackTrace API. |
15037 // TODO(3074796): Reenable this as a THREADED_TEST once it passes. | 15028 // TODO(3074796): Reenable this as a THREADED_TEST once it passes. |
15038 // THREADED_TEST(CaptureStackTrace) { | 15029 // THREADED_TEST(CaptureStackTrace) { |
15039 TEST(CaptureStackTrace) { | 15030 TEST(CaptureStackTrace) { |
(...skipping 6853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21893 } | 21884 } |
21894 { | 21885 { |
21895 v8::TryCatch try_catch; | 21886 v8::TryCatch try_catch; |
21896 uint16_t* data = reinterpret_cast<uint16_t*>(buffer); | 21887 uint16_t* data = reinterpret_cast<uint16_t*>(buffer); |
21897 CHECK(v8::String::NewFromTwoByte(isolate, data, v8::String::kNormalString, | 21888 CHECK(v8::String::NewFromTwoByte(isolate, data, v8::String::kNormalString, |
21898 length).IsEmpty()); | 21889 length).IsEmpty()); |
21899 CHECK(!try_catch.HasCaught()); | 21890 CHECK(!try_catch.HasCaught()); |
21900 } | 21891 } |
21901 free(buffer); | 21892 free(buffer); |
21902 } | 21893 } |
OLD | NEW |