1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_UNITTESTS_TEST_UTILS_H_
6 #define V8_UNITTESTS_TEST_UTILS_H_
7 
8 #include "include/v8.h"
9 #include "src/base/macros.h"
10 #include "src/base/utils/random-number-generator.h"
11 #include "src/zone.h"
12 #include "testing/gtest-support.h"
13 
14 namespace v8 {
15 
16 class ArrayBufferAllocator;
17 
18 
19 class TestWithIsolate : public virtual ::testing::Test {
20  public:
21   TestWithIsolate();
22   virtual ~TestWithIsolate();
23 
isolate()24   Isolate* isolate() const { return isolate_; }
25 
26   static void SetUpTestCase();
27   static void TearDownTestCase();
28 
29  private:
30   static ArrayBufferAllocator* array_buffer_allocator_;
31   static Isolate* isolate_;
32   Isolate::Scope isolate_scope_;
33   HandleScope handle_scope_;
34 
35   DISALLOW_COPY_AND_ASSIGN(TestWithIsolate);
36 };
37 
38 
39 class TestWithContext : public virtual TestWithIsolate {
40  public:
41   TestWithContext();
42   virtual ~TestWithContext();
43 
context()44   const Local<Context>& context() const { return context_; }
45 
46  private:
47   Local<Context> context_;
48   Context::Scope context_scope_;
49 
50   DISALLOW_COPY_AND_ASSIGN(TestWithContext);
51 };
52 
53 
54 namespace base {
55 
56 class TestWithRandomNumberGenerator : public ::testing::Test {
57  public:
58   TestWithRandomNumberGenerator();
59   virtual ~TestWithRandomNumberGenerator();
60 
rng()61   RandomNumberGenerator* rng() { return &rng_; }
62 
63  private:
64   RandomNumberGenerator rng_;
65 
66   DISALLOW_COPY_AND_ASSIGN(TestWithRandomNumberGenerator);
67 };
68 
69 }  // namespace base
70 
71 
72 namespace internal {
73 
74 // Forward declarations.
75 class Factory;
76 
77 
78 class TestWithIsolate : public virtual ::v8::TestWithIsolate {
79  public:
TestWithIsolate()80   TestWithIsolate() {}
81   virtual ~TestWithIsolate();
82 
83   Factory* factory() const;
isolate()84   Isolate* isolate() const {
85     return reinterpret_cast<Isolate*>(::v8::TestWithIsolate::isolate());
86   }
87   base::RandomNumberGenerator* random_number_generator() const;
88 
89  private:
90   DISALLOW_COPY_AND_ASSIGN(TestWithIsolate);
91 };
92 
93 
94 class TestWithZone : public virtual ::testing::Test {
95  public:
TestWithZone()96   TestWithZone() {}
97   virtual ~TestWithZone();
98 
zone()99   Zone* zone() { return &zone_; }
100 
101  private:
102   Zone zone_;
103 
104   DISALLOW_COPY_AND_ASSIGN(TestWithZone);
105 };
106 
107 
108 class TestWithIsolateAndZone : public virtual TestWithIsolate {
109  public:
TestWithIsolateAndZone()110   TestWithIsolateAndZone() {}
111   virtual ~TestWithIsolateAndZone();
112 
zone()113   Zone* zone() { return &zone_; }
114 
115  private:
116   Zone zone_;
117 
118   DISALLOW_COPY_AND_ASSIGN(TestWithIsolateAndZone);
119 };
120 
121 }  // namespace internal
122 }  // namespace v8
123 
124 #endif  // V8_UNITTESTS_TEST_UTILS_H_
125