| 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 |