| Index: test/cctest/cctest.cc
|
| diff --git a/test/cctest/cctest.cc b/test/cctest/cctest.cc
|
| index 616c6a3a6bdf85dcd26433b3403be3cc2a45b03c..0d0927a325cdbbf81d91fadd06d690a77e49fcaf 100644
|
| --- a/test/cctest/cctest.cc
|
| +++ b/test/cctest/cctest.cc
|
| @@ -31,11 +31,12 @@
|
|
|
|
|
| CcTest* CcTest::last_ = NULL;
|
| -
|
| +CcTest::InitializationState CcTest::initialization_state_ = kUnset;
|
|
|
| CcTest::CcTest(TestFunction* callback, const char* file, const char* name,
|
| - const char* dependency, bool enabled)
|
| - : callback_(callback), name_(name), dependency_(dependency), prev_(last_) {
|
| + const char* dependency, bool enabled, bool initialize)
|
| + : callback_(callback), name_(name), dependency_(dependency),
|
| + enabled_(enabled), initialize_(initialize), prev_(last_) {
|
| // Find the base name of this test (const_cast required on Windows).
|
| char *basename = strrchr(const_cast<char *>(file), '/');
|
| if (!basename) {
|
| @@ -51,12 +52,35 @@ CcTest::CcTest(TestFunction* callback, const char* file, const char* name,
|
| if (extension) *extension = 0;
|
| // Install this test in the list of tests
|
| file_ = basename;
|
| - enabled_ = enabled;
|
| prev_ = last_;
|
| last_ = this;
|
| }
|
|
|
|
|
| +void CcTest::Run() {
|
| + if (!initialize_) {
|
| + CHECK(initialization_state_ != kInitialized);
|
| + initialization_state_ = kUnintialized;
|
| + // TODO(dcarney): Remove this when default isolate is gone.
|
| + if (default_isolate_ == NULL) {
|
| + default_isolate_ = v8::Isolate::GetCurrent();
|
| + }
|
| + } else {
|
| + CHECK(initialization_state_ != kUnintialized);
|
| + initialization_state_ = kInitialized;
|
| + i::Isolate::SetCrashIfDefaultIsolateInitialized();
|
| + if (default_isolate_ == NULL) {
|
| + default_isolate_ = v8::Isolate::New();
|
| + }
|
| + default_isolate_->Enter();
|
| + }
|
| + callback_();
|
| + if (initialize_) {
|
| + default_isolate_->Exit();
|
| + }
|
| +}
|
| +
|
| +
|
| v8::Persistent<v8::Context> CcTest::context_;
|
|
|
|
|
| @@ -95,7 +119,7 @@ static void PrintTestList(CcTest* current) {
|
| }
|
|
|
|
|
| -v8::Isolate* CcTest::default_isolate_;
|
| +v8::Isolate* CcTest::default_isolate_ = NULL;
|
|
|
|
|
| class CcTestArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
| @@ -120,8 +144,6 @@ int main(int argc, char* argv[]) {
|
| CcTestArrayBufferAllocator array_buffer_allocator;
|
| v8::V8::SetArrayBufferAllocator(&array_buffer_allocator);
|
|
|
| - CcTest::set_default_isolate(v8::Isolate::GetCurrent());
|
| - CHECK(CcTest::default_isolate() != NULL);
|
| int tests_run = 0;
|
| bool print_run_count = true;
|
| for (int i = 1; i < argc; i++) {
|
|
|