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

Side by Side Diff: chrome/renderer/module_system_unittest.cc

Issue 10879107: Move ModuleSystem and NativeHandler to extensions/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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
« no previous file with comments | « chrome/renderer/module_system.cc ('k') | chrome/renderer/native_handler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/test/base/module_system_test.h"
6 #include "base/memory/scoped_ptr.h"
7 #include "chrome/renderer/module_system.h"
8
9 class CounterNatives : public NativeHandler {
10 public:
11 CounterNatives() : counter_(0) {
12 RouteFunction("Get", base::Bind(&CounterNatives::Get,
13 base::Unretained(this)));
14 RouteFunction("Increment", base::Bind(&CounterNatives::Increment,
15 base::Unretained(this)));
16 }
17
18 v8::Handle<v8::Value> Get(const v8::Arguments& args) {
19 return v8::Integer::New(counter_);
20 }
21
22 v8::Handle<v8::Value> Increment(const v8::Arguments& args) {
23 counter_++;
24 return v8::Undefined();
25 }
26
27 private:
28 int counter_;
29 };
30
31 TEST_F(ModuleSystemTest, TestRequire) {
32 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
33 RegisterModule("add", "exports.Add = function(x, y) { return x + y; };");
34 RegisterModule("test",
35 "var Add = require('add').Add;"
36 "requireNative('assert').AssertTrue(Add(3, 5) == 8);");
37 module_system_->Require("test");
38 }
39
40 TEST_F(ModuleSystemTest, TestNestedRequire) {
41 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
42 RegisterModule("add", "exports.Add = function(x, y) { return x + y; };");
43 RegisterModule("double",
44 "var Add = require('add').Add;"
45 "exports.Double = function(x) { return Add(x, x); };");
46 RegisterModule("test",
47 "var Double = require('double').Double;"
48 "requireNative('assert').AssertTrue(Double(3) == 6);");
49 module_system_->Require("test");
50 }
51
52 TEST_F(ModuleSystemTest, TestModuleInsulation) {
53 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
54 RegisterModule("x",
55 "var x = 10;"
56 "exports.X = function() { return x; };");
57 RegisterModule("y",
58 "var x = 15;"
59 "require('x');"
60 "exports.Y = function() { return x; };");
61 RegisterModule("test",
62 "var Y = require('y').Y;"
63 "var X = require('x').X;"
64 "var assert = requireNative('assert');"
65 "assert.AssertTrue(!this.hasOwnProperty('x'));"
66 "assert.AssertTrue(Y() == 15);"
67 "assert.AssertTrue(X() == 10);");
68 module_system_->Require("test");
69 }
70
71 TEST_F(ModuleSystemTest, TestNativesAreDisabledOutsideANativesEnabledScope) {
72 RegisterModule("test",
73 "var assert;"
74 "try {"
75 " assert = requireNative('assert');"
76 "} catch (e) {"
77 " caught = true;"
78 "}"
79 "if (assert) {"
80 " assert.AssertTrue(true);"
81 "}");
82 module_system_->Require("test");
83 ExpectNoAssertionsMade();
84 }
85
86 TEST_F(ModuleSystemTest, TestNativesAreEnabledWithinANativesEnabledScope) {
87 RegisterModule("test",
88 "var assert = requireNative('assert');"
89 "assert.AssertTrue(true);");
90
91 {
92 ModuleSystem::NativesEnabledScope natives_enabled(module_system_.get());
93 {
94 ModuleSystem::NativesEnabledScope natives_enabled_inner(
95 module_system_.get());
96 }
97 module_system_->Require("test");
98 }
99 }
100
101 TEST_F(ModuleSystemTest, TestLazyField) {
102 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
103 RegisterModule("lazy",
104 "exports.x = 5;");
105
106 v8::Handle<v8::Object> object = CreateGlobal("object");
107
108 module_system_->SetLazyField(object, "blah", "lazy", "x");
109
110 RegisterModule("test",
111 "var assert = requireNative('assert');"
112 "assert.AssertTrue(object.blah == 5);");
113 module_system_->Require("test");
114 }
115
116 TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) {
117 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
118 RegisterModule("lazy",
119 "var object = {};"
120 "object.__defineGetter__('z', function() { return 1; });"
121 "object.x = 5;"
122 "object.y = function() { return 10; };"
123 "exports.object = object;");
124
125 v8::Handle<v8::Object> object = CreateGlobal("object");
126
127 module_system_->SetLazyField(object, "thing", "lazy", "object");
128
129 RegisterModule("test",
130 "var assert = requireNative('assert');"
131 "assert.AssertTrue(object.thing.x == 5);"
132 "assert.AssertTrue(object.thing.y() == 10);"
133 "assert.AssertTrue(object.thing.z == 1);"
134 );
135 module_system_->Require("test");
136 }
137
138 TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) {
139 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
140 module_system_->RegisterNativeHandler(
141 "counter",
142 scoped_ptr<NativeHandler>(new CounterNatives()));
143 RegisterModule("lazy",
144 "requireNative('counter').Increment();"
145 "exports.x = 5;");
146
147 v8::Handle<v8::Object> object = CreateGlobal("object");
148
149 module_system_->SetLazyField(object, "x", "lazy", "x");
150
151 RegisterModule("test",
152 "var assert = requireNative('assert');"
153 "var counter = requireNative('counter');"
154 "assert.AssertTrue(counter.Get() == 0);"
155 "object.x;"
156 "assert.AssertTrue(counter.Get() == 1);"
157 "object.x;"
158 "assert.AssertTrue(counter.Get() == 1);");
159 module_system_->Require("test");
160 }
161
162 TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) {
163 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
164 RegisterModule("lazy",
165 "exports.x = 5;");
166 v8::Handle<v8::Object> object = CreateGlobal("object");
167
168 module_system_->SetLazyField(object, "x", "lazy", "x");
169 RegisterModule("test",
170 "object.x;"
171 "requireNative('assert').AssertTrue(true);");
172 module_system_->Require("test");
173 }
174
175 TEST_F(ModuleSystemTest, TestTransitiveRequire) {
176 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
177 RegisterModule("dependency",
178 "exports.x = 5;");
179 RegisterModule("lazy",
180 "exports.output = require('dependency');");
181
182 v8::Handle<v8::Object> object = CreateGlobal("object");
183
184 module_system_->SetLazyField(object, "thing", "lazy", "output");
185
186 RegisterModule("test",
187 "var assert = requireNative('assert');"
188 "assert.AssertTrue(object.thing.x == 5);");
189 module_system_->Require("test");
190 }
191
192 TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) {
193 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
194 module_system_->RegisterNativeHandler(
195 "counter",
196 scoped_ptr<NativeHandler>(new CounterNatives()));
197
198 RegisterModule("incrementsWhenEvaled",
199 "requireNative('counter').Increment();");
200 RegisterModule("test",
201 "var assert = requireNative('assert');"
202 "var counter = requireNative('counter');"
203 "assert.AssertTrue(counter.Get() == 0);"
204 "require('incrementsWhenEvaled');"
205 "assert.AssertTrue(counter.Get() == 1);"
206 "require('incrementsWhenEvaled');"
207 "assert.AssertTrue(counter.Get() == 1);");
208
209 module_system_->Require("test");
210 }
211
212 TEST_F(ModuleSystemTest, TestOverrideNativeHandler) {
213 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
214 OverrideNativeHandler("assert", "exports.AssertTrue = function() {};");
215 RegisterModule("test", "requireNative('assert').AssertTrue(true);");
216 ExpectNoAssertionsMade();
217 module_system_->Require("test");
218 }
219
220 TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) {
221 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
222 OverrideNativeHandler("thing", "exports.x = 5;");
223 RegisterModule("test",
224 "var assert = requireNative('assert');"
225 "assert.AssertTrue(requireNative('thing').x == 5);");
226 module_system_->Require("test");
227 }
OLDNEW
« no previous file with comments | « chrome/renderer/module_system.cc ('k') | chrome/renderer/native_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698