Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: test/cctest/test-api.cc

Issue 1137683003: Only record one in n line endings to save space. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix false detection of exotic newlines Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/rewriter.cc ('k') | test/mjsunit/debug-sourceinfo.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 14283 matching lines...) Expand 10 before | Expand all | Expand 10 after
14294 // This is the source string inside the eval which has the call to baz. 14294 // This is the source string inside the eval which has the call to baz.
14295 checkStackFrame(NULL, "", 1, 1, is_eval, false, stackTrace->GetFrame(2)); 14295 checkStackFrame(NULL, "", 1, 1, is_eval, false, stackTrace->GetFrame(2));
14296 // The last frame is an anonymous function which has the initial eval call. 14296 // The last frame is an anonymous function which has the initial eval call.
14297 checkStackFrame(origin, "", 10, 1, false, false, stackTrace->GetFrame(3)); 14297 checkStackFrame(origin, "", 10, 1, false, false, stackTrace->GetFrame(3));
14298 14298
14299 CHECK(stackTrace->AsArray()->IsArray()); 14299 CHECK(stackTrace->AsArray()->IsArray());
14300 } 14300 }
14301 } 14301 }
14302 14302
14303 14303
14304 void ChangeNewlines(int kind, char* dest, size_t dest_len, const char* source) {
14305 if (kind == 0) {
14306 for (size_t i = 0; i <= strlen(source); i++) {
14307 dest[i] = source[i];
14308 }
14309 } else {
14310 for (size_t i = 0; i <= strlen(source); i++) {
14311 char c = source[i];
14312 if (c == '\n') {
14313 if (kind == 1) {
14314 *dest++ = '\r';
14315 *dest++ = '\n';
14316 } else {
14317 // UTF-8 version of 0x2028 newline.
14318 *dest++ = '\xe2';
14319 *dest++ = '\x80';
14320 *dest++ = '\xa8';
14321 }
14322 } else {
14323 *dest++ = c;
14324 }
14325 }
14326 }
14327 }
14328
14329
14304 // Tests the C++ StackTrace API. 14330 // Tests the C++ StackTrace API.
14305 // TODO(3074796): Reenable this as a THREADED_TEST once it passes. 14331 // TODO(3074796): Reenable this as a THREADED_TEST once it passes.
14306 // THREADED_TEST(CaptureStackTrace) { 14332 // THREADED_TEST(CaptureStackTrace) {
14307 TEST(CaptureStackTrace) { 14333 TEST(CaptureStackTrace) {
14308 v8::Isolate* isolate = CcTest::isolate(); 14334 v8::Isolate* isolate = CcTest::isolate();
14309 v8::HandleScope scope(isolate); 14335 v8::HandleScope scope(isolate);
14310 v8::Handle<v8::String> origin = 14336 v8::Handle<v8::String> origin =
14311 v8::String::NewFromUtf8(isolate, "capture-stack-trace-test"); 14337 v8::String::NewFromUtf8(isolate, "capture-stack-trace-test");
14312 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); 14338 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate);
14313 templ->Set(v8_str("AnalyzeStackInNativeCode"), 14339 templ->Set(v8_str("AnalyzeStackInNativeCode"),
14314 v8::FunctionTemplate::New(isolate, AnalyzeStackInNativeCode)); 14340 v8::FunctionTemplate::New(isolate, AnalyzeStackInNativeCode));
14315 LocalContext context(0, templ); 14341 LocalContext context(0, templ);
14316 14342
14317 // Test getting OVERVIEW information. Should ignore information that is not 14343 for (int i = 0; i < 3; i++) {
14318 // script name, function name, line number, and column offset. 14344 // Test getting OVERVIEW information. Should ignore information that is not
14319 const char *overview_source = 14345 // script name, function name, line number, and column offset.
14320 "function bar() {\n" 14346 const char* overview_source =
14321 " var y; AnalyzeStackInNativeCode(1);\n" 14347 "function bar() {\n"
14322 "}\n" 14348 " var y; AnalyzeStackInNativeCode(1);\n"
14323 "function foo() {\n" 14349 "}\n"
14324 "\n" 14350 "function foo() {\n"
14325 " bar();\n" 14351 "\n"
14326 "}\n" 14352 " bar();\n"
14327 "var x;eval('new foo();');"; 14353 "}\n"
14328 v8::Handle<v8::String> overview_src = 14354 "var x;eval('new foo();');";
14329 v8::String::NewFromUtf8(isolate, overview_source); 14355 size_t munged_length = strlen(overview_source) * 3 + 1;
14330 v8::ScriptCompiler::Source script_source(overview_src, 14356 char* overview_munged_source = new char[munged_length];
14331 v8::ScriptOrigin(origin)); 14357 ChangeNewlines(i, overview_munged_source, munged_length, overview_source);
14332 v8::Handle<Value> overview_result(
14333 v8::ScriptCompiler::CompileUnbound(isolate, &script_source)
14334 ->BindToCurrentContext()
14335 ->Run());
14336 CHECK(!overview_result.IsEmpty());
14337 CHECK(overview_result->IsObject());
14338 14358
14339 // Test getting DETAILED information. 14359 v8::Handle<v8::String> overview_src =
14340 const char *detailed_source = 14360 v8::String::NewFromUtf8(isolate, overview_munged_source);
14341 "function bat() {AnalyzeStackInNativeCode(2);\n" 14361 delete[] overview_munged_source;
14342 "}\n" 14362 v8::ScriptCompiler::Source script_source(overview_src,
14343 "\n" 14363 v8::ScriptOrigin(origin));
14344 "function baz() {\n" 14364 v8::Handle<Value> overview_result(
14345 " bat();\n" 14365 v8::ScriptCompiler::CompileUnbound(isolate, &script_source)
14346 "}\n" 14366 ->BindToCurrentContext()
14347 "eval('new baz();');"; 14367 ->Run());
14348 v8::Handle<v8::String> detailed_src = 14368 CHECK(!overview_result.IsEmpty());
14349 v8::String::NewFromUtf8(isolate, detailed_source); 14369 CHECK(overview_result->IsObject());
14350 // Make the script using a non-zero line and column offset. 14370
14351 v8::Handle<v8::Integer> line_offset = v8::Integer::New(isolate, 3); 14371 // Test getting DETAILED information.
14352 v8::Handle<v8::Integer> column_offset = v8::Integer::New(isolate, 5); 14372 const char* detailed_source =
14353 v8::ScriptOrigin detailed_origin(origin, line_offset, column_offset); 14373 "function bat() {AnalyzeStackInNativeCode(2);\n"
14354 v8::ScriptCompiler::Source script_source2(detailed_src, detailed_origin); 14374 "}\n"
14355 v8::Handle<v8::UnboundScript> detailed_script( 14375 "\n"
14356 v8::ScriptCompiler::CompileUnbound(isolate, &script_source2)); 14376 "function baz() {\n"
14357 v8::Handle<Value> detailed_result( 14377 " bat();\n"
14358 detailed_script->BindToCurrentContext()->Run()); 14378 "}\n"
14359 CHECK(!detailed_result.IsEmpty()); 14379 "eval('new baz();');";
14360 CHECK(detailed_result->IsObject()); 14380 munged_length = strlen(detailed_source) * 3 + 1;
14381 char* detailed_munged_source = new char[munged_length];
14382 ChangeNewlines(i, detailed_munged_source, munged_length, detailed_source);
14383 v8::Handle<v8::String> detailed_src =
14384 v8::String::NewFromUtf8(isolate, detailed_munged_source);
14385 delete[] detailed_munged_source;
14386 // Make the script using a non-zero line and column offset.
14387 v8::Handle<v8::Integer> line_offset = v8::Integer::New(isolate, 3);
14388 v8::Handle<v8::Integer> column_offset = v8::Integer::New(isolate, 5);
14389 v8::ScriptOrigin detailed_origin(origin, line_offset, column_offset);
14390 v8::ScriptCompiler::Source script_source2(detailed_src, detailed_origin);
14391 v8::Handle<v8::UnboundScript> detailed_script(
14392 v8::ScriptCompiler::CompileUnbound(isolate, &script_source2));
14393 v8::Handle<Value> detailed_result(
14394 detailed_script->BindToCurrentContext()->Run());
14395 CHECK(!detailed_result.IsEmpty());
14396 CHECK(detailed_result->IsObject());
14397 }
14361 } 14398 }
14362 14399
14363 14400
14364 static void StackTraceForUncaughtExceptionListener( 14401 static void StackTraceForUncaughtExceptionListener(
14365 v8::Handle<v8::Message> message, 14402 v8::Handle<v8::Message> message,
14366 v8::Handle<Value>) { 14403 v8::Handle<Value>) {
14367 report_count++; 14404 report_count++;
14368 v8::Handle<v8::StackTrace> stack_trace = message->GetStackTrace(); 14405 v8::Handle<v8::StackTrace> stack_trace = message->GetStackTrace();
14369 CHECK_EQ(2, stack_trace->GetFrameCount()); 14406 CHECK_EQ(2, stack_trace->GetFrameCount());
14370 checkStackFrame("origin", "foo", 2, 3, false, false, 14407 checkStackFrame("origin", "foo", 2, 3, false, false,
(...skipping 7046 matching lines...) Expand 10 before | Expand all | Expand 10 after
21417 CHECK_EQ(2U, set->Size()); 21454 CHECK_EQ(2U, set->Size());
21418 21455
21419 v8::Local<v8::Array> keys = set->AsArray(); 21456 v8::Local<v8::Array> keys = set->AsArray();
21420 CHECK_EQ(2U, keys->Length()); 21457 CHECK_EQ(2U, keys->Length());
21421 CHECK_EQ(1, keys->Get(0).As<v8::Int32>()->Value()); 21458 CHECK_EQ(1, keys->Get(0).As<v8::Int32>()->Value());
21422 CHECK_EQ(2, keys->Get(1).As<v8::Int32>()->Value()); 21459 CHECK_EQ(2, keys->Get(1).As<v8::Int32>()->Value());
21423 21460
21424 set = v8::Set::FromArray(env.local(), keys).ToLocalChecked(); 21461 set = v8::Set::FromArray(env.local(), keys).ToLocalChecked();
21425 CHECK_EQ(2U, set->Size()); 21462 CHECK_EQ(2U, set->Size());
21426 } 21463 }
OLDNEW
« no previous file with comments | « src/rewriter.cc ('k') | test/mjsunit/debug-sourceinfo.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698