summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/module_system_unittest.cc
diff options
context:
space:
mode:
authorkoz@chromium.org <koz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-21 03:56:38 +0000
committerkoz@chromium.org <koz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-21 03:56:38 +0000
commitcc045771ba7a6c433742355a4cf7014d9204ebb0 (patch)
treecb5dbc325e0f8c07c369731dcd956a5a6e245b7a /chrome/renderer/module_system_unittest.cc
parent1690c0301b09f37ca9f68b6aae703a2b45169d40 (diff)
downloadchromium_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.cc32
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");
+}