OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/renderer/module_system.h" | 6 #include "extensions/renderer/module_system.h" |
7 #include "extensions/renderer/module_system_test.h" | 7 #include "extensions/renderer/module_system_test.h" |
8 #include "gin/modules/module_registry.h" | 8 #include "gin/modules/module_registry.h" |
9 | 9 |
10 namespace extensions { | 10 namespace extensions { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 } | 134 } |
135 env()->module_system()->Require("test"); | 135 env()->module_system()->Require("test"); |
136 } | 136 } |
137 } | 137 } |
138 | 138 |
139 TEST_F(ModuleSystemTest, TestLazyField) { | 139 TEST_F(ModuleSystemTest, TestLazyField) { |
140 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 140 ModuleSystem::NativesEnabledScope natives_enabled_scope( |
141 env()->module_system()); | 141 env()->module_system()); |
142 env()->RegisterModule("lazy", "exports.x = 5;"); | 142 env()->RegisterModule("lazy", "exports.x = 5;"); |
143 | 143 |
144 v8::Handle<v8::Object> object = env()->CreateGlobal("object"); | 144 v8::Local<v8::Object> object = env()->CreateGlobal("object"); |
145 | 145 |
146 env()->module_system()->SetLazyField(object, "blah", "lazy", "x"); | 146 env()->module_system()->SetLazyField(object, "blah", "lazy", "x"); |
147 | 147 |
148 env()->RegisterModule("test", | 148 env()->RegisterModule("test", |
149 "var assert = requireNative('assert');" | 149 "var assert = requireNative('assert');" |
150 "assert.AssertTrue(object.blah == 5);"); | 150 "assert.AssertTrue(object.blah == 5);"); |
151 env()->module_system()->Require("test"); | 151 env()->module_system()->Require("test"); |
152 } | 152 } |
153 | 153 |
154 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) { | 154 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) { |
155 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 155 ModuleSystem::NativesEnabledScope natives_enabled_scope( |
156 env()->module_system()); | 156 env()->module_system()); |
157 env()->RegisterModule( | 157 env()->RegisterModule( |
158 "lazy", | 158 "lazy", |
159 "var object = {};" | 159 "var object = {};" |
160 "object.__defineGetter__('z', function() { return 1; });" | 160 "object.__defineGetter__('z', function() { return 1; });" |
161 "object.x = 5;" | 161 "object.x = 5;" |
162 "object.y = function() { return 10; };" | 162 "object.y = function() { return 10; };" |
163 "exports.object = object;"); | 163 "exports.object = object;"); |
164 | 164 |
165 v8::Handle<v8::Object> object = env()->CreateGlobal("object"); | 165 v8::Local<v8::Object> object = env()->CreateGlobal("object"); |
166 | 166 |
167 env()->module_system()->SetLazyField(object, "thing", "lazy", "object"); | 167 env()->module_system()->SetLazyField(object, "thing", "lazy", "object"); |
168 | 168 |
169 env()->RegisterModule("test", | 169 env()->RegisterModule("test", |
170 "var assert = requireNative('assert');" | 170 "var assert = requireNative('assert');" |
171 "assert.AssertTrue(object.thing.x == 5);" | 171 "assert.AssertTrue(object.thing.x == 5);" |
172 "assert.AssertTrue(object.thing.y() == 10);" | 172 "assert.AssertTrue(object.thing.y() == 10);" |
173 "assert.AssertTrue(object.thing.z == 1);"); | 173 "assert.AssertTrue(object.thing.z == 1);"); |
174 env()->module_system()->Require("test"); | 174 env()->module_system()->Require("test"); |
175 } | 175 } |
176 | 176 |
177 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) { | 177 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) { |
178 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 178 ModuleSystem::NativesEnabledScope natives_enabled_scope( |
179 env()->module_system()); | 179 env()->module_system()); |
180 env()->module_system()->RegisterNativeHandler( | 180 env()->module_system()->RegisterNativeHandler( |
181 "counter", | 181 "counter", |
182 scoped_ptr<NativeHandler>(new CounterNatives(env()->context()))); | 182 scoped_ptr<NativeHandler>(new CounterNatives(env()->context()))); |
183 env()->RegisterModule("lazy", | 183 env()->RegisterModule("lazy", |
184 "requireNative('counter').Increment();" | 184 "requireNative('counter').Increment();" |
185 "exports.x = 5;"); | 185 "exports.x = 5;"); |
186 | 186 |
187 v8::Handle<v8::Object> object = env()->CreateGlobal("object"); | 187 v8::Local<v8::Object> object = env()->CreateGlobal("object"); |
188 | 188 |
189 env()->module_system()->SetLazyField(object, "x", "lazy", "x"); | 189 env()->module_system()->SetLazyField(object, "x", "lazy", "x"); |
190 | 190 |
191 env()->RegisterModule("test", | 191 env()->RegisterModule("test", |
192 "var assert = requireNative('assert');" | 192 "var assert = requireNative('assert');" |
193 "var counter = requireNative('counter');" | 193 "var counter = requireNative('counter');" |
194 "assert.AssertTrue(counter.Get() == 0);" | 194 "assert.AssertTrue(counter.Get() == 0);" |
195 "object.x;" | 195 "object.x;" |
196 "assert.AssertTrue(counter.Get() == 1);" | 196 "assert.AssertTrue(counter.Get() == 1);" |
197 "object.x;" | 197 "object.x;" |
198 "assert.AssertTrue(counter.Get() == 1);"); | 198 "assert.AssertTrue(counter.Get() == 1);"); |
199 env()->module_system()->Require("test"); | 199 env()->module_system()->Require("test"); |
200 } | 200 } |
201 | 201 |
202 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) { | 202 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) { |
203 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 203 ModuleSystem::NativesEnabledScope natives_enabled_scope( |
204 env()->module_system()); | 204 env()->module_system()); |
205 env()->RegisterModule("lazy", "exports.x = 5;"); | 205 env()->RegisterModule("lazy", "exports.x = 5;"); |
206 v8::Handle<v8::Object> object = env()->CreateGlobal("object"); | 206 v8::Local<v8::Object> object = env()->CreateGlobal("object"); |
207 | 207 |
208 env()->module_system()->SetLazyField(object, "x", "lazy", "x"); | 208 env()->module_system()->SetLazyField(object, "x", "lazy", "x"); |
209 env()->RegisterModule("test", | 209 env()->RegisterModule("test", |
210 "object.x;" | 210 "object.x;" |
211 "requireNative('assert').AssertTrue(true);"); | 211 "requireNative('assert').AssertTrue(true);"); |
212 env()->module_system()->Require("test"); | 212 env()->module_system()->Require("test"); |
213 } | 213 } |
214 | 214 |
215 TEST_F(ModuleSystemTest, TestTransitiveRequire) { | 215 TEST_F(ModuleSystemTest, TestTransitiveRequire) { |
216 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 216 ModuleSystem::NativesEnabledScope natives_enabled_scope( |
217 env()->module_system()); | 217 env()->module_system()); |
218 env()->RegisterModule("dependency", "exports.x = 5;"); | 218 env()->RegisterModule("dependency", "exports.x = 5;"); |
219 env()->RegisterModule("lazy", "exports.output = require('dependency');"); | 219 env()->RegisterModule("lazy", "exports.output = require('dependency');"); |
220 | 220 |
221 v8::Handle<v8::Object> object = env()->CreateGlobal("object"); | 221 v8::Local<v8::Object> object = env()->CreateGlobal("object"); |
222 | 222 |
223 env()->module_system()->SetLazyField(object, "thing", "lazy", "output"); | 223 env()->module_system()->SetLazyField(object, "thing", "lazy", "output"); |
224 | 224 |
225 env()->RegisterModule("test", | 225 env()->RegisterModule("test", |
226 "var assert = requireNative('assert');" | 226 "var assert = requireNative('assert');" |
227 "assert.AssertTrue(object.thing.x == 5);"); | 227 "assert.AssertTrue(object.thing.x == 5);"); |
228 env()->module_system()->Require("test"); | 228 env()->module_system()->Require("test"); |
229 } | 229 } |
230 | 230 |
231 TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) { | 231 TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) { |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 "});"); | 478 "});"); |
479 scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment(); | 479 scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment(); |
480 gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule( | 480 gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule( |
481 env()->isolate(), "natives", other_env->module_system()->NewInstance()); | 481 env()->isolate(), "natives", other_env->module_system()->NewInstance()); |
482 other_env->ShutdownModuleSystem(); | 482 other_env->ShutdownModuleSystem(); |
483 env()->module_system()->Require("test"); | 483 env()->module_system()->Require("test"); |
484 RunResolvedPromises(); | 484 RunResolvedPromises(); |
485 } | 485 } |
486 | 486 |
487 } // namespace extensions | 487 } // namespace extensions |
OLD | NEW |