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 12428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12439 void ApiTestFuzzer::TearDown() { | 12439 void ApiTestFuzzer::TearDown() { |
12440 fuzzing_ = false; | 12440 fuzzing_ = false; |
12441 for (int i = 0; i < RegisterThreadedTest::count(); i++) { | 12441 for (int i = 0; i < RegisterThreadedTest::count(); i++) { |
12442 ApiTestFuzzer *fuzzer = RegisterThreadedTest::nth(i)->fuzzer_; | 12442 ApiTestFuzzer *fuzzer = RegisterThreadedTest::nth(i)->fuzzer_; |
12443 if (fuzzer != NULL) fuzzer->Join(); | 12443 if (fuzzer != NULL) fuzzer->Join(); |
12444 } | 12444 } |
12445 } | 12445 } |
12446 | 12446 |
12447 | 12447 |
12448 // Lets not be needlessly self-referential. | 12448 // Lets not be needlessly self-referential. |
12449 UNINITIALIZED_TEST(Threading1) { | 12449 TEST(Threading1) { |
12450 ApiTestFuzzer::SetUp(ApiTestFuzzer::FIRST_PART); | 12450 ApiTestFuzzer::SetUp(ApiTestFuzzer::FIRST_PART); |
12451 ApiTestFuzzer::RunAllTests(); | 12451 ApiTestFuzzer::RunAllTests(); |
12452 ApiTestFuzzer::TearDown(); | 12452 ApiTestFuzzer::TearDown(); |
12453 } | 12453 } |
12454 | 12454 |
12455 | 12455 |
12456 UNINITIALIZED_TEST(Threading2) { | 12456 TEST(Threading2) { |
12457 ApiTestFuzzer::SetUp(ApiTestFuzzer::SECOND_PART); | 12457 ApiTestFuzzer::SetUp(ApiTestFuzzer::SECOND_PART); |
12458 ApiTestFuzzer::RunAllTests(); | 12458 ApiTestFuzzer::RunAllTests(); |
12459 ApiTestFuzzer::TearDown(); | 12459 ApiTestFuzzer::TearDown(); |
12460 } | 12460 } |
12461 | 12461 |
12462 | 12462 |
12463 UNINITIALIZED_TEST(Threading3) { | 12463 TEST(Threading3) { |
12464 ApiTestFuzzer::SetUp(ApiTestFuzzer::THIRD_PART); | 12464 ApiTestFuzzer::SetUp(ApiTestFuzzer::THIRD_PART); |
12465 ApiTestFuzzer::RunAllTests(); | 12465 ApiTestFuzzer::RunAllTests(); |
12466 ApiTestFuzzer::TearDown(); | 12466 ApiTestFuzzer::TearDown(); |
12467 } | 12467 } |
12468 | 12468 |
12469 | 12469 |
12470 UNINITIALIZED_TEST(Threading4) { | 12470 TEST(Threading4) { |
12471 ApiTestFuzzer::SetUp(ApiTestFuzzer::FOURTH_PART); | 12471 ApiTestFuzzer::SetUp(ApiTestFuzzer::FOURTH_PART); |
12472 ApiTestFuzzer::RunAllTests(); | 12472 ApiTestFuzzer::RunAllTests(); |
12473 ApiTestFuzzer::TearDown(); | 12473 ApiTestFuzzer::TearDown(); |
12474 } | 12474 } |
12475 | 12475 |
12476 | 12476 |
12477 void ApiTestFuzzer::CallTest() { | 12477 void ApiTestFuzzer::CallTest() { |
| 12478 v8::Isolate::Scope scope(CcTest::isolate()); |
12478 if (kLogThreading) | 12479 if (kLogThreading) |
12479 printf("Start test %d\n", test_number_); | 12480 printf("Start test %d\n", test_number_); |
12480 CallTestNumber(test_number_); | 12481 CallTestNumber(test_number_); |
12481 if (kLogThreading) | 12482 if (kLogThreading) |
12482 printf("End test %d\n", test_number_); | 12483 printf("End test %d\n", test_number_); |
12483 } | 12484 } |
12484 | 12485 |
12485 | 12486 |
12486 static void ThrowInJS(const v8::FunctionCallbackInfo<v8::Value>& args) { | 12487 static void ThrowInJS(const v8::FunctionCallbackInfo<v8::Value>& args) { |
12487 CHECK(v8::Locker::IsLocked(CcTest::isolate())); | 12488 CHECK(v8::Locker::IsLocked(CcTest::isolate())); |
(...skipping 1762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14250 } | 14251 } |
14251 private: | 14252 private: |
14252 RegExpInterruptTest* test_; | 14253 RegExpInterruptTest* test_; |
14253 }; | 14254 }; |
14254 | 14255 |
14255 void CollectGarbage() { | 14256 void CollectGarbage() { |
14256 block_.Wait(); | 14257 block_.Wait(); |
14257 while (gc_during_regexp_ < kRequiredGCs) { | 14258 while (gc_during_regexp_ < kRequiredGCs) { |
14258 { | 14259 { |
14259 v8::Locker lock(CcTest::isolate()); | 14260 v8::Locker lock(CcTest::isolate()); |
| 14261 v8::Isolate::Scope isolate_scope(CcTest::isolate()); |
14260 // TODO(lrn): Perhaps create some garbage before collecting. | 14262 // TODO(lrn): Perhaps create some garbage before collecting. |
14261 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | 14263 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
14262 gc_count_++; | 14264 gc_count_++; |
14263 } | 14265 } |
14264 i::OS::Sleep(1); | 14266 i::OS::Sleep(1); |
14265 } | 14267 } |
14266 gc_success_ = true; | 14268 gc_success_ = true; |
14267 } | 14269 } |
14268 | 14270 |
14269 void LongRunningRegExp() { | 14271 void LongRunningRegExp() { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14308 i::Semaphore block_; | 14310 i::Semaphore block_; |
14309 int gc_count_; | 14311 int gc_count_; |
14310 int gc_during_regexp_; | 14312 int gc_during_regexp_; |
14311 bool regexp_success_; | 14313 bool regexp_success_; |
14312 bool gc_success_; | 14314 bool gc_success_; |
14313 }; | 14315 }; |
14314 | 14316 |
14315 | 14317 |
14316 // Test that a regular expression execution can be interrupted and | 14318 // Test that a regular expression execution can be interrupted and |
14317 // survive a garbage collection. | 14319 // survive a garbage collection. |
14318 UNINITIALIZED_TEST(RegExpInterruption) { | 14320 TEST(RegExpInterruption) { |
14319 v8::Locker lock(CcTest::isolate()); | 14321 v8::Locker lock(CcTest::isolate()); |
14320 v8::V8::Initialize(); | |
14321 v8::HandleScope scope(CcTest::isolate()); | 14322 v8::HandleScope scope(CcTest::isolate()); |
14322 Local<Context> local_env; | 14323 Local<Context> local_env; |
14323 { | 14324 { |
14324 LocalContext env; | 14325 LocalContext env; |
14325 local_env = env.local(); | 14326 local_env = env.local(); |
14326 } | 14327 } |
14327 | 14328 |
14328 // Local context should still be live. | 14329 // Local context should still be live. |
14329 CHECK(!local_env.IsEmpty()); | 14330 CHECK(!local_env.IsEmpty()); |
14330 local_env->Enter(); | 14331 local_env->Enter(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14372 } | 14373 } |
14373 private: | 14374 private: |
14374 ApplyInterruptTest* test_; | 14375 ApplyInterruptTest* test_; |
14375 }; | 14376 }; |
14376 | 14377 |
14377 void CollectGarbage() { | 14378 void CollectGarbage() { |
14378 block_.Wait(); | 14379 block_.Wait(); |
14379 while (gc_during_apply_ < kRequiredGCs) { | 14380 while (gc_during_apply_ < kRequiredGCs) { |
14380 { | 14381 { |
14381 v8::Locker lock(CcTest::isolate()); | 14382 v8::Locker lock(CcTest::isolate()); |
| 14383 v8::Isolate::Scope isolate_scope(CcTest::isolate()); |
14382 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | 14384 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
14383 gc_count_++; | 14385 gc_count_++; |
14384 } | 14386 } |
14385 i::OS::Sleep(1); | 14387 i::OS::Sleep(1); |
14386 } | 14388 } |
14387 gc_success_ = true; | 14389 gc_success_ = true; |
14388 } | 14390 } |
14389 | 14391 |
14390 void LongRunningApply() { | 14392 void LongRunningApply() { |
14391 block_.Signal(); | 14393 block_.Signal(); |
(...skipping 24 matching lines...) Expand all Loading... |
14416 i::Semaphore block_; | 14418 i::Semaphore block_; |
14417 int gc_count_; | 14419 int gc_count_; |
14418 int gc_during_apply_; | 14420 int gc_during_apply_; |
14419 bool apply_success_; | 14421 bool apply_success_; |
14420 bool gc_success_; | 14422 bool gc_success_; |
14421 }; | 14423 }; |
14422 | 14424 |
14423 | 14425 |
14424 // Test that nothing bad happens if we get a preemption just when we were | 14426 // Test that nothing bad happens if we get a preemption just when we were |
14425 // about to do an apply(). | 14427 // about to do an apply(). |
14426 UNINITIALIZED_TEST(ApplyInterruption) { | 14428 TEST(ApplyInterruption) { |
14427 v8::Locker lock(CcTest::isolate()); | 14429 v8::Locker lock(CcTest::isolate()); |
14428 v8::V8::Initialize(); | 14430 v8::V8::Initialize(); |
14429 v8::HandleScope scope(CcTest::isolate()); | 14431 v8::HandleScope scope(CcTest::isolate()); |
14430 Local<Context> local_env; | 14432 Local<Context> local_env; |
14431 { | 14433 { |
14432 LocalContext env; | 14434 LocalContext env; |
14433 local_env = env.local(); | 14435 local_env = env.local(); |
14434 } | 14436 } |
14435 | 14437 |
14436 // Local context should still be live. | 14438 // Local context should still be live. |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14687 private: | 14689 private: |
14688 RegExpStringModificationTest* test_; | 14690 RegExpStringModificationTest* test_; |
14689 }; | 14691 }; |
14690 | 14692 |
14691 void MorphString() { | 14693 void MorphString() { |
14692 block_.Wait(); | 14694 block_.Wait(); |
14693 while (morphs_during_regexp_ < kRequiredModifications && | 14695 while (morphs_during_regexp_ < kRequiredModifications && |
14694 morphs_ < kMaxModifications) { | 14696 morphs_ < kMaxModifications) { |
14695 { | 14697 { |
14696 v8::Locker lock(CcTest::isolate()); | 14698 v8::Locker lock(CcTest::isolate()); |
| 14699 v8::Isolate::Scope isolate_scope(CcTest::isolate()); |
14697 // Swap string between ascii and two-byte representation. | 14700 // Swap string between ascii and two-byte representation. |
14698 i::String* string = *input_; | 14701 i::String* string = *input_; |
14699 MorphAString(string, &ascii_resource_, &uc16_resource_); | 14702 MorphAString(string, &ascii_resource_, &uc16_resource_); |
14700 morphs_++; | 14703 morphs_++; |
14701 } | 14704 } |
14702 i::OS::Sleep(1); | 14705 i::OS::Sleep(1); |
14703 } | 14706 } |
14704 morph_success_ = true; | 14707 morph_success_ = true; |
14705 } | 14708 } |
14706 | 14709 |
(...skipping 26 matching lines...) Expand all Loading... |
14733 bool regexp_success_; | 14736 bool regexp_success_; |
14734 bool morph_success_; | 14737 bool morph_success_; |
14735 i::Handle<i::String> input_; | 14738 i::Handle<i::String> input_; |
14736 AsciiVectorResource ascii_resource_; | 14739 AsciiVectorResource ascii_resource_; |
14737 UC16VectorResource uc16_resource_; | 14740 UC16VectorResource uc16_resource_; |
14738 }; | 14741 }; |
14739 | 14742 |
14740 | 14743 |
14741 // Test that a regular expression execution can be interrupted and | 14744 // Test that a regular expression execution can be interrupted and |
14742 // the string changed without failing. | 14745 // the string changed without failing. |
14743 UNINITIALIZED_TEST(RegExpStringModification) { | 14746 TEST(RegExpStringModification) { |
14744 v8::Locker lock(CcTest::isolate()); | 14747 v8::Locker lock(CcTest::isolate()); |
14745 v8::V8::Initialize(); | |
14746 v8::HandleScope scope(CcTest::isolate()); | 14748 v8::HandleScope scope(CcTest::isolate()); |
14747 Local<Context> local_env; | 14749 Local<Context> local_env; |
14748 { | 14750 { |
14749 LocalContext env; | 14751 LocalContext env; |
14750 local_env = env.local(); | 14752 local_env = env.local(); |
14751 } | 14753 } |
14752 | 14754 |
14753 // Local context should still be live. | 14755 // Local context should still be live. |
14754 CHECK(!local_env.IsEmpty()); | 14756 CHECK(!local_env.IsEmpty()); |
14755 local_env->Enter(); | 14757 local_env->Enter(); |
(...skipping 4975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19731 i::Handle<i::Object> true_value = factory->true_value(); | 19733 i::Handle<i::Object> true_value = factory->true_value(); |
19732 CHECK(*v8::Utils::OpenHandle(*v8::True()) == *true_value); | 19734 CHECK(*v8::Utils::OpenHandle(*v8::True()) == *true_value); |
19733 CHECK(*v8::Utils::OpenHandle(*v8::True(isolate)) == *true_value); | 19735 CHECK(*v8::Utils::OpenHandle(*v8::True(isolate)) == *true_value); |
19734 i::Handle<i::Object> false_value = factory->false_value(); | 19736 i::Handle<i::Object> false_value = factory->false_value(); |
19735 CHECK(*v8::Utils::OpenHandle(*v8::False()) == *false_value); | 19737 CHECK(*v8::Utils::OpenHandle(*v8::False()) == *false_value); |
19736 CHECK(*v8::Utils::OpenHandle(*v8::False(isolate)) == *false_value); | 19738 CHECK(*v8::Utils::OpenHandle(*v8::False(isolate)) == *false_value); |
19737 } | 19739 } |
19738 | 19740 |
19739 | 19741 |
19740 UNINITIALIZED_TEST(IsolateEmbedderData) { | 19742 UNINITIALIZED_TEST(IsolateEmbedderData) { |
19741 v8::Isolate* isolate = CcTest::isolate(); | 19743 CcTest::DisableAutomaticDispose(); |
| 19744 v8::Isolate* isolate = v8::Isolate::New(); |
| 19745 isolate->Enter(); |
19742 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 19746 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
19743 CHECK_EQ(NULL, isolate->GetData()); | 19747 CHECK_EQ(NULL, isolate->GetData()); |
19744 CHECK_EQ(NULL, i_isolate->GetData()); | 19748 CHECK_EQ(NULL, i_isolate->GetData()); |
19745 static void* data1 = reinterpret_cast<void*>(0xacce55ed); | 19749 static void* data1 = reinterpret_cast<void*>(0xacce55ed); |
19746 isolate->SetData(data1); | 19750 isolate->SetData(data1); |
19747 CHECK_EQ(data1, isolate->GetData()); | 19751 CHECK_EQ(data1, isolate->GetData()); |
19748 CHECK_EQ(data1, i_isolate->GetData()); | 19752 CHECK_EQ(data1, i_isolate->GetData()); |
19749 static void* data2 = reinterpret_cast<void*>(0xdecea5ed); | 19753 static void* data2 = reinterpret_cast<void*>(0xdecea5ed); |
19750 i_isolate->SetData(data2); | 19754 i_isolate->SetData(data2); |
19751 CHECK_EQ(data2, isolate->GetData()); | 19755 CHECK_EQ(data2, isolate->GetData()); |
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20593 Local<Object> data2 = v8::Object::New(); | 20597 Local<Object> data2 = v8::Object::New(); |
20594 function_new_expected_env = data2; | 20598 function_new_expected_env = data2; |
20595 Local<Function> func2 = Function::New(isolate, FunctionNewCallback, data2); | 20599 Local<Function> func2 = Function::New(isolate, FunctionNewCallback, data2); |
20596 CHECK(!func2->IsNull()); | 20600 CHECK(!func2->IsNull()); |
20597 CHECK_NE(func, func2); | 20601 CHECK_NE(func, func2); |
20598 env->Global()->Set(v8_str("func2"), func2); | 20602 env->Global()->Set(v8_str("func2"), func2); |
20599 Local<Value> result2 = CompileRun("func2();"); | 20603 Local<Value> result2 = CompileRun("func2();"); |
20600 CHECK_EQ(v8::Integer::New(17, isolate), result2); | 20604 CHECK_EQ(v8::Integer::New(17, isolate), result2); |
20601 } | 20605 } |
20602 | 20606 |
OLD | NEW |