Index: chrome/renderer/extensions/module_system_unittest.cc |
diff --git a/chrome/renderer/extensions/module_system_unittest.cc b/chrome/renderer/extensions/module_system_unittest.cc |
index 84ccd7fc1dd0da957e85d4a3c23b710fef643885..f99cb622256b6450e7dee2883764ae73b2595d7a 100644 |
--- a/chrome/renderer/extensions/module_system_unittest.cc |
+++ b/chrome/renderer/extensions/module_system_unittest.cc |
@@ -5,6 +5,7 @@ |
#include "base/memory/scoped_ptr.h" |
#include "chrome/test/base/module_system_test.h" |
#include "extensions/renderer/module_system.h" |
+#include "gin/modules/module_registry.h" |
// TODO(cduvall/kalman): Put this file in extensions namespace. |
using extensions::ModuleSystem; |
@@ -51,14 +52,14 @@ class TestExceptionHandler : public ModuleSystem::ExceptionHandler { |
TEST_F(ModuleSystemTest, TestExceptionHandling) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
+ env()->module_system()); |
TestExceptionHandler* handler = new TestExceptionHandler; |
scoped_ptr<ModuleSystem::ExceptionHandler> scoped_handler(handler); |
ASSERT_FALSE(handler->handled_exception()); |
- context_->module_system()->SetExceptionHandlerForTest(scoped_handler.Pass()); |
+ env()->module_system()->SetExceptionHandlerForTest(scoped_handler.Pass()); |
- RegisterModule("test", "throw 'hi';"); |
- context_->module_system()->Require("test"); |
+ env()->RegisterModule("test", "throw 'hi';"); |
+ env()->module_system()->Require("test"); |
ASSERT_TRUE(handler->handled_exception()); |
ExpectNoAssertionsMade(); |
@@ -66,210 +67,423 @@ TEST_F(ModuleSystemTest, TestExceptionHandling) { |
TEST_F(ModuleSystemTest, TestRequire) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- RegisterModule("add", "exports.Add = function(x, y) { return x + y; };"); |
- RegisterModule("test", |
- "var Add = require('add').Add;" |
- "requireNative('assert').AssertTrue(Add(3, 5) == 8);"); |
- context_->module_system()->Require("test"); |
+ env()->module_system()); |
+ env()->RegisterModule("add", |
+ "exports.Add = function(x, y) { return x + y; };"); |
+ env()->RegisterModule("test", |
+ "var Add = require('add').Add;" |
+ "requireNative('assert').AssertTrue(Add(3, 5) == 8);"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestNestedRequire) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- RegisterModule("add", "exports.Add = function(x, y) { return x + y; };"); |
- RegisterModule("double", |
- "var Add = require('add').Add;" |
- "exports.Double = function(x) { return Add(x, x); };"); |
- RegisterModule("test", |
- "var Double = require('double').Double;" |
- "requireNative('assert').AssertTrue(Double(3) == 6);"); |
- context_->module_system()->Require("test"); |
+ env()->module_system()); |
+ env()->RegisterModule("add", |
+ "exports.Add = function(x, y) { return x + y; };"); |
+ env()->RegisterModule("double", |
+ "var Add = require('add').Add;" |
+ "exports.Double = function(x) { return Add(x, x); };"); |
+ env()->RegisterModule("test", |
+ "var Double = require('double').Double;" |
+ "requireNative('assert').AssertTrue(Double(3) == 6);"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestModuleInsulation) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- RegisterModule("x", |
- "var x = 10;" |
- "exports.X = function() { return x; };"); |
- RegisterModule("y", |
- "var x = 15;" |
- "require('x');" |
- "exports.Y = function() { return x; };"); |
- RegisterModule("test", |
- "var Y = require('y').Y;" |
- "var X = require('x').X;" |
- "var assert = requireNative('assert');" |
- "assert.AssertTrue(!this.hasOwnProperty('x'));" |
- "assert.AssertTrue(Y() == 15);" |
- "assert.AssertTrue(X() == 10);"); |
- context_->module_system()->Require("test"); |
+ env()->module_system()); |
+ env()->RegisterModule("x", |
+ "var x = 10;" |
+ "exports.X = function() { return x; };"); |
+ env()->RegisterModule("y", |
+ "var x = 15;" |
+ "require('x');" |
+ "exports.Y = function() { return x; };"); |
+ env()->RegisterModule("test", |
+ "var Y = require('y').Y;" |
+ "var X = require('x').X;" |
+ "var assert = requireNative('assert');" |
+ "assert.AssertTrue(!this.hasOwnProperty('x'));" |
+ "assert.AssertTrue(Y() == 15);" |
+ "assert.AssertTrue(X() == 10);"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestNativesAreDisabledOutsideANativesEnabledScope) { |
- RegisterModule("test", |
- "var assert;" |
- "try {" |
- " assert = requireNative('assert');" |
- "} catch (e) {" |
- " var caught = true;" |
- "}" |
- "if (assert) {" |
- " assert.AssertTrue(true);" |
- "}"); |
- context_->module_system()->Require("test"); |
+ env()->RegisterModule("test", |
+ "var assert;" |
+ "try {" |
+ " assert = requireNative('assert');" |
+ "} catch (e) {" |
+ " var caught = true;" |
+ "}" |
+ "if (assert) {" |
+ " assert.AssertTrue(true);" |
+ "}"); |
+ env()->module_system()->Require("test"); |
ExpectNoAssertionsMade(); |
} |
TEST_F(ModuleSystemTest, TestNativesAreEnabledWithinANativesEnabledScope) { |
- RegisterModule("test", |
- "var assert = requireNative('assert');" |
- "assert.AssertTrue(true);"); |
+ env()->RegisterModule("test", |
+ "var assert = requireNative('assert');" |
+ "assert.AssertTrue(true);"); |
{ |
- ModuleSystem::NativesEnabledScope natives_enabled( |
- context_->module_system()); |
+ ModuleSystem::NativesEnabledScope natives_enabled(env()->module_system()); |
{ |
ModuleSystem::NativesEnabledScope natives_enabled_inner( |
- context_->module_system()); |
+ env()->module_system()); |
} |
- context_->module_system()->Require("test"); |
+ env()->module_system()->Require("test"); |
} |
} |
TEST_F(ModuleSystemTest, TestLazyField) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- RegisterModule("lazy", |
- "exports.x = 5;"); |
+ env()->module_system()); |
+ env()->RegisterModule("lazy", "exports.x = 5;"); |
- v8::Handle<v8::Object> object = CreateGlobal("object"); |
+ v8::Handle<v8::Object> object = env()->CreateGlobal("object"); |
- context_->module_system()->SetLazyField(object, "blah", "lazy", "x"); |
+ env()->module_system()->SetLazyField(object, "blah", "lazy", "x"); |
- RegisterModule("test", |
- "var assert = requireNative('assert');" |
- "assert.AssertTrue(object.blah == 5);"); |
- context_->module_system()->Require("test"); |
+ env()->RegisterModule("test", |
+ "var assert = requireNative('assert');" |
+ "assert.AssertTrue(object.blah == 5);"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- RegisterModule("lazy", |
+ env()->module_system()); |
+ env()->RegisterModule( |
+ "lazy", |
"var object = {};" |
"object.__defineGetter__('z', function() { return 1; });" |
"object.x = 5;" |
"object.y = function() { return 10; };" |
"exports.object = object;"); |
- v8::Handle<v8::Object> object = CreateGlobal("object"); |
+ v8::Handle<v8::Object> object = env()->CreateGlobal("object"); |
- context_->module_system()->SetLazyField(object, "thing", "lazy", "object"); |
+ env()->module_system()->SetLazyField(object, "thing", "lazy", "object"); |
- RegisterModule("test", |
- "var assert = requireNative('assert');" |
- "assert.AssertTrue(object.thing.x == 5);" |
- "assert.AssertTrue(object.thing.y() == 10);" |
- "assert.AssertTrue(object.thing.z == 1);" |
- ); |
- context_->module_system()->Require("test"); |
+ env()->RegisterModule("test", |
+ "var assert = requireNative('assert');" |
+ "assert.AssertTrue(object.thing.x == 5);" |
+ "assert.AssertTrue(object.thing.y() == 10);" |
+ "assert.AssertTrue(object.thing.z == 1);"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- context_->module_system()->RegisterNativeHandler( |
+ env()->module_system()); |
+ env()->module_system()->RegisterNativeHandler( |
"counter", |
- scoped_ptr<NativeHandler>(new CounterNatives(context_.get()))); |
- RegisterModule("lazy", |
- "requireNative('counter').Increment();" |
- "exports.x = 5;"); |
- |
- v8::Handle<v8::Object> object = CreateGlobal("object"); |
- |
- context_->module_system()->SetLazyField(object, "x", "lazy", "x"); |
- |
- RegisterModule("test", |
- "var assert = requireNative('assert');" |
- "var counter = requireNative('counter');" |
- "assert.AssertTrue(counter.Get() == 0);" |
- "object.x;" |
- "assert.AssertTrue(counter.Get() == 1);" |
- "object.x;" |
- "assert.AssertTrue(counter.Get() == 1);"); |
- context_->module_system()->Require("test"); |
+ scoped_ptr<NativeHandler>(new CounterNatives(env()->context()))); |
+ env()->RegisterModule("lazy", |
+ "requireNative('counter').Increment();" |
+ "exports.x = 5;"); |
+ |
+ v8::Handle<v8::Object> object = env()->CreateGlobal("object"); |
+ |
+ env()->module_system()->SetLazyField(object, "x", "lazy", "x"); |
+ |
+ env()->RegisterModule("test", |
+ "var assert = requireNative('assert');" |
+ "var counter = requireNative('counter');" |
+ "assert.AssertTrue(counter.Get() == 0);" |
+ "object.x;" |
+ "assert.AssertTrue(counter.Get() == 1);" |
+ "object.x;" |
+ "assert.AssertTrue(counter.Get() == 1);"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- RegisterModule("lazy", |
- "exports.x = 5;"); |
- v8::Handle<v8::Object> object = CreateGlobal("object"); |
- |
- context_->module_system()->SetLazyField(object, "x", "lazy", "x"); |
- RegisterModule("test", |
- "object.x;" |
- "requireNative('assert').AssertTrue(true);"); |
- context_->module_system()->Require("test"); |
+ env()->module_system()); |
+ env()->RegisterModule("lazy", "exports.x = 5;"); |
+ v8::Handle<v8::Object> object = env()->CreateGlobal("object"); |
+ |
+ env()->module_system()->SetLazyField(object, "x", "lazy", "x"); |
+ env()->RegisterModule("test", |
+ "object.x;" |
+ "requireNative('assert').AssertTrue(true);"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestTransitiveRequire) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- RegisterModule("dependency", |
- "exports.x = 5;"); |
- RegisterModule("lazy", |
- "exports.output = require('dependency');"); |
+ env()->module_system()); |
+ env()->RegisterModule("dependency", "exports.x = 5;"); |
+ env()->RegisterModule("lazy", "exports.output = require('dependency');"); |
- v8::Handle<v8::Object> object = CreateGlobal("object"); |
+ v8::Handle<v8::Object> object = env()->CreateGlobal("object"); |
- context_->module_system()->SetLazyField(object, "thing", "lazy", "output"); |
+ env()->module_system()->SetLazyField(object, "thing", "lazy", "output"); |
- RegisterModule("test", |
- "var assert = requireNative('assert');" |
- "assert.AssertTrue(object.thing.x == 5);"); |
- context_->module_system()->Require("test"); |
+ env()->RegisterModule("test", |
+ "var assert = requireNative('assert');" |
+ "assert.AssertTrue(object.thing.x == 5);"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- context_->module_system()->RegisterNativeHandler( |
+ env()->module_system()); |
+ env()->module_system()->RegisterNativeHandler( |
"counter", |
- scoped_ptr<NativeHandler>(new CounterNatives(context_.get()))); |
- |
- RegisterModule("incrementsWhenEvaled", |
- "requireNative('counter').Increment();"); |
- RegisterModule("test", |
- "var assert = requireNative('assert');" |
- "var counter = requireNative('counter');" |
- "assert.AssertTrue(counter.Get() == 0);" |
- "require('incrementsWhenEvaled');" |
- "assert.AssertTrue(counter.Get() == 1);" |
- "require('incrementsWhenEvaled');" |
- "assert.AssertTrue(counter.Get() == 1);"); |
- |
- context_->module_system()->Require("test"); |
+ scoped_ptr<NativeHandler>(new CounterNatives(env()->context()))); |
+ |
+ env()->RegisterModule("incrementsWhenEvaled", |
+ "requireNative('counter').Increment();"); |
+ env()->RegisterModule("test", |
+ "var assert = requireNative('assert');" |
+ "var counter = requireNative('counter');" |
+ "assert.AssertTrue(counter.Get() == 0);" |
+ "require('incrementsWhenEvaled');" |
+ "assert.AssertTrue(counter.Get() == 1);" |
+ "require('incrementsWhenEvaled');" |
+ "assert.AssertTrue(counter.Get() == 1);"); |
+ |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestOverrideNativeHandler) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- OverrideNativeHandler("assert", "exports.AssertTrue = function() {};"); |
- RegisterModule("test", "requireNative('assert').AssertTrue(true);"); |
+ env()->module_system()); |
+ env()->OverrideNativeHandler("assert", "exports.AssertTrue = function() {};"); |
+ env()->RegisterModule("test", "requireNative('assert').AssertTrue(true);"); |
ExpectNoAssertionsMade(); |
- context_->module_system()->Require("test"); |
+ env()->module_system()->Require("test"); |
} |
TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) { |
ModuleSystem::NativesEnabledScope natives_enabled_scope( |
- context_->module_system()); |
- OverrideNativeHandler("thing", "exports.x = 5;"); |
- RegisterModule("test", |
- "var assert = requireNative('assert');" |
- "assert.AssertTrue(requireNative('thing').x == 5);"); |
- context_->module_system()->Require("test"); |
+ env()->module_system()); |
+ env()->OverrideNativeHandler("thing", "exports.x = 5;"); |
+ env()->RegisterModule("test", |
+ "var assert = requireNative('assert');" |
+ "assert.AssertTrue(requireNative('thing').x == 5);"); |
+ env()->module_system()->Require("test"); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestRequireAsync) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule("add", |
+ "define('add', [], function() {" |
+ " return { Add: function(x, y) { return x + y; } };" |
+ "});"); |
+ env()->RegisterModule("math", |
+ "define('math', ['add'], function(add) {" |
+ " return { Add: add.Add };" |
+ "});"); |
+ env()->RegisterModule( |
+ "test", |
+ "requireAsync('math').then(function(math) {" |
+ " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);" |
+ "});"); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestRequireAsyncInParallel) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule("add", |
+ "define('add', [], function() {" |
+ " return { Add: function(x, y) { return x + y; } };" |
+ "});"); |
+ env()->RegisterModule( |
+ "subtract", |
+ "define('subtract', [], function() {" |
+ " return { Subtract: function(x, y) { return x - y; } };" |
+ "});"); |
+ env()->RegisterModule( |
+ "math", |
+ "exports.AddAndSubtract = function(x, y, z) {" |
+ " return Promise.all([requireAsync('add')," |
+ " requireAsync('subtract')" |
+ " ]).then(function(modules) {" |
+ " return modules[1].Subtract(modules[0].Add(x, y), z);" |
+ " });" |
+ "};"); |
+ env()->RegisterModule("test", |
+ "var AddAndSubtract = require('math').AddAndSubtract;" |
+ "AddAndSubtract(3, 5, 2).then(function(result) {" |
+ " requireNative('assert').AssertTrue(result == 6);" |
+ "});"); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestNestedRequireAsyncs) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule("first", |
+ "define('first', [], function() {" |
+ " return { next: 'second' };" |
+ "});"); |
+ env()->RegisterModule("second", |
+ "define('second', [], function() {" |
+ " return { next: '' };" |
+ "});"); |
+ env()->RegisterModule( |
+ "test", |
+ "requireAsync('first').then(function(module) {" |
+ " return requireAsync(module.next)" |
+ "}).then(function(module) {" |
+ " requireNative('assert').AssertTrue(module.next === '');" |
+ "});"); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestRequireFromAMDModule) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule("add", |
+ "exports.Add = function(x, y) { return x + y; };"); |
+ env()->RegisterModule("math", |
+ "define('math', [], function() {" |
+ " var add = require('add');" |
+ " return { Add: add.Add };" |
+ "});"); |
+ env()->RegisterModule( |
+ "test", |
+ "requireAsync('math').then(function(math) {" |
+ " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);" |
+ "});"); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestRequireAsyncFromAMDModule) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule("add", |
+ "define('add', [], function() {" |
+ " return { Add: function(x, y) { return x + y; } };" |
+ "});"); |
+ env()->RegisterModule("math", |
+ "define('math', [], function() {" |
+ " function Add(x, y) {" |
+ " return requireAsync('add').then(function(add) {" |
+ " return add.Add(x, y);" |
+ " });" |
+ " }" |
+ " return { Add: Add };" |
+ "});"); |
+ env()->RegisterModule("test", |
+ "requireAsync('math').then(function(math) {" |
+ " return math.Add(3, 6);" |
+ "}).then(function(result) {" |
+ " requireNative('assert').AssertTrue(result == 9);" |
+ "});"); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestRequireAsyncFromAnotherContext) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule( |
+ "test", |
+ "requireAsync('natives').then(function(natives) {" |
+ " natives.requireAsync('ping').then(function(ping) {" |
+ " return ping();" |
+ " }).then(function(result) {" |
+ " requireNative('assert').AssertTrue(result == 'pong');" |
+ " });" |
+ "});"); |
+ scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment(); |
+ other_env->RegisterModule("ping", |
+ "define('ping', ['natives'], function(natives) {" |
+ " return function() {" |
+ " return 'pong';" |
+ " }" |
+ "});"); |
+ gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule( |
+ env()->isolate(), "natives", other_env->module_system()->NewInstance()); |
+ gin::ModuleRegistry::From(other_env->context()->v8_context()) |
+ ->AddBuiltinModule( |
+ env()->isolate(), "natives", env()->module_system()->NewInstance()); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestRequireAsyncBetweenContexts) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule("pong", |
+ "define('pong', [], function() {" |
+ " return function() { return 'done'; };" |
+ "});"); |
+ env()->RegisterModule( |
+ "test", |
+ "requireAsync('natives').then(function(natives) {" |
+ " natives.requireAsync('ping').then(function(ping) {" |
+ " return ping();" |
+ " }).then(function(pong) {" |
+ " return pong();" |
+ " }).then(function(result) {" |
+ " requireNative('assert').AssertTrue(result == 'done');" |
+ " });" |
+ "});"); |
+ scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment(); |
+ other_env->RegisterModule("ping", |
+ "define('ping', ['natives'], function(natives) {" |
+ " return function() {" |
+ " return natives.requireAsync('pong');" |
+ " }" |
+ "});"); |
+ gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule( |
+ env()->isolate(), "natives", other_env->module_system()->NewInstance()); |
+ gin::ModuleRegistry::From(other_env->context()->v8_context()) |
+ ->AddBuiltinModule( |
+ env()->isolate(), "natives", env()->module_system()->NewInstance()); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestRequireAsyncFromContextWithNoModuleRegistry) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule("test", |
+ "requireAsync('natives').then(function(natives) {" |
+ " var AssertTrue = requireNative('assert').AssertTrue;" |
+ " natives.requireAsync('foo').then(function() {" |
+ " AssertTrue(false);" |
+ " }).catch(function(error) {" |
+ " AssertTrue(error.message == " |
+ " 'Extension view no longer exists');" |
+ " });" |
+ "});"); |
+ scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment(); |
+ gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule( |
+ env()->isolate(), "natives", other_env->module_system()->NewInstance()); |
+ other_env->ShutdownGin(); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
+} |
+ |
+TEST_F(ModuleSystemTest, TestRequireAsyncFromContextWithNoModuleSystem) { |
+ ModuleSystem::NativesEnabledScope natives_enabled_scope( |
+ env()->module_system()); |
+ env()->RegisterModule("test", |
+ "requireAsync('natives').then(function(natives) {" |
+ " requireNative('assert').AssertTrue(" |
+ " natives.requireAsync('foo') === undefined);" |
+ "});"); |
+ scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment(); |
+ gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule( |
+ env()->isolate(), "natives", other_env->module_system()->NewInstance()); |
+ other_env->ShutdownModuleSystem(); |
+ env()->module_system()->Require("test"); |
+ RunResolvedPromises(); |
} |