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

Side by Side Diff: chrome/renderer/extensions/module_system_unittest.cc

Issue 359413004: Add support for using AMD modules from extensions modules. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cross-context tests Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "chrome/test/base/module_system_test.h" 6 #include "chrome/test/base/module_system_test.h"
7 #include "extensions/renderer/module_system.h" 7 #include "extensions/renderer/module_system.h"
8 #include "gin/modules/module_registry.h"
8 9
9 // TODO(cduvall/kalman): Put this file in extensions namespace. 10 // TODO(cduvall/kalman): Put this file in extensions namespace.
10 using extensions::ModuleSystem; 11 using extensions::ModuleSystem;
11 using extensions::NativeHandler; 12 using extensions::NativeHandler;
12 using extensions::ObjectBackedNativeHandler; 13 using extensions::ObjectBackedNativeHandler;
13 14
14 class CounterNatives : public ObjectBackedNativeHandler { 15 class CounterNatives : public ObjectBackedNativeHandler {
15 public: 16 public:
16 explicit CounterNatives(extensions::ChromeV8Context* context) 17 explicit CounterNatives(extensions::ChromeV8Context* context)
17 : ObjectBackedNativeHandler(context), counter_(0) { 18 : ObjectBackedNativeHandler(context), counter_(0) {
(...skipping 25 matching lines...) Expand all
43 handled_exception_ = true; 44 handled_exception_ = true;
44 } 45 }
45 46
46 bool handled_exception() const { return handled_exception_; } 47 bool handled_exception() const { return handled_exception_; }
47 48
48 private: 49 private:
49 bool handled_exception_; 50 bool handled_exception_;
50 }; 51 };
51 52
52 TEST_F(ModuleSystemTest, TestExceptionHandling) { 53 TEST_F(ModuleSystemTest, TestExceptionHandling) {
53 ModuleSystem::NativesEnabledScope natives_enabled_scope( 54 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
54 context_->module_system());
55 TestExceptionHandler* handler = new TestExceptionHandler; 55 TestExceptionHandler* handler = new TestExceptionHandler;
56 scoped_ptr<ModuleSystem::ExceptionHandler> scoped_handler(handler); 56 scoped_ptr<ModuleSystem::ExceptionHandler> scoped_handler(handler);
57 ASSERT_FALSE(handler->handled_exception()); 57 ASSERT_FALSE(handler->handled_exception());
58 context_->module_system()->SetExceptionHandlerForTest(scoped_handler.Pass()); 58 env_.module_system()->SetExceptionHandlerForTest(scoped_handler.Pass());
59 59
60 RegisterModule("test", "throw 'hi';"); 60 env_.RegisterModule("test", "throw 'hi';");
61 context_->module_system()->Require("test"); 61 env_.module_system()->Require("test");
62 ASSERT_TRUE(handler->handled_exception()); 62 ASSERT_TRUE(handler->handled_exception());
63 63
64 ExpectNoAssertionsMade(); 64 ExpectNoAssertionsMade();
65 } 65 }
66 66
67 TEST_F(ModuleSystemTest, TestRequire) { 67 TEST_F(ModuleSystemTest, TestRequire) {
68 ModuleSystem::NativesEnabledScope natives_enabled_scope( 68 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
69 context_->module_system()); 69 env_.RegisterModule("add", "exports.Add = function(x, y) { return x + y; };");
70 RegisterModule("add", "exports.Add = function(x, y) { return x + y; };"); 70 env_.RegisterModule("test",
71 RegisterModule("test", 71 "var Add = require('add').Add;"
72 "var Add = require('add').Add;" 72 "requireNative('assert').AssertTrue(Add(3, 5) == 8);");
73 "requireNative('assert').AssertTrue(Add(3, 5) == 8);"); 73 env_.module_system()->Require("test");
74 context_->module_system()->Require("test");
75 } 74 }
76 75
77 TEST_F(ModuleSystemTest, TestNestedRequire) { 76 TEST_F(ModuleSystemTest, TestNestedRequire) {
78 ModuleSystem::NativesEnabledScope natives_enabled_scope( 77 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
79 context_->module_system()); 78 env_.RegisterModule("add", "exports.Add = function(x, y) { return x + y; };");
80 RegisterModule("add", "exports.Add = function(x, y) { return x + y; };"); 79 env_.RegisterModule("double",
81 RegisterModule("double", 80 "var Add = require('add').Add;"
82 "var Add = require('add').Add;" 81 "exports.Double = function(x) { return Add(x, x); };");
83 "exports.Double = function(x) { return Add(x, x); };"); 82 env_.RegisterModule("test",
84 RegisterModule("test", 83 "var Double = require('double').Double;"
85 "var Double = require('double').Double;" 84 "requireNative('assert').AssertTrue(Double(3) == 6);");
86 "requireNative('assert').AssertTrue(Double(3) == 6);"); 85 env_.module_system()->Require("test");
87 context_->module_system()->Require("test");
88 } 86 }
89 87
90 TEST_F(ModuleSystemTest, TestModuleInsulation) { 88 TEST_F(ModuleSystemTest, TestModuleInsulation) {
91 ModuleSystem::NativesEnabledScope natives_enabled_scope( 89 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
92 context_->module_system()); 90 env_.RegisterModule("x",
93 RegisterModule("x", 91 "var x = 10;"
94 "var x = 10;" 92 "exports.X = function() { return x; };");
95 "exports.X = function() { return x; };"); 93 env_.RegisterModule("y",
96 RegisterModule("y", 94 "var x = 15;"
97 "var x = 15;" 95 "require('x');"
98 "require('x');" 96 "exports.Y = function() { return x; };");
99 "exports.Y = function() { return x; };"); 97 env_.RegisterModule("test",
100 RegisterModule("test", 98 "var Y = require('y').Y;"
101 "var Y = require('y').Y;" 99 "var X = require('x').X;"
102 "var X = require('x').X;" 100 "var assert = requireNative('assert');"
103 "var assert = requireNative('assert');" 101 "assert.AssertTrue(!this.hasOwnProperty('x'));"
104 "assert.AssertTrue(!this.hasOwnProperty('x'));" 102 "assert.AssertTrue(Y() == 15);"
105 "assert.AssertTrue(Y() == 15);" 103 "assert.AssertTrue(X() == 10);");
106 "assert.AssertTrue(X() == 10);"); 104 env_.module_system()->Require("test");
107 context_->module_system()->Require("test");
108 } 105 }
109 106
110 TEST_F(ModuleSystemTest, TestNativesAreDisabledOutsideANativesEnabledScope) { 107 TEST_F(ModuleSystemTest, TestNativesAreDisabledOutsideANativesEnabledScope) {
111 RegisterModule("test", 108 env_.RegisterModule("test",
112 "var assert;" 109 "var assert;"
113 "try {" 110 "try {"
114 " assert = requireNative('assert');" 111 " assert = requireNative('assert');"
115 "} catch (e) {" 112 "} catch (e) {"
116 " var caught = true;" 113 " var caught = true;"
117 "}" 114 "}"
118 "if (assert) {" 115 "if (assert) {"
119 " assert.AssertTrue(true);" 116 " assert.AssertTrue(true);"
120 "}"); 117 "}");
121 context_->module_system()->Require("test"); 118 env_.module_system()->Require("test");
122 ExpectNoAssertionsMade(); 119 ExpectNoAssertionsMade();
123 } 120 }
124 121
125 TEST_F(ModuleSystemTest, TestNativesAreEnabledWithinANativesEnabledScope) { 122 TEST_F(ModuleSystemTest, TestNativesAreEnabledWithinANativesEnabledScope) {
126 RegisterModule("test", 123 env_.RegisterModule("test",
127 "var assert = requireNative('assert');" 124 "var assert = requireNative('assert');"
128 "assert.AssertTrue(true);"); 125 "assert.AssertTrue(true);");
129 126
130 { 127 {
131 ModuleSystem::NativesEnabledScope natives_enabled( 128 ModuleSystem::NativesEnabledScope natives_enabled(env_.module_system());
132 context_->module_system());
133 { 129 {
134 ModuleSystem::NativesEnabledScope natives_enabled_inner( 130 ModuleSystem::NativesEnabledScope natives_enabled_inner(
135 context_->module_system()); 131 env_.module_system());
136 } 132 }
137 context_->module_system()->Require("test"); 133 env_.module_system()->Require("test");
138 } 134 }
139 } 135 }
140 136
141 TEST_F(ModuleSystemTest, TestLazyField) { 137 TEST_F(ModuleSystemTest, TestLazyField) {
142 ModuleSystem::NativesEnabledScope natives_enabled_scope( 138 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
143 context_->module_system()); 139 env_.RegisterModule("lazy", "exports.x = 5;");
144 RegisterModule("lazy", 140
145 "exports.x = 5;"); 141 v8::Handle<v8::Object> object = env_.CreateGlobal("object");
146 142
147 v8::Handle<v8::Object> object = CreateGlobal("object"); 143 env_.module_system()->SetLazyField(object, "blah", "lazy", "x");
148 144
149 context_->module_system()->SetLazyField(object, "blah", "lazy", "x"); 145 env_.RegisterModule("test",
150 146 "var assert = requireNative('assert');"
151 RegisterModule("test", 147 "assert.AssertTrue(object.blah == 5);");
152 "var assert = requireNative('assert');" 148 env_.module_system()->Require("test");
153 "assert.AssertTrue(object.blah == 5);");
154 context_->module_system()->Require("test");
155 } 149 }
156 150
157 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) { 151 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) {
158 ModuleSystem::NativesEnabledScope natives_enabled_scope( 152 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
159 context_->module_system()); 153 env_.RegisterModule("lazy",
160 RegisterModule("lazy", 154 "var object = {};"
161 "var object = {};" 155 "object.__defineGetter__('z', function() { return 1; });"
162 "object.__defineGetter__('z', function() { return 1; });" 156 "object.x = 5;"
163 "object.x = 5;" 157 "object.y = function() { return 10; };"
164 "object.y = function() { return 10; };" 158 "exports.object = object;");
165 "exports.object = object;"); 159
166 160 v8::Handle<v8::Object> object = env_.CreateGlobal("object");
167 v8::Handle<v8::Object> object = CreateGlobal("object"); 161
168 162 env_.module_system()->SetLazyField(object, "thing", "lazy", "object");
169 context_->module_system()->SetLazyField(object, "thing", "lazy", "object"); 163
170 164 env_.RegisterModule("test",
171 RegisterModule("test", 165 "var assert = requireNative('assert');"
172 "var assert = requireNative('assert');" 166 "assert.AssertTrue(object.thing.x == 5);"
173 "assert.AssertTrue(object.thing.x == 5);" 167 "assert.AssertTrue(object.thing.y() == 10);"
174 "assert.AssertTrue(object.thing.y() == 10);" 168 "assert.AssertTrue(object.thing.z == 1);");
175 "assert.AssertTrue(object.thing.z == 1);" 169 env_.module_system()->Require("test");
176 );
177 context_->module_system()->Require("test");
178 } 170 }
179 171
180 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) { 172 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) {
181 ModuleSystem::NativesEnabledScope natives_enabled_scope( 173 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
182 context_->module_system()); 174 env_.module_system()->RegisterNativeHandler(
183 context_->module_system()->RegisterNativeHandler( 175 "counter", scoped_ptr<NativeHandler>(new CounterNatives(env_.context())));
184 "counter", 176 env_.RegisterModule("lazy",
185 scoped_ptr<NativeHandler>(new CounterNatives(context_.get()))); 177 "requireNative('counter').Increment();"
186 RegisterModule("lazy", 178 "exports.x = 5;");
187 "requireNative('counter').Increment();" 179
188 "exports.x = 5;"); 180 v8::Handle<v8::Object> object = env_.CreateGlobal("object");
189 181
190 v8::Handle<v8::Object> object = CreateGlobal("object"); 182 env_.module_system()->SetLazyField(object, "x", "lazy", "x");
191 183
192 context_->module_system()->SetLazyField(object, "x", "lazy", "x"); 184 env_.RegisterModule("test",
193 185 "var assert = requireNative('assert');"
194 RegisterModule("test", 186 "var counter = requireNative('counter');"
195 "var assert = requireNative('assert');" 187 "assert.AssertTrue(counter.Get() == 0);"
196 "var counter = requireNative('counter');" 188 "object.x;"
197 "assert.AssertTrue(counter.Get() == 0);" 189 "assert.AssertTrue(counter.Get() == 1);"
198 "object.x;" 190 "object.x;"
199 "assert.AssertTrue(counter.Get() == 1);" 191 "assert.AssertTrue(counter.Get() == 1);");
200 "object.x;" 192 env_.module_system()->Require("test");
201 "assert.AssertTrue(counter.Get() == 1);");
202 context_->module_system()->Require("test");
203 } 193 }
204 194
205 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) { 195 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) {
206 ModuleSystem::NativesEnabledScope natives_enabled_scope( 196 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
207 context_->module_system()); 197 env_.RegisterModule("lazy", "exports.x = 5;");
208 RegisterModule("lazy", 198 v8::Handle<v8::Object> object = env_.CreateGlobal("object");
209 "exports.x = 5;"); 199
210 v8::Handle<v8::Object> object = CreateGlobal("object"); 200 env_.module_system()->SetLazyField(object, "x", "lazy", "x");
211 201 env_.RegisterModule("test",
212 context_->module_system()->SetLazyField(object, "x", "lazy", "x"); 202 "object.x;"
213 RegisterModule("test", 203 "requireNative('assert').AssertTrue(true);");
214 "object.x;" 204 env_.module_system()->Require("test");
215 "requireNative('assert').AssertTrue(true);");
216 context_->module_system()->Require("test");
217 } 205 }
218 206
219 TEST_F(ModuleSystemTest, TestTransitiveRequire) { 207 TEST_F(ModuleSystemTest, TestTransitiveRequire) {
220 ModuleSystem::NativesEnabledScope natives_enabled_scope( 208 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
221 context_->module_system()); 209 env_.RegisterModule("dependency", "exports.x = 5;");
222 RegisterModule("dependency", 210 env_.RegisterModule("lazy", "exports.output = require('dependency');");
223 "exports.x = 5;"); 211
224 RegisterModule("lazy", 212 v8::Handle<v8::Object> object = env_.CreateGlobal("object");
225 "exports.output = require('dependency');"); 213
226 214 env_.module_system()->SetLazyField(object, "thing", "lazy", "output");
227 v8::Handle<v8::Object> object = CreateGlobal("object"); 215
228 216 env_.RegisterModule("test",
229 context_->module_system()->SetLazyField(object, "thing", "lazy", "output"); 217 "var assert = requireNative('assert');"
230 218 "assert.AssertTrue(object.thing.x == 5);");
231 RegisterModule("test", 219 env_.module_system()->Require("test");
232 "var assert = requireNative('assert');"
233 "assert.AssertTrue(object.thing.x == 5);");
234 context_->module_system()->Require("test");
235 } 220 }
236 221
237 TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) { 222 TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) {
238 ModuleSystem::NativesEnabledScope natives_enabled_scope( 223 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
239 context_->module_system()); 224 env_.module_system()->RegisterNativeHandler(
240 context_->module_system()->RegisterNativeHandler( 225 "counter", scoped_ptr<NativeHandler>(new CounterNatives(env_.context())));
241 "counter", 226
242 scoped_ptr<NativeHandler>(new CounterNatives(context_.get()))); 227 env_.RegisterModule("incrementsWhenEvaled",
243 228 "requireNative('counter').Increment();");
244 RegisterModule("incrementsWhenEvaled", 229 env_.RegisterModule("test",
245 "requireNative('counter').Increment();"); 230 "var assert = requireNative('assert');"
246 RegisterModule("test", 231 "var counter = requireNative('counter');"
247 "var assert = requireNative('assert');" 232 "assert.AssertTrue(counter.Get() == 0);"
248 "var counter = requireNative('counter');" 233 "require('incrementsWhenEvaled');"
249 "assert.AssertTrue(counter.Get() == 0);" 234 "assert.AssertTrue(counter.Get() == 1);"
250 "require('incrementsWhenEvaled');" 235 "require('incrementsWhenEvaled');"
251 "assert.AssertTrue(counter.Get() == 1);" 236 "assert.AssertTrue(counter.Get() == 1);");
252 "require('incrementsWhenEvaled');" 237
253 "assert.AssertTrue(counter.Get() == 1);"); 238 env_.module_system()->Require("test");
254
255 context_->module_system()->Require("test");
256 } 239 }
257 240
258 TEST_F(ModuleSystemTest, TestOverrideNativeHandler) { 241 TEST_F(ModuleSystemTest, TestOverrideNativeHandler) {
259 ModuleSystem::NativesEnabledScope natives_enabled_scope( 242 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
260 context_->module_system()); 243 env_.OverrideNativeHandler("assert", "exports.AssertTrue = function() {};");
261 OverrideNativeHandler("assert", "exports.AssertTrue = function() {};"); 244 env_.RegisterModule("test", "requireNative('assert').AssertTrue(true);");
262 RegisterModule("test", "requireNative('assert').AssertTrue(true);");
263 ExpectNoAssertionsMade(); 245 ExpectNoAssertionsMade();
264 context_->module_system()->Require("test"); 246 env_.module_system()->Require("test");
265 } 247 }
266 248
267 TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) { 249 TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) {
268 ModuleSystem::NativesEnabledScope natives_enabled_scope( 250 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
269 context_->module_system()); 251 env_.OverrideNativeHandler("thing", "exports.x = 5;");
270 OverrideNativeHandler("thing", "exports.x = 5;"); 252 env_.RegisterModule("test",
271 RegisterModule("test", 253 "var assert = requireNative('assert');"
272 "var assert = requireNative('assert');" 254 "assert.AssertTrue(requireNative('thing').x == 5);");
273 "assert.AssertTrue(requireNative('thing').x == 5);"); 255 env_.module_system()->Require("test");
274 context_->module_system()->Require("test"); 256 }
275 } 257
258 TEST_F(ModuleSystemTest, TestRequireAsync) {
259 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
260 env_.RegisterModule("add",
261 "define('add', [], function() {"
262 " return { Add: function(x, y) { return x + y; } };"
263 "});");
264 env_.RegisterModule("math",
265 "define('math', ['add'], function(add) {"
266 " return { Add: add.Add };"
267 "});");
268 env_.RegisterModule(
269 "test",
270 "requireAsync('math').then(function(math) {"
271 " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);"
272 "});");
273 env_.module_system()->Require("test");
274 RunResolvedPromises();
275 }
276
277 TEST_F(ModuleSystemTest, TestRequireAsyncInParallel) {
278 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
279 env_.RegisterModule("add",
280 "define('add', [], function() {"
281 " return { Add: function(x, y) { return x + y; } };"
282 "});");
283 env_.RegisterModule("subtract",
284 "define('subtract', [], function() {"
285 " return { Subtract: function(x, y) { return x - y; } };"
286 "});");
287 env_.RegisterModule("math",
288 "exports.AddAndSubtract = function(x, y, z) {"
289 " return Promise.all([requireAsync('add'),"
290 " requireAsync('subtract')"
291 " ]).then(function(modules) {"
292 " return modules[1].Subtract(modules[0].Add(x, y), z);"
293 " });"
294 "};");
295 env_.RegisterModule("test",
296 "var AddAndSubtract = require('math').AddAndSubtract;"
297 "AddAndSubtract(3, 5, 2).then(function(result) {"
298 " requireNative('assert').AssertTrue(result == 6);"
299 "});");
300 env_.module_system()->Require("test");
301 RunResolvedPromises();
302 }
303
304 TEST_F(ModuleSystemTest, TestNestedRequireAsyncs) {
305 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
306 env_.RegisterModule("first",
307 "define('first', [], function() {"
308 " return { next: 'second' };"
309 "});");
310 env_.RegisterModule("second",
311 "define('second', [], function() {"
312 " return { next: '' };"
313 "});");
314 env_.RegisterModule(
315 "test",
316 "requireAsync('first').then(function(module) {"
317 " return requireAsync(module.next)"
318 "}).then(function(module) {"
319 " requireNative('assert').AssertTrue(module.next === '');"
320 "});");
321 env_.module_system()->Require("test");
322 RunResolvedPromises();
323 }
324
325 TEST_F(ModuleSystemTest, TestRequireFromAMDModule) {
326 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
327 env_.RegisterModule("add", "exports.Add = function(x, y) { return x + y; };");
328 env_.RegisterModule("math",
329 "define('math', [], function() {"
330 " var add = require('add');"
331 " return { Add: add.Add };"
332 "});");
333 env_.RegisterModule(
334 "test",
335 "requireAsync('math').then(function(math) {"
336 " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);"
337 "});");
338 env_.module_system()->Require("test");
339 RunResolvedPromises();
340 }
341
342 TEST_F(ModuleSystemTest, TestRequireAsyncFromAMDModule) {
343 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
344 env_.RegisterModule("add",
345 "define('add', [], function() {"
346 " return { Add: function(x, y) { return x + y; } };"
347 "});");
348 env_.RegisterModule("math",
349 "define('math', [], function() {"
350 " function Add(x, y) {"
351 " return requireAsync('add').then(function(add) {"
352 " return add.Add(x, y);"
353 " });"
354 " }"
355 " return { Add: Add };"
356 "});");
357 env_.RegisterModule("test",
358 "requireAsync('math').then(function(math) {"
359 " return math.Add(3, 6);"
360 "}).then(function(result) {"
361 " requireNative('assert').AssertTrue(result == 9);"
362 "});");
363 env_.module_system()->Require("test");
364 RunResolvedPromises();
365 }
366
367 TEST_F(ModuleSystemTest, TestRequireAsyncFromAnotherContext) {
368 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
369 env_.RegisterModule(
370 "test",
371 "requireAsync('natives').then(function(natives) {"
372 " natives.requireAsync('ping').then(function(ping) {"
373 " return ping();"
374 " }).then(function(result) {"
375 " requireNative('assert').AssertTrue(result == 'pong');"
376 " });"
377 "});");
378 ModuleSystemTestEnvironment other_env(&isolate_holder_);
379 other_env.RegisterModule("ping",
380 "define('ping', ['natives'], function(natives) {"
381 " return function() {"
382 " return 'pong';"
383 " }"
384 "});");
385 gin::ModuleRegistry::From(env_.context()->v8_context())
386 ->AddBuiltinModule(v8::Isolate::GetCurrent(),
387 "natives",
388 other_env.module_system()->NewInstance());
389 gin::ModuleRegistry::From(other_env.context()->v8_context())
390 ->AddBuiltinModule(v8::Isolate::GetCurrent(),
391 "natives",
392 env_.module_system()->NewInstance());
393 env_.module_system()->Require("test");
394 RunResolvedPromises();
395 }
396
397 TEST_F(ModuleSystemTest, TestRequireAsyncBetweenContexts) {
398 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
399 env_.RegisterModule("pong",
400 "define('pong', [], function() {"
401 " return function() { return 'done'; };"
402 "});");
403 env_.RegisterModule(
404 "test",
405 "requireAsync('natives').then(function(natives) {"
406 " natives.requireAsync('ping').then(function(ping) {"
407 " return ping();"
408 " }).then(function(pong) {"
409 " return pong();"
410 " }).then(function(result) {"
411 " requireNative('assert').AssertTrue(result == 'done');"
412 " });"
413 "});");
414 ModuleSystemTestEnvironment other_env(&isolate_holder_);
415 other_env.RegisterModule("ping",
416 "define('ping', ['natives'], function(natives) {"
417 " return function() {"
418 " return natives.requireAsync('pong');"
419 " }"
420 "});");
421 gin::ModuleRegistry::From(env_.context()->v8_context())
422 ->AddBuiltinModule(v8::Isolate::GetCurrent(),
not at google - send to devlin 2014/07/07 23:18:50 put an isolate() property on env and use that?
Sam McNally 2014/07/08 00:07:04 Done.
423 "natives",
424 other_env.module_system()->NewInstance());
425 gin::ModuleRegistry::From(other_env.context()->v8_context())
426 ->AddBuiltinModule(v8::Isolate::GetCurrent(),
427 "natives",
428 env_.module_system()->NewInstance());
429 env_.module_system()->Require("test");
430 RunResolvedPromises();
431 }
432
433 TEST_F(ModuleSystemTest, TestRequireAsyncFromContextWithNoModuleRegistry) {
434 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
435 env_.RegisterModule("test",
436 "requireAsync('natives').then(function(natives) {"
437 " var AssertTrue = requireNative('assert').AssertTrue;"
438 " natives.requireAsync('foo').then(function() {"
439 " AssertTrue(false);"
440 " }).catch(function(error) {"
441 " AssertTrue(error.message == "
442 " 'Extension view no longer exists');"
443 " });"
444 "});");
445 ModuleSystemTestEnvironment other_env(&isolate_holder_);
446 gin::ModuleRegistry::From(env_.context()->v8_context())
447 ->AddBuiltinModule(v8::Isolate::GetCurrent(),
448 "natives",
449 other_env.module_system()->NewInstance());
450 other_env.DeleteContextHolder();
451 env_.module_system()->Require("test");
452 RunResolvedPromises();
453 }
454
455 TEST_F(ModuleSystemTest, TestRequireAsyncFromContextWithNoModuleSystem) {
456 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system());
457 env_.RegisterModule("test",
458 "requireAsync('natives').then(function(natives) {"
459 " requireNative('assert').AssertTrue("
460 " natives.requireAsync('foo') === undefined);"
461 "});");
462 ModuleSystemTestEnvironment other_env(&isolate_holder_);
463 gin::ModuleRegistry::From(env_.context()->v8_context())
464 ->AddBuiltinModule(v8::Isolate::GetCurrent(),
465 "natives",
466 other_env.module_system()->NewInstance());
467 other_env.DeleteModuleSystem();
468 env_.module_system()->Require("test");
469 RunResolvedPromises();
470 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698