diff options
author | koz@chromium.org <koz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-21 03:56:38 +0000 |
---|---|---|
committer | koz@chromium.org <koz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-21 03:56:38 +0000 |
commit | cc045771ba7a6c433742355a4cf7014d9204ebb0 (patch) | |
tree | cb5dbc325e0f8c07c369731dcd956a5a6e245b7a /chrome/renderer/module_system_unittest.cc | |
parent | 1690c0301b09f37ca9f68b6aae703a2b45169d40 (diff) | |
download | chromium_src-cc045771ba7a6c433742355a4cf7014d9204ebb0.zip chromium_src-cc045771ba7a6c433742355a4cf7014d9204ebb0.tar.gz chromium_src-cc045771ba7a6c433742355a4cf7014d9204ebb0.tar.bz2 |
Introduce a mechanism for creating objects in JS that are lazily evaluated.
This change allows JS source to be associated with an object, which will be
evaluated and delegated to on property access to that object. This will allow,
for example, extension APIs to be setup from C++ without executing any JS until
the API is actually used.
BUG=104100
TEST=unit tests provided
Review URL: http://codereview.chromium.org/9747002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@127897 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/module_system_unittest.cc')
-rw-r--r-- | chrome/renderer/module_system_unittest.cc | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/chrome/renderer/module_system_unittest.cc b/chrome/renderer/module_system_unittest.cc index 7f2e2be..ff520ac 100644 --- a/chrome/renderer/module_system_unittest.cc +++ b/chrome/renderer/module_system_unittest.cc @@ -80,7 +80,6 @@ class ModuleSystemTest : public testing::Test { public: ModuleSystemTest() : context_(v8::Context::New()), - handle_scope_(), source_map_(new StringSourceMap()) { context_->Enter(); assert_natives_ = new AssertNatives(); @@ -166,3 +165,34 @@ TEST_F(ModuleSystemTest, TestDisableNativesPreventsNativeModulesBeingLoaded) { "assert.AssertTrue(caught);"); module_system_->Require("test"); } + +TEST_F(ModuleSystemTest, TestLazyObject) { + v8::Handle<v8::String> source = v8::String::New("({x: 5})"); + v8::Handle<v8::Object> lazy_object = + ModuleSystem::CreateLazyObject("lazy.js", source); + v8::Context::GetCurrent()->Global()->Set(v8::String::New("lazy"), + lazy_object); + RegisterModule("test", + "var assert = requireNative('assert');" + "assert.AssertTrue(lazy.x == 5);" + "assert.AssertTrue(lazy.x == 5);"); + module_system_->Require("test"); +} + +TEST_F(ModuleSystemTest, TestLazyInstanceOnlyGetsEvaledOnce) { + v8::Context::GetCurrent()->Global()->Set(v8::String::New("evalCount"), + v8::Integer::New(0)); + v8::Handle<v8::String> source = v8::String::New("evalCount++; ({x: 5})"); + v8::Handle<v8::Object> lazy_object = + ModuleSystem::CreateLazyObject("lazy.js", source); + v8::Context::GetCurrent()->Global()->Set(v8::String::New("lazy"), + lazy_object); + RegisterModule("test", + "var assert = requireNative('assert');" + "assert.AssertTrue(evalCount == 0);" + "lazy.x;" + "assert.AssertTrue(evalCount == 1);" + "lazy.x;" + "assert.AssertTrue(evalCount == 1);"); + module_system_->Require("test"); +} |