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

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: extensions_renderer should depend on gin 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 26 matching lines...) Expand all
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(
54 context_->module_system()); 55 env()->module_system());
55 TestExceptionHandler* handler = new TestExceptionHandler; 56 TestExceptionHandler* handler = new TestExceptionHandler;
56 scoped_ptr<ModuleSystem::ExceptionHandler> scoped_handler(handler); 57 scoped_ptr<ModuleSystem::ExceptionHandler> scoped_handler(handler);
57 ASSERT_FALSE(handler->handled_exception()); 58 ASSERT_FALSE(handler->handled_exception());
58 context_->module_system()->SetExceptionHandlerForTest(scoped_handler.Pass()); 59 env()->module_system()->SetExceptionHandlerForTest(scoped_handler.Pass());
59 60
60 RegisterModule("test", "throw 'hi';"); 61 env()->RegisterModule("test", "throw 'hi';");
61 context_->module_system()->Require("test"); 62 env()->module_system()->Require("test");
62 ASSERT_TRUE(handler->handled_exception()); 63 ASSERT_TRUE(handler->handled_exception());
63 64
64 ExpectNoAssertionsMade(); 65 ExpectNoAssertionsMade();
65 } 66 }
66 67
67 TEST_F(ModuleSystemTest, TestRequire) { 68 TEST_F(ModuleSystemTest, TestRequire) {
68 ModuleSystem::NativesEnabledScope natives_enabled_scope( 69 ModuleSystem::NativesEnabledScope natives_enabled_scope(
69 context_->module_system()); 70 env()->module_system());
70 RegisterModule("add", "exports.Add = function(x, y) { return x + y; };"); 71 env()->RegisterModule("add",
71 RegisterModule("test", 72 "exports.Add = function(x, y) { return x + y; };");
72 "var Add = require('add').Add;" 73 env()->RegisterModule("test",
73 "requireNative('assert').AssertTrue(Add(3, 5) == 8);"); 74 "var Add = require('add').Add;"
74 context_->module_system()->Require("test"); 75 "requireNative('assert').AssertTrue(Add(3, 5) == 8);");
76 env()->module_system()->Require("test");
75 } 77 }
76 78
77 TEST_F(ModuleSystemTest, TestNestedRequire) { 79 TEST_F(ModuleSystemTest, TestNestedRequire) {
78 ModuleSystem::NativesEnabledScope natives_enabled_scope( 80 ModuleSystem::NativesEnabledScope natives_enabled_scope(
79 context_->module_system()); 81 env()->module_system());
80 RegisterModule("add", "exports.Add = function(x, y) { return x + y; };"); 82 env()->RegisterModule("add",
81 RegisterModule("double", 83 "exports.Add = function(x, y) { return x + y; };");
82 "var Add = require('add').Add;" 84 env()->RegisterModule("double",
83 "exports.Double = function(x) { return Add(x, x); };"); 85 "var Add = require('add').Add;"
84 RegisterModule("test", 86 "exports.Double = function(x) { return Add(x, x); };");
85 "var Double = require('double').Double;" 87 env()->RegisterModule("test",
86 "requireNative('assert').AssertTrue(Double(3) == 6);"); 88 "var Double = require('double').Double;"
87 context_->module_system()->Require("test"); 89 "requireNative('assert').AssertTrue(Double(3) == 6);");
90 env()->module_system()->Require("test");
88 } 91 }
89 92
90 TEST_F(ModuleSystemTest, TestModuleInsulation) { 93 TEST_F(ModuleSystemTest, TestModuleInsulation) {
91 ModuleSystem::NativesEnabledScope natives_enabled_scope( 94 ModuleSystem::NativesEnabledScope natives_enabled_scope(
92 context_->module_system()); 95 env()->module_system());
93 RegisterModule("x", 96 env()->RegisterModule("x",
94 "var x = 10;" 97 "var x = 10;"
95 "exports.X = function() { return x; };"); 98 "exports.X = function() { return x; };");
96 RegisterModule("y", 99 env()->RegisterModule("y",
97 "var x = 15;" 100 "var x = 15;"
98 "require('x');" 101 "require('x');"
99 "exports.Y = function() { return x; };"); 102 "exports.Y = function() { return x; };");
100 RegisterModule("test", 103 env()->RegisterModule("test",
101 "var Y = require('y').Y;" 104 "var Y = require('y').Y;"
102 "var X = require('x').X;" 105 "var X = require('x').X;"
103 "var assert = requireNative('assert');" 106 "var assert = requireNative('assert');"
104 "assert.AssertTrue(!this.hasOwnProperty('x'));" 107 "assert.AssertTrue(!this.hasOwnProperty('x'));"
105 "assert.AssertTrue(Y() == 15);" 108 "assert.AssertTrue(Y() == 15);"
106 "assert.AssertTrue(X() == 10);"); 109 "assert.AssertTrue(X() == 10);");
107 context_->module_system()->Require("test"); 110 env()->module_system()->Require("test");
108 } 111 }
109 112
110 TEST_F(ModuleSystemTest, TestNativesAreDisabledOutsideANativesEnabledScope) { 113 TEST_F(ModuleSystemTest, TestNativesAreDisabledOutsideANativesEnabledScope) {
111 RegisterModule("test", 114 env()->RegisterModule("test",
112 "var assert;" 115 "var assert;"
113 "try {" 116 "try {"
114 " assert = requireNative('assert');" 117 " assert = requireNative('assert');"
115 "} catch (e) {" 118 "} catch (e) {"
116 " var caught = true;" 119 " var caught = true;"
117 "}" 120 "}"
118 "if (assert) {" 121 "if (assert) {"
119 " assert.AssertTrue(true);" 122 " assert.AssertTrue(true);"
120 "}"); 123 "}");
121 context_->module_system()->Require("test"); 124 env()->module_system()->Require("test");
122 ExpectNoAssertionsMade(); 125 ExpectNoAssertionsMade();
123 } 126 }
124 127
125 TEST_F(ModuleSystemTest, TestNativesAreEnabledWithinANativesEnabledScope) { 128 TEST_F(ModuleSystemTest, TestNativesAreEnabledWithinANativesEnabledScope) {
126 RegisterModule("test", 129 env()->RegisterModule("test",
127 "var assert = requireNative('assert');" 130 "var assert = requireNative('assert');"
128 "assert.AssertTrue(true);"); 131 "assert.AssertTrue(true);");
129 132
130 { 133 {
131 ModuleSystem::NativesEnabledScope natives_enabled( 134 ModuleSystem::NativesEnabledScope natives_enabled(env()->module_system());
132 context_->module_system());
133 { 135 {
134 ModuleSystem::NativesEnabledScope natives_enabled_inner( 136 ModuleSystem::NativesEnabledScope natives_enabled_inner(
135 context_->module_system()); 137 env()->module_system());
136 } 138 }
137 context_->module_system()->Require("test"); 139 env()->module_system()->Require("test");
138 } 140 }
139 } 141 }
140 142
141 TEST_F(ModuleSystemTest, TestLazyField) { 143 TEST_F(ModuleSystemTest, TestLazyField) {
142 ModuleSystem::NativesEnabledScope natives_enabled_scope( 144 ModuleSystem::NativesEnabledScope natives_enabled_scope(
143 context_->module_system()); 145 env()->module_system());
144 RegisterModule("lazy", 146 env()->RegisterModule("lazy", "exports.x = 5;");
145 "exports.x = 5;"); 147
146 148 v8::Handle<v8::Object> object = env()->CreateGlobal("object");
147 v8::Handle<v8::Object> object = CreateGlobal("object"); 149
148 150 env()->module_system()->SetLazyField(object, "blah", "lazy", "x");
149 context_->module_system()->SetLazyField(object, "blah", "lazy", "x"); 151
150 152 env()->RegisterModule("test",
151 RegisterModule("test", 153 "var assert = requireNative('assert');"
152 "var assert = requireNative('assert');" 154 "assert.AssertTrue(object.blah == 5);");
153 "assert.AssertTrue(object.blah == 5);"); 155 env()->module_system()->Require("test");
154 context_->module_system()->Require("test");
155 } 156 }
156 157
157 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) { 158 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) {
158 ModuleSystem::NativesEnabledScope natives_enabled_scope( 159 ModuleSystem::NativesEnabledScope natives_enabled_scope(
159 context_->module_system()); 160 env()->module_system());
160 RegisterModule("lazy", 161 env()->RegisterModule(
162 "lazy",
161 "var object = {};" 163 "var object = {};"
162 "object.__defineGetter__('z', function() { return 1; });" 164 "object.__defineGetter__('z', function() { return 1; });"
163 "object.x = 5;" 165 "object.x = 5;"
164 "object.y = function() { return 10; };" 166 "object.y = function() { return 10; };"
165 "exports.object = object;"); 167 "exports.object = object;");
166 168
167 v8::Handle<v8::Object> object = CreateGlobal("object"); 169 v8::Handle<v8::Object> object = env()->CreateGlobal("object");
168 170
169 context_->module_system()->SetLazyField(object, "thing", "lazy", "object"); 171 env()->module_system()->SetLazyField(object, "thing", "lazy", "object");
170 172
171 RegisterModule("test", 173 env()->RegisterModule("test",
172 "var assert = requireNative('assert');" 174 "var assert = requireNative('assert');"
173 "assert.AssertTrue(object.thing.x == 5);" 175 "assert.AssertTrue(object.thing.x == 5);"
174 "assert.AssertTrue(object.thing.y() == 10);" 176 "assert.AssertTrue(object.thing.y() == 10);"
175 "assert.AssertTrue(object.thing.z == 1);" 177 "assert.AssertTrue(object.thing.z == 1);");
176 ); 178 env()->module_system()->Require("test");
177 context_->module_system()->Require("test");
178 } 179 }
179 180
180 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) { 181 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) {
181 ModuleSystem::NativesEnabledScope natives_enabled_scope( 182 ModuleSystem::NativesEnabledScope natives_enabled_scope(
182 context_->module_system()); 183 env()->module_system());
183 context_->module_system()->RegisterNativeHandler( 184 env()->module_system()->RegisterNativeHandler(
184 "counter", 185 "counter",
185 scoped_ptr<NativeHandler>(new CounterNatives(context_.get()))); 186 scoped_ptr<NativeHandler>(new CounterNatives(env()->context())));
186 RegisterModule("lazy", 187 env()->RegisterModule("lazy",
187 "requireNative('counter').Increment();" 188 "requireNative('counter').Increment();"
188 "exports.x = 5;"); 189 "exports.x = 5;");
189 190
190 v8::Handle<v8::Object> object = CreateGlobal("object"); 191 v8::Handle<v8::Object> object = env()->CreateGlobal("object");
191 192
192 context_->module_system()->SetLazyField(object, "x", "lazy", "x"); 193 env()->module_system()->SetLazyField(object, "x", "lazy", "x");
193 194
194 RegisterModule("test", 195 env()->RegisterModule("test",
195 "var assert = requireNative('assert');" 196 "var assert = requireNative('assert');"
196 "var counter = requireNative('counter');" 197 "var counter = requireNative('counter');"
197 "assert.AssertTrue(counter.Get() == 0);" 198 "assert.AssertTrue(counter.Get() == 0);"
198 "object.x;" 199 "object.x;"
199 "assert.AssertTrue(counter.Get() == 1);" 200 "assert.AssertTrue(counter.Get() == 1);"
200 "object.x;" 201 "object.x;"
201 "assert.AssertTrue(counter.Get() == 1);"); 202 "assert.AssertTrue(counter.Get() == 1);");
202 context_->module_system()->Require("test"); 203 env()->module_system()->Require("test");
203 } 204 }
204 205
205 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) { 206 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) {
206 ModuleSystem::NativesEnabledScope natives_enabled_scope( 207 ModuleSystem::NativesEnabledScope natives_enabled_scope(
207 context_->module_system()); 208 env()->module_system());
208 RegisterModule("lazy", 209 env()->RegisterModule("lazy", "exports.x = 5;");
209 "exports.x = 5;"); 210 v8::Handle<v8::Object> object = env()->CreateGlobal("object");
210 v8::Handle<v8::Object> object = CreateGlobal("object"); 211
211 212 env()->module_system()->SetLazyField(object, "x", "lazy", "x");
212 context_->module_system()->SetLazyField(object, "x", "lazy", "x"); 213 env()->RegisterModule("test",
213 RegisterModule("test", 214 "object.x;"
214 "object.x;" 215 "requireNative('assert').AssertTrue(true);");
215 "requireNative('assert').AssertTrue(true);"); 216 env()->module_system()->Require("test");
216 context_->module_system()->Require("test");
217 } 217 }
218 218
219 TEST_F(ModuleSystemTest, TestTransitiveRequire) { 219 TEST_F(ModuleSystemTest, TestTransitiveRequire) {
220 ModuleSystem::NativesEnabledScope natives_enabled_scope( 220 ModuleSystem::NativesEnabledScope natives_enabled_scope(
221 context_->module_system()); 221 env()->module_system());
222 RegisterModule("dependency", 222 env()->RegisterModule("dependency", "exports.x = 5;");
223 "exports.x = 5;"); 223 env()->RegisterModule("lazy", "exports.output = require('dependency');");
224 RegisterModule("lazy", 224
225 "exports.output = require('dependency');"); 225 v8::Handle<v8::Object> object = env()->CreateGlobal("object");
226 226
227 v8::Handle<v8::Object> object = CreateGlobal("object"); 227 env()->module_system()->SetLazyField(object, "thing", "lazy", "output");
228 228
229 context_->module_system()->SetLazyField(object, "thing", "lazy", "output"); 229 env()->RegisterModule("test",
230 230 "var assert = requireNative('assert');"
231 RegisterModule("test", 231 "assert.AssertTrue(object.thing.x == 5);");
232 "var assert = requireNative('assert');" 232 env()->module_system()->Require("test");
233 "assert.AssertTrue(object.thing.x == 5);");
234 context_->module_system()->Require("test");
235 } 233 }
236 234
237 TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) { 235 TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) {
238 ModuleSystem::NativesEnabledScope natives_enabled_scope( 236 ModuleSystem::NativesEnabledScope natives_enabled_scope(
239 context_->module_system()); 237 env()->module_system());
240 context_->module_system()->RegisterNativeHandler( 238 env()->module_system()->RegisterNativeHandler(
241 "counter", 239 "counter",
242 scoped_ptr<NativeHandler>(new CounterNatives(context_.get()))); 240 scoped_ptr<NativeHandler>(new CounterNatives(env()->context())));
243 241
244 RegisterModule("incrementsWhenEvaled", 242 env()->RegisterModule("incrementsWhenEvaled",
245 "requireNative('counter').Increment();"); 243 "requireNative('counter').Increment();");
246 RegisterModule("test", 244 env()->RegisterModule("test",
247 "var assert = requireNative('assert');" 245 "var assert = requireNative('assert');"
248 "var counter = requireNative('counter');" 246 "var counter = requireNative('counter');"
249 "assert.AssertTrue(counter.Get() == 0);" 247 "assert.AssertTrue(counter.Get() == 0);"
250 "require('incrementsWhenEvaled');" 248 "require('incrementsWhenEvaled');"
251 "assert.AssertTrue(counter.Get() == 1);" 249 "assert.AssertTrue(counter.Get() == 1);"
252 "require('incrementsWhenEvaled');" 250 "require('incrementsWhenEvaled');"
253 "assert.AssertTrue(counter.Get() == 1);"); 251 "assert.AssertTrue(counter.Get() == 1);");
254 252
255 context_->module_system()->Require("test"); 253 env()->module_system()->Require("test");
256 } 254 }
257 255
258 TEST_F(ModuleSystemTest, TestOverrideNativeHandler) { 256 TEST_F(ModuleSystemTest, TestOverrideNativeHandler) {
259 ModuleSystem::NativesEnabledScope natives_enabled_scope( 257 ModuleSystem::NativesEnabledScope natives_enabled_scope(
260 context_->module_system()); 258 env()->module_system());
261 OverrideNativeHandler("assert", "exports.AssertTrue = function() {};"); 259 env()->OverrideNativeHandler("assert", "exports.AssertTrue = function() {};");
262 RegisterModule("test", "requireNative('assert').AssertTrue(true);"); 260 env()->RegisterModule("test", "requireNative('assert').AssertTrue(true);");
263 ExpectNoAssertionsMade(); 261 ExpectNoAssertionsMade();
264 context_->module_system()->Require("test"); 262 env()->module_system()->Require("test");
265 } 263 }
266 264
267 TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) { 265 TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) {
268 ModuleSystem::NativesEnabledScope natives_enabled_scope( 266 ModuleSystem::NativesEnabledScope natives_enabled_scope(
269 context_->module_system()); 267 env()->module_system());
270 OverrideNativeHandler("thing", "exports.x = 5;"); 268 env()->OverrideNativeHandler("thing", "exports.x = 5;");
271 RegisterModule("test", 269 env()->RegisterModule("test",
272 "var assert = requireNative('assert');" 270 "var assert = requireNative('assert');"
273 "assert.AssertTrue(requireNative('thing').x == 5);"); 271 "assert.AssertTrue(requireNative('thing').x == 5);");
274 context_->module_system()->Require("test"); 272 env()->module_system()->Require("test");
275 } 273 }
274
275 TEST_F(ModuleSystemTest, TestRequireAsync) {
276 ModuleSystem::NativesEnabledScope natives_enabled_scope(
277 env()->module_system());
278 env()->RegisterModule("add",
279 "define('add', [], function() {"
280 " return { Add: function(x, y) { return x + y; } };"
281 "});");
282 env()->RegisterModule("math",
283 "define('math', ['add'], function(add) {"
284 " return { Add: add.Add };"
285 "});");
286 env()->RegisterModule(
287 "test",
288 "requireAsync('math').then(function(math) {"
289 " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);"
290 "});");
291 env()->module_system()->Require("test");
292 RunResolvedPromises();
293 }
294
295 TEST_F(ModuleSystemTest, TestRequireAsyncInParallel) {
296 ModuleSystem::NativesEnabledScope natives_enabled_scope(
297 env()->module_system());
298 env()->RegisterModule("add",
299 "define('add', [], function() {"
300 " return { Add: function(x, y) { return x + y; } };"
301 "});");
302 env()->RegisterModule(
303 "subtract",
304 "define('subtract', [], function() {"
305 " return { Subtract: function(x, y) { return x - y; } };"
306 "});");
307 env()->RegisterModule(
308 "math",
309 "exports.AddAndSubtract = function(x, y, z) {"
310 " return Promise.all([requireAsync('add'),"
311 " requireAsync('subtract')"
312 " ]).then(function(modules) {"
313 " return modules[1].Subtract(modules[0].Add(x, y), z);"
314 " });"
315 "};");
316 env()->RegisterModule("test",
317 "var AddAndSubtract = require('math').AddAndSubtract;"
318 "AddAndSubtract(3, 5, 2).then(function(result) {"
319 " requireNative('assert').AssertTrue(result == 6);"
320 "});");
321 env()->module_system()->Require("test");
322 RunResolvedPromises();
323 }
324
325 TEST_F(ModuleSystemTest, TestNestedRequireAsyncs) {
326 ModuleSystem::NativesEnabledScope natives_enabled_scope(
327 env()->module_system());
328 env()->RegisterModule("first",
329 "define('first', [], function() {"
330 " return { next: 'second' };"
331 "});");
332 env()->RegisterModule("second",
333 "define('second', [], function() {"
334 " return { next: '' };"
335 "});");
336 env()->RegisterModule(
337 "test",
338 "requireAsync('first').then(function(module) {"
339 " return requireAsync(module.next)"
340 "}).then(function(module) {"
341 " requireNative('assert').AssertTrue(module.next === '');"
342 "});");
343 env()->module_system()->Require("test");
344 RunResolvedPromises();
345 }
346
347 TEST_F(ModuleSystemTest, TestRequireFromAMDModule) {
348 ModuleSystem::NativesEnabledScope natives_enabled_scope(
349 env()->module_system());
350 env()->RegisterModule("add",
351 "exports.Add = function(x, y) { return x + y; };");
352 env()->RegisterModule("math",
353 "define('math', [], function() {"
354 " var add = require('add');"
355 " return { Add: add.Add };"
356 "});");
357 env()->RegisterModule(
358 "test",
359 "requireAsync('math').then(function(math) {"
360 " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);"
361 "});");
362 env()->module_system()->Require("test");
363 RunResolvedPromises();
364 }
365
366 TEST_F(ModuleSystemTest, TestRequireAsyncFromAMDModule) {
367 ModuleSystem::NativesEnabledScope natives_enabled_scope(
368 env()->module_system());
369 env()->RegisterModule("add",
370 "define('add', [], function() {"
371 " return { Add: function(x, y) { return x + y; } };"
372 "});");
373 env()->RegisterModule("math",
374 "define('math', [], function() {"
375 " function Add(x, y) {"
376 " return requireAsync('add').then(function(add) {"
377 " return add.Add(x, y);"
378 " });"
379 " }"
380 " return { Add: Add };"
381 "});");
382 env()->RegisterModule("test",
383 "requireAsync('math').then(function(math) {"
384 " return math.Add(3, 6);"
385 "}).then(function(result) {"
386 " requireNative('assert').AssertTrue(result == 9);"
387 "});");
388 env()->module_system()->Require("test");
389 RunResolvedPromises();
390 }
391
392 TEST_F(ModuleSystemTest, TestRequireAsyncFromAnotherContext) {
393 ModuleSystem::NativesEnabledScope natives_enabled_scope(
394 env()->module_system());
395 env()->RegisterModule(
396 "test",
397 "requireAsync('natives').then(function(natives) {"
398 " natives.requireAsync('ping').then(function(ping) {"
399 " return ping();"
400 " }).then(function(result) {"
401 " requireNative('assert').AssertTrue(result == 'pong');"
402 " });"
403 "});");
404 scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment();
405 other_env->RegisterModule("ping",
406 "define('ping', ['natives'], function(natives) {"
407 " return function() {"
408 " return 'pong';"
409 " }"
410 "});");
411 gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule(
412 env()->isolate(), "natives", other_env->module_system()->NewInstance());
413 gin::ModuleRegistry::From(other_env->context()->v8_context())
414 ->AddBuiltinModule(
415 env()->isolate(), "natives", env()->module_system()->NewInstance());
416 env()->module_system()->Require("test");
417 RunResolvedPromises();
418 }
419
420 TEST_F(ModuleSystemTest, TestRequireAsyncBetweenContexts) {
421 ModuleSystem::NativesEnabledScope natives_enabled_scope(
422 env()->module_system());
423 env()->RegisterModule("pong",
424 "define('pong', [], function() {"
425 " return function() { return 'done'; };"
426 "});");
427 env()->RegisterModule(
428 "test",
429 "requireAsync('natives').then(function(natives) {"
430 " natives.requireAsync('ping').then(function(ping) {"
431 " return ping();"
432 " }).then(function(pong) {"
433 " return pong();"
434 " }).then(function(result) {"
435 " requireNative('assert').AssertTrue(result == 'done');"
436 " });"
437 "});");
438 scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment();
439 other_env->RegisterModule("ping",
440 "define('ping', ['natives'], function(natives) {"
441 " return function() {"
442 " return natives.requireAsync('pong');"
443 " }"
444 "});");
445 gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule(
446 env()->isolate(), "natives", other_env->module_system()->NewInstance());
447 gin::ModuleRegistry::From(other_env->context()->v8_context())
448 ->AddBuiltinModule(
449 env()->isolate(), "natives", env()->module_system()->NewInstance());
450 env()->module_system()->Require("test");
451 RunResolvedPromises();
452 }
453
454 TEST_F(ModuleSystemTest, TestRequireAsyncFromContextWithNoModuleRegistry) {
455 ModuleSystem::NativesEnabledScope natives_enabled_scope(
456 env()->module_system());
457 env()->RegisterModule("test",
458 "requireAsync('natives').then(function(natives) {"
459 " var AssertTrue = requireNative('assert').AssertTrue;"
460 " natives.requireAsync('foo').then(function() {"
461 " AssertTrue(false);"
462 " }).catch(function(error) {"
463 " AssertTrue(error.message == "
464 " 'Extension view no longer exists');"
465 " });"
466 "});");
467 scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment();
468 gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule(
469 env()->isolate(), "natives", other_env->module_system()->NewInstance());
470 other_env->ShutdownGin();
471 env()->module_system()->Require("test");
472 RunResolvedPromises();
473 }
474
475 TEST_F(ModuleSystemTest, TestRequireAsyncFromContextWithNoModuleSystem) {
476 ModuleSystem::NativesEnabledScope natives_enabled_scope(
477 env()->module_system());
478 env()->RegisterModule("test",
479 "requireAsync('natives').then(function(natives) {"
480 " requireNative('assert').AssertTrue("
481 " natives.requireAsync('foo') === undefined);"
482 "});");
483 scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment();
484 gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule(
485 env()->isolate(), "natives", other_env->module_system()->NewInstance());
486 other_env->ShutdownModuleSystem();
487 env()->module_system()->Require("test");
488 RunResolvedPromises();
489 }
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/messaging_utils_unittest.cc ('k') | chrome/renderer/extensions/safe_builtins_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698