Index: chrome/test/base/module_system_test.cc |
diff --git a/chrome/test/base/module_system_test.cc b/chrome/test/base/module_system_test.cc |
index bfc8308f1576ae9b8592e06962814397009e7e63..88f979b7145a942c326b2b77579634ac84a6146a 100644 |
--- a/chrome/test/base/module_system_test.cc |
+++ b/chrome/test/base/module_system_test.cc |
@@ -62,7 +62,8 @@ base::LazyInstance<V8ExtensionConfigurator>::Leaky g_v8_extension_configurator = |
} // namespace |
// Native JS functions for doing asserts. |
-class ModuleSystemTest::AssertNatives : public ObjectBackedNativeHandler { |
+class ModuleSystemTestEnvironment::AssertNatives |
+ : public ObjectBackedNativeHandler { |
public: |
explicit AssertNatives(extensions::ChromeV8Context* context) |
: ObjectBackedNativeHandler(context), |
@@ -95,7 +96,8 @@ class ModuleSystemTest::AssertNatives : public ObjectBackedNativeHandler { |
}; |
// Source map that operates on std::strings. |
-class ModuleSystemTest::StringSourceMap : public ModuleSystem::SourceMap { |
+class ModuleSystemTestEnvironment::StringSourceMap |
+ : public extensions::ModuleSystem::SourceMap { |
public: |
StringSourceMap() {} |
virtual ~StringSourceMap() {} |
@@ -120,19 +122,20 @@ class ModuleSystemTest::StringSourceMap : public ModuleSystem::SourceMap { |
std::map<std::string, std::string> source_map_; |
}; |
-ModuleSystemTest::ModuleSystemTest() |
- : isolate_(v8::Isolate::GetCurrent()), |
- handle_scope_(isolate_), |
- context_( |
- new extensions::ChromeV8Context( |
- v8::Context::New( |
- isolate_, |
- g_v8_extension_configurator.Get().GetConfiguration()), |
- NULL, // WebFrame |
- NULL, // Extension |
- extensions::Feature::UNSPECIFIED_CONTEXT)), |
- source_map_(new StringSourceMap()), |
- should_assertions_be_made_(true) { |
+ModuleSystemTestEnvironment::ModuleSystemTestEnvironment( |
+ gin::IsolateHolder* isolate_holder) |
+ : isolate_holder_(isolate_holder), |
+ context_holder_(new gin::ContextHolder(isolate_holder_->isolate())), |
+ handle_scope_(isolate_holder_->isolate()), |
+ source_map_(new StringSourceMap()) { |
+ context_holder_->SetContext( |
+ v8::Context::New(isolate_holder->isolate(), |
+ g_v8_extension_configurator.Get().GetConfiguration())); |
+ context_.reset(new extensions::ChromeV8Context( |
+ context_holder_->context(), |
+ NULL, // WebFrame |
+ NULL, // Extension |
+ extensions::Feature::UNSPECIFIED_CONTEXT)); |
context_->v8_context()->Enter(); |
assert_natives_ = new AssertNatives(context_.get()); |
@@ -152,30 +155,33 @@ ModuleSystemTest::ModuleSystemTest() |
scoped_ptr<ModuleSystem::ExceptionHandler>(new FailsOnException)); |
} |
-ModuleSystemTest::~ModuleSystemTest() { |
- context_->v8_context()->Exit(); |
+ModuleSystemTestEnvironment::~ModuleSystemTestEnvironment() { |
+ if (context_) |
+ context_->v8_context()->Exit(); |
} |
-void ModuleSystemTest::RegisterModule(const std::string& name, |
- const std::string& code) { |
+void ModuleSystemTestEnvironment::RegisterModule(const std::string& name, |
+ const std::string& code) { |
source_map_->RegisterModule(name, code); |
} |
-void ModuleSystemTest::RegisterModule(const std::string& name, |
- int resource_id) { |
+void ModuleSystemTestEnvironment::RegisterModule(const std::string& name, |
+ int resource_id) { |
const std::string& code = ResourceBundle::GetSharedInstance(). |
GetRawDataResource(resource_id).as_string(); |
source_map_->RegisterModule(name, code); |
} |
-void ModuleSystemTest::OverrideNativeHandler(const std::string& name, |
- const std::string& code) { |
+void ModuleSystemTestEnvironment::OverrideNativeHandler( |
+ const std::string& name, |
+ const std::string& code) { |
RegisterModule(name, code); |
context_->module_system()->OverrideNativeHandlerForTest(name); |
} |
-void ModuleSystemTest::RegisterTestFile(const std::string& module_name, |
- const std::string& file_name) { |
+void ModuleSystemTestEnvironment::RegisterTestFile( |
+ const std::string& module_name, |
+ const std::string& file_name) { |
base::FilePath test_js_file_path; |
ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_js_file_path)); |
test_js_file_path = test_js_file_path.AppendASCII("extensions") |
@@ -185,22 +191,49 @@ void ModuleSystemTest::RegisterTestFile(const std::string& module_name, |
source_map_->RegisterModule(module_name, test_js); |
} |
-void ModuleSystemTest::TearDown() { |
- // All tests must assert at least once unless otherwise specified. |
- EXPECT_EQ(should_assertions_be_made_, |
- assert_natives_->assertion_made()); |
- EXPECT_FALSE(assert_natives_->failed()); |
+void ModuleSystemTestEnvironment::ShutdownGin() { |
+ context_holder_.reset(); |
} |
-void ModuleSystemTest::ExpectNoAssertionsMade() { |
- should_assertions_be_made_ = false; |
+void ModuleSystemTestEnvironment::ShutdownModuleSystem() { |
+ context_->v8_context()->Exit(); |
+ context_.reset(); |
} |
-v8::Handle<v8::Object> ModuleSystemTest::CreateGlobal(const std::string& name) { |
- v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
+v8::Handle<v8::Object> ModuleSystemTestEnvironment::CreateGlobal( |
+ const std::string& name) { |
+ v8::Isolate* isolate = isolate_holder_->isolate(); |
v8::EscapableHandleScope handle_scope(isolate); |
v8::Local<v8::Object> object = v8::Object::New(isolate); |
isolate->GetCurrentContext()->Global()->Set( |
v8::String::NewFromUtf8(isolate, name.c_str()), object); |
return handle_scope.Escape(object); |
} |
+ |
+ModuleSystemTest::ModuleSystemTest() |
+ : isolate_holder_(v8::Isolate::GetCurrent(), NULL), |
+ env_(CreateEnvironment()), |
+ should_assertions_be_made_(true) { |
+} |
+ |
+ModuleSystemTest::~ModuleSystemTest() { |
+} |
+ |
+void ModuleSystemTest::TearDown() { |
+ // All tests must assert at least once unless otherwise specified. |
+ EXPECT_EQ(should_assertions_be_made_, |
+ env_->assert_natives()->assertion_made()); |
+ EXPECT_FALSE(env_->assert_natives()->failed()); |
+} |
+ |
+scoped_ptr<ModuleSystemTestEnvironment> ModuleSystemTest::CreateEnvironment() { |
+ return make_scoped_ptr(new ModuleSystemTestEnvironment(&isolate_holder_)); |
+} |
+ |
+void ModuleSystemTest::ExpectNoAssertionsMade() { |
+ should_assertions_be_made_ = false; |
+} |
+ |
+void ModuleSystemTest::RunResolvedPromises() { |
+ isolate_holder_.isolate()->RunMicrotasks(); |
+} |