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

Side by Side Diff: test/cctest/cctest.h

Issue 2304553002: Include only stuff you need, part 6: Fix cctest.h. (Closed)
Patch Set: Created 4 years, 3 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 | « no previous file | test/cctest/cctest.cc » ('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 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 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 10 matching lines...) Expand all
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 #ifndef CCTEST_H_ 28 #ifndef CCTEST_H_
29 #define CCTEST_H_ 29 #define CCTEST_H_
30 30
31 #include <memory>
32
31 #include "include/libplatform/libplatform.h" 33 #include "include/libplatform/libplatform.h"
32 #include "src/isolate-inl.h" // TODO(everyone): Make cctest IWYU. 34 #include "include/v8-debug.h"
33 #include "src/objects-inl.h" // TODO(everyone): Make cctest IWYU. 35 #include "src/base/accounting-allocator.h"
36 #include "src/utils.h"
34 #include "src/v8.h" 37 #include "src/v8.h"
35 38
39 namespace v8 {
40 namespace base {
41
42 class RandomNumberGenerator;
43
44 } // namespace base
45
46 namespace internal {
47
48 class HandleScope;
49 class Zone;
50
51 } // namespace internal
52
53 } // namespace v8
54
36 #ifndef TEST 55 #ifndef TEST
37 #define TEST(Name) \ 56 #define TEST(Name) \
38 static void Test##Name(); \ 57 static void Test##Name(); \
39 CcTest register_test_##Name(Test##Name, __FILE__, #Name, true, true); \ 58 CcTest register_test_##Name(Test##Name, __FILE__, #Name, true, true); \
40 static void Test##Name() 59 static void Test##Name()
41 #endif 60 #endif
42 61
43 #ifndef UNINITIALIZED_TEST 62 #ifndef UNINITIALIZED_TEST
44 #define UNINITIALIZED_TEST(Name) \ 63 #define UNINITIALIZED_TEST(Name) \
45 static void Test##Name(); \ 64 static void Test##Name(); \
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 116
98 static i::Isolate* InitIsolateOnce() { 117 static i::Isolate* InitIsolateOnce() {
99 if (!initialize_called_) InitializeVM(); 118 if (!initialize_called_) InitializeVM();
100 return i_isolate(); 119 return i_isolate();
101 } 120 }
102 121
103 static i::Isolate* i_isolate() { 122 static i::Isolate* i_isolate() {
104 return reinterpret_cast<i::Isolate*>(isolate()); 123 return reinterpret_cast<i::Isolate*>(isolate());
105 } 124 }
106 125
107 static i::Heap* heap() { 126 static i::Heap* heap();
108 return i_isolate()->heap();
109 }
110 127
111 static v8::base::RandomNumberGenerator* random_number_generator() { 128 static v8::base::RandomNumberGenerator* random_number_generator();
112 return InitIsolateOnce()->random_number_generator();
113 }
114 129
115 static v8::Local<v8::Object> global() { 130 static v8::Local<v8::Object> global();
116 return isolate()->GetCurrentContext()->Global();
117 }
118 131
119 static v8::ArrayBuffer::Allocator* array_buffer_allocator() { 132 static v8::ArrayBuffer::Allocator* array_buffer_allocator() {
120 return allocator_; 133 return allocator_;
121 } 134 }
122 135
123 static void set_array_buffer_allocator( 136 static void set_array_buffer_allocator(
124 v8::ArrayBuffer::Allocator* allocator) { 137 v8::ArrayBuffer::Allocator* allocator) {
125 allocator_ = allocator; 138 allocator_ = allocator;
126 } 139 }
127 140
128 // TODO(dcarney): Remove. 141 // TODO(dcarney): Remove.
129 // This must be called first in a test. 142 // This must be called first in a test.
130 static void InitializeVM() { 143 static void InitializeVM();
131 CHECK(!v8::base::NoBarrier_Load(&isolate_used_));
132 CHECK(!initialize_called_);
133 initialize_called_ = true;
134 v8::HandleScope handle_scope(CcTest::isolate());
135 v8::Context::New(CcTest::isolate())->Enter();
136 }
137 144
138 // Only for UNINITIALIZED_TESTs 145 // Only for UNINITIALIZED_TESTs
139 static void DisableAutomaticDispose(); 146 static void DisableAutomaticDispose();
140 147
141 // Helper function to configure a context. 148 // Helper function to configure a context.
142 // Must be in a HandleScope. 149 // Must be in a HandleScope.
143 static v8::Local<v8::Context> NewContext( 150 static v8::Local<v8::Context> NewContext(
144 CcTestExtensionFlags extensions, 151 CcTestExtensionFlags extensions,
145 v8::Isolate* isolate = CcTest::isolate()); 152 v8::Isolate* isolate = CcTest::isolate());
146 153
147 static void TearDown() { 154 static void TearDown();
148 if (isolate_ != NULL) isolate_->Dispose();
149 }
150 155
151 private: 156 private:
152 friend int main(int argc, char** argv); 157 friend int main(int argc, char** argv);
153 TestFunction* callback_; 158 TestFunction* callback_;
154 const char* file_; 159 const char* file_;
155 const char* name_; 160 const char* name_;
156 bool enabled_; 161 bool enabled_;
157 bool initialize_; 162 bool initialize_;
158 CcTest* prev_; 163 CcTest* prev_;
159 static CcTest* last_; 164 static CcTest* last_;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 Initialize(isolate, extensions, global_template, global_object); 267 Initialize(isolate, extensions, global_template, global_object);
263 } 268 }
264 269
265 LocalContext(v8::ExtensionConfiguration* extensions = 0, 270 LocalContext(v8::ExtensionConfiguration* extensions = 0,
266 v8::Local<v8::ObjectTemplate> global_template = 271 v8::Local<v8::ObjectTemplate> global_template =
267 v8::Local<v8::ObjectTemplate>(), 272 v8::Local<v8::ObjectTemplate>(),
268 v8::Local<v8::Value> global_object = v8::Local<v8::Value>()) { 273 v8::Local<v8::Value> global_object = v8::Local<v8::Value>()) {
269 Initialize(CcTest::isolate(), extensions, global_template, global_object); 274 Initialize(CcTest::isolate(), extensions, global_template, global_object);
270 } 275 }
271 276
272 virtual ~LocalContext() { 277 virtual ~LocalContext();
273 v8::HandleScope scope(isolate_);
274 v8::Local<v8::Context>::New(isolate_, context_)->Exit();
275 context_.Reset();
276 }
277 278
278 v8::Context* operator->() { 279 v8::Context* operator->() {
279 return *reinterpret_cast<v8::Context**>(&context_); 280 return *reinterpret_cast<v8::Context**>(&context_);
280 } 281 }
281 v8::Context* operator*() { return operator->(); } 282 v8::Context* operator*() { return operator->(); }
282 bool IsReady() { return !context_.IsEmpty(); } 283 bool IsReady() { return !context_.IsEmpty(); }
283 284
284 v8::Local<v8::Context> local() { 285 v8::Local<v8::Context> local() {
285 return v8::Local<v8::Context>::New(isolate_, context_); 286 return v8::Local<v8::Context>::New(isolate_, context_);
286 } 287 }
287 288
288 private: 289 private:
289 void Initialize(v8::Isolate* isolate, v8::ExtensionConfiguration* extensions, 290 void Initialize(v8::Isolate* isolate, v8::ExtensionConfiguration* extensions,
290 v8::Local<v8::ObjectTemplate> global_template, 291 v8::Local<v8::ObjectTemplate> global_template,
291 v8::Local<v8::Value> global_object) { 292 v8::Local<v8::Value> global_object);
292 v8::HandleScope scope(isolate);
293 v8::Local<v8::Context> context = v8::Context::New(isolate,
294 extensions,
295 global_template,
296 global_object);
297 context_.Reset(isolate, context);
298 context->Enter();
299 // We can't do this later perhaps because of a fatal error.
300 isolate_ = isolate;
301 }
302 293
303 v8::Persistent<v8::Context> context_; 294 v8::Persistent<v8::Context> context_;
304 v8::Isolate* isolate_; 295 v8::Isolate* isolate_;
305 }; 296 };
306 297
307 298
308 static inline uint16_t* AsciiToTwoByteString(const char* source) { 299 static inline uint16_t* AsciiToTwoByteString(const char* source) {
309 int array_length = i::StrLength(source) + 1; 300 int array_length = i::StrLength(source) + 1;
310 uint16_t* converted = i::NewArray<uint16_t>(array_length); 301 uint16_t* converted = i::NewArray<uint16_t>(array_length);
311 for (int i = 0; i < array_length; i++) converted[i] = source[i]; 302 for (int i = 0; i < array_length; i++) converted[i] = source[i];
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 v8::Debug::SetDebugEventListener(isolate, nullptr); 551 v8::Debug::SetDebugEventListener(isolate, nullptr);
561 } 552 }
562 553
563 554
564 static inline void EmptyMessageQueues(v8::Isolate* isolate) { 555 static inline void EmptyMessageQueues(v8::Isolate* isolate) {
565 while (v8::platform::PumpMessageLoop(v8::internal::V8::GetCurrentPlatform(), 556 while (v8::platform::PumpMessageLoop(v8::internal::V8::GetCurrentPlatform(),
566 isolate)) { 557 isolate)) {
567 } 558 }
568 } 559 }
569 560
561 class InitializedHandleScopeImpl;
570 562
571 class InitializedHandleScope { 563 class InitializedHandleScope {
572 public: 564 public:
573 InitializedHandleScope() 565 InitializedHandleScope();
574 : main_isolate_(CcTest::InitIsolateOnce()), 566 ~InitializedHandleScope();
575 handle_scope_(main_isolate_) {}
576 567
577 // Prefixing the below with main_ reduces a lot of naming clashes. 568 // Prefixing the below with main_ reduces a lot of naming clashes.
578 i::Isolate* main_isolate() { return main_isolate_; } 569 i::Isolate* main_isolate() { return main_isolate_; }
579 570
580 private: 571 private:
581 i::Isolate* main_isolate_; 572 i::Isolate* main_isolate_;
582 i::HandleScope handle_scope_; 573 std::unique_ptr<InitializedHandleScopeImpl> initialized_handle_scope_impl_;
583 }; 574 };
584 575
585 576
586 class HandleAndZoneScope : public InitializedHandleScope { 577 class HandleAndZoneScope : public InitializedHandleScope {
587 public: 578 public:
588 HandleAndZoneScope() : main_zone_(&allocator_) {} 579 HandleAndZoneScope();
580 ~HandleAndZoneScope();
589 581
590 // Prefixing the below with main_ reduces a lot of naming clashes. 582 // Prefixing the below with main_ reduces a lot of naming clashes.
591 i::Zone* main_zone() { return &main_zone_; } 583 i::Zone* main_zone() { return main_zone_.get(); }
592 584
593 private: 585 private:
594 v8::base::AccountingAllocator allocator_; 586 v8::base::AccountingAllocator allocator_;
595 i::Zone main_zone_; 587 std::unique_ptr<i::Zone> main_zone_;
596 }; 588 };
597 589
598 #endif // ifndef CCTEST_H_ 590 #endif // ifndef CCTEST_H_
OLDNEW
« no previous file with comments | « no previous file | test/cctest/cctest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698