| Index: chrome/renderer/extensions/module_system_unittest.cc
|
| diff --git a/chrome/renderer/extensions/module_system_unittest.cc b/chrome/renderer/extensions/module_system_unittest.cc
|
| deleted file mode 100644
|
| index f99cb622256b6450e7dee2883764ae73b2595d7a..0000000000000000000000000000000000000000
|
| --- a/chrome/renderer/extensions/module_system_unittest.cc
|
| +++ /dev/null
|
| @@ -1,489 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "chrome/test/base/module_system_test.h"
|
| -#include "extensions/renderer/module_system.h"
|
| -#include "gin/modules/module_registry.h"
|
| -
|
| -// TODO(cduvall/kalman): Put this file in extensions namespace.
|
| -using extensions::ModuleSystem;
|
| -using extensions::NativeHandler;
|
| -using extensions::ObjectBackedNativeHandler;
|
| -
|
| -class CounterNatives : public ObjectBackedNativeHandler {
|
| - public:
|
| - explicit CounterNatives(extensions::ChromeV8Context* context)
|
| - : ObjectBackedNativeHandler(context), counter_(0) {
|
| - RouteFunction("Get", base::Bind(&CounterNatives::Get,
|
| - base::Unretained(this)));
|
| - RouteFunction("Increment", base::Bind(&CounterNatives::Increment,
|
| - base::Unretained(this)));
|
| - }
|
| -
|
| - void Get(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| - args.GetReturnValue().Set(static_cast<int32_t>(counter_));
|
| - }
|
| -
|
| - void Increment(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| - counter_++;
|
| - }
|
| -
|
| - private:
|
| - int counter_;
|
| -};
|
| -
|
| -class TestExceptionHandler : public ModuleSystem::ExceptionHandler {
|
| - public:
|
| - TestExceptionHandler()
|
| - : handled_exception_(false) {
|
| - }
|
| -
|
| - virtual void HandleUncaughtException(const v8::TryCatch& try_catch) OVERRIDE {
|
| - handled_exception_ = true;
|
| - }
|
| -
|
| - bool handled_exception() const { return handled_exception_; }
|
| -
|
| - private:
|
| - bool handled_exception_;
|
| -};
|
| -
|
| -TEST_F(ModuleSystemTest, TestExceptionHandling) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - TestExceptionHandler* handler = new TestExceptionHandler;
|
| - scoped_ptr<ModuleSystem::ExceptionHandler> scoped_handler(handler);
|
| - ASSERT_FALSE(handler->handled_exception());
|
| - env()->module_system()->SetExceptionHandlerForTest(scoped_handler.Pass());
|
| -
|
| - env()->RegisterModule("test", "throw 'hi';");
|
| - env()->module_system()->Require("test");
|
| - ASSERT_TRUE(handler->handled_exception());
|
| -
|
| - ExpectNoAssertionsMade();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequire) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("add",
|
| - "exports.Add = function(x, y) { return x + y; };");
|
| - env()->RegisterModule("test",
|
| - "var Add = require('add').Add;"
|
| - "requireNative('assert').AssertTrue(Add(3, 5) == 8);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestNestedRequire) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("add",
|
| - "exports.Add = function(x, y) { return x + y; };");
|
| - env()->RegisterModule("double",
|
| - "var Add = require('add').Add;"
|
| - "exports.Double = function(x) { return Add(x, x); };");
|
| - env()->RegisterModule("test",
|
| - "var Double = require('double').Double;"
|
| - "requireNative('assert').AssertTrue(Double(3) == 6);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestModuleInsulation) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("x",
|
| - "var x = 10;"
|
| - "exports.X = function() { return x; };");
|
| - env()->RegisterModule("y",
|
| - "var x = 15;"
|
| - "require('x');"
|
| - "exports.Y = function() { return x; };");
|
| - env()->RegisterModule("test",
|
| - "var Y = require('y').Y;"
|
| - "var X = require('x').X;"
|
| - "var assert = requireNative('assert');"
|
| - "assert.AssertTrue(!this.hasOwnProperty('x'));"
|
| - "assert.AssertTrue(Y() == 15);"
|
| - "assert.AssertTrue(X() == 10);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestNativesAreDisabledOutsideANativesEnabledScope) {
|
| - env()->RegisterModule("test",
|
| - "var assert;"
|
| - "try {"
|
| - " assert = requireNative('assert');"
|
| - "} catch (e) {"
|
| - " var caught = true;"
|
| - "}"
|
| - "if (assert) {"
|
| - " assert.AssertTrue(true);"
|
| - "}");
|
| - env()->module_system()->Require("test");
|
| - ExpectNoAssertionsMade();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestNativesAreEnabledWithinANativesEnabledScope) {
|
| - env()->RegisterModule("test",
|
| - "var assert = requireNative('assert');"
|
| - "assert.AssertTrue(true);");
|
| -
|
| - {
|
| - ModuleSystem::NativesEnabledScope natives_enabled(env()->module_system());
|
| - {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_inner(
|
| - env()->module_system());
|
| - }
|
| - env()->module_system()->Require("test");
|
| - }
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestLazyField) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("lazy", "exports.x = 5;");
|
| -
|
| - v8::Handle<v8::Object> object = env()->CreateGlobal("object");
|
| -
|
| - env()->module_system()->SetLazyField(object, "blah", "lazy", "x");
|
| -
|
| - env()->RegisterModule("test",
|
| - "var assert = requireNative('assert');"
|
| - "assert.AssertTrue(object.blah == 5);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestLazyFieldYieldingObject) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule(
|
| - "lazy",
|
| - "var object = {};"
|
| - "object.__defineGetter__('z', function() { return 1; });"
|
| - "object.x = 5;"
|
| - "object.y = function() { return 10; };"
|
| - "exports.object = object;");
|
| -
|
| - v8::Handle<v8::Object> object = env()->CreateGlobal("object");
|
| -
|
| - env()->module_system()->SetLazyField(object, "thing", "lazy", "object");
|
| -
|
| - env()->RegisterModule("test",
|
| - "var assert = requireNative('assert');"
|
| - "assert.AssertTrue(object.thing.x == 5);"
|
| - "assert.AssertTrue(object.thing.y() == 10);"
|
| - "assert.AssertTrue(object.thing.z == 1);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->module_system()->RegisterNativeHandler(
|
| - "counter",
|
| - scoped_ptr<NativeHandler>(new CounterNatives(env()->context())));
|
| - env()->RegisterModule("lazy",
|
| - "requireNative('counter').Increment();"
|
| - "exports.x = 5;");
|
| -
|
| - v8::Handle<v8::Object> object = env()->CreateGlobal("object");
|
| -
|
| - env()->module_system()->SetLazyField(object, "x", "lazy", "x");
|
| -
|
| - env()->RegisterModule("test",
|
| - "var assert = requireNative('assert');"
|
| - "var counter = requireNative('counter');"
|
| - "assert.AssertTrue(counter.Get() == 0);"
|
| - "object.x;"
|
| - "assert.AssertTrue(counter.Get() == 1);"
|
| - "object.x;"
|
| - "assert.AssertTrue(counter.Get() == 1);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireNativesAfterLazyEvaluation) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("lazy", "exports.x = 5;");
|
| - v8::Handle<v8::Object> object = env()->CreateGlobal("object");
|
| -
|
| - env()->module_system()->SetLazyField(object, "x", "lazy", "x");
|
| - env()->RegisterModule("test",
|
| - "object.x;"
|
| - "requireNative('assert').AssertTrue(true);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestTransitiveRequire) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("dependency", "exports.x = 5;");
|
| - env()->RegisterModule("lazy", "exports.output = require('dependency');");
|
| -
|
| - v8::Handle<v8::Object> object = env()->CreateGlobal("object");
|
| -
|
| - env()->module_system()->SetLazyField(object, "thing", "lazy", "output");
|
| -
|
| - env()->RegisterModule("test",
|
| - "var assert = requireNative('assert');"
|
| - "assert.AssertTrue(object.thing.x == 5);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->module_system()->RegisterNativeHandler(
|
| - "counter",
|
| - scoped_ptr<NativeHandler>(new CounterNatives(env()->context())));
|
| -
|
| - env()->RegisterModule("incrementsWhenEvaled",
|
| - "requireNative('counter').Increment();");
|
| - env()->RegisterModule("test",
|
| - "var assert = requireNative('assert');"
|
| - "var counter = requireNative('counter');"
|
| - "assert.AssertTrue(counter.Get() == 0);"
|
| - "require('incrementsWhenEvaled');"
|
| - "assert.AssertTrue(counter.Get() == 1);"
|
| - "require('incrementsWhenEvaled');"
|
| - "assert.AssertTrue(counter.Get() == 1);");
|
| -
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestOverrideNativeHandler) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->OverrideNativeHandler("assert", "exports.AssertTrue = function() {};");
|
| - env()->RegisterModule("test", "requireNative('assert').AssertTrue(true);");
|
| - ExpectNoAssertionsMade();
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestOverrideNonExistentNativeHandler) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->OverrideNativeHandler("thing", "exports.x = 5;");
|
| - env()->RegisterModule("test",
|
| - "var assert = requireNative('assert');"
|
| - "assert.AssertTrue(requireNative('thing').x == 5);");
|
| - env()->module_system()->Require("test");
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireAsync) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("add",
|
| - "define('add', [], function() {"
|
| - " return { Add: function(x, y) { return x + y; } };"
|
| - "});");
|
| - env()->RegisterModule("math",
|
| - "define('math', ['add'], function(add) {"
|
| - " return { Add: add.Add };"
|
| - "});");
|
| - env()->RegisterModule(
|
| - "test",
|
| - "requireAsync('math').then(function(math) {"
|
| - " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);"
|
| - "});");
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireAsyncInParallel) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("add",
|
| - "define('add', [], function() {"
|
| - " return { Add: function(x, y) { return x + y; } };"
|
| - "});");
|
| - env()->RegisterModule(
|
| - "subtract",
|
| - "define('subtract', [], function() {"
|
| - " return { Subtract: function(x, y) { return x - y; } };"
|
| - "});");
|
| - env()->RegisterModule(
|
| - "math",
|
| - "exports.AddAndSubtract = function(x, y, z) {"
|
| - " return Promise.all([requireAsync('add'),"
|
| - " requireAsync('subtract')"
|
| - " ]).then(function(modules) {"
|
| - " return modules[1].Subtract(modules[0].Add(x, y), z);"
|
| - " });"
|
| - "};");
|
| - env()->RegisterModule("test",
|
| - "var AddAndSubtract = require('math').AddAndSubtract;"
|
| - "AddAndSubtract(3, 5, 2).then(function(result) {"
|
| - " requireNative('assert').AssertTrue(result == 6);"
|
| - "});");
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestNestedRequireAsyncs) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("first",
|
| - "define('first', [], function() {"
|
| - " return { next: 'second' };"
|
| - "});");
|
| - env()->RegisterModule("second",
|
| - "define('second', [], function() {"
|
| - " return { next: '' };"
|
| - "});");
|
| - env()->RegisterModule(
|
| - "test",
|
| - "requireAsync('first').then(function(module) {"
|
| - " return requireAsync(module.next)"
|
| - "}).then(function(module) {"
|
| - " requireNative('assert').AssertTrue(module.next === '');"
|
| - "});");
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireFromAMDModule) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("add",
|
| - "exports.Add = function(x, y) { return x + y; };");
|
| - env()->RegisterModule("math",
|
| - "define('math', [], function() {"
|
| - " var add = require('add');"
|
| - " return { Add: add.Add };"
|
| - "});");
|
| - env()->RegisterModule(
|
| - "test",
|
| - "requireAsync('math').then(function(math) {"
|
| - " requireNative('assert').AssertTrue(math.Add(3, 5) == 8);"
|
| - "});");
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireAsyncFromAMDModule) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("add",
|
| - "define('add', [], function() {"
|
| - " return { Add: function(x, y) { return x + y; } };"
|
| - "});");
|
| - env()->RegisterModule("math",
|
| - "define('math', [], function() {"
|
| - " function Add(x, y) {"
|
| - " return requireAsync('add').then(function(add) {"
|
| - " return add.Add(x, y);"
|
| - " });"
|
| - " }"
|
| - " return { Add: Add };"
|
| - "});");
|
| - env()->RegisterModule("test",
|
| - "requireAsync('math').then(function(math) {"
|
| - " return math.Add(3, 6);"
|
| - "}).then(function(result) {"
|
| - " requireNative('assert').AssertTrue(result == 9);"
|
| - "});");
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireAsyncFromAnotherContext) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule(
|
| - "test",
|
| - "requireAsync('natives').then(function(natives) {"
|
| - " natives.requireAsync('ping').then(function(ping) {"
|
| - " return ping();"
|
| - " }).then(function(result) {"
|
| - " requireNative('assert').AssertTrue(result == 'pong');"
|
| - " });"
|
| - "});");
|
| - scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment();
|
| - other_env->RegisterModule("ping",
|
| - "define('ping', ['natives'], function(natives) {"
|
| - " return function() {"
|
| - " return 'pong';"
|
| - " }"
|
| - "});");
|
| - gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule(
|
| - env()->isolate(), "natives", other_env->module_system()->NewInstance());
|
| - gin::ModuleRegistry::From(other_env->context()->v8_context())
|
| - ->AddBuiltinModule(
|
| - env()->isolate(), "natives", env()->module_system()->NewInstance());
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireAsyncBetweenContexts) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("pong",
|
| - "define('pong', [], function() {"
|
| - " return function() { return 'done'; };"
|
| - "});");
|
| - env()->RegisterModule(
|
| - "test",
|
| - "requireAsync('natives').then(function(natives) {"
|
| - " natives.requireAsync('ping').then(function(ping) {"
|
| - " return ping();"
|
| - " }).then(function(pong) {"
|
| - " return pong();"
|
| - " }).then(function(result) {"
|
| - " requireNative('assert').AssertTrue(result == 'done');"
|
| - " });"
|
| - "});");
|
| - scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment();
|
| - other_env->RegisterModule("ping",
|
| - "define('ping', ['natives'], function(natives) {"
|
| - " return function() {"
|
| - " return natives.requireAsync('pong');"
|
| - " }"
|
| - "});");
|
| - gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule(
|
| - env()->isolate(), "natives", other_env->module_system()->NewInstance());
|
| - gin::ModuleRegistry::From(other_env->context()->v8_context())
|
| - ->AddBuiltinModule(
|
| - env()->isolate(), "natives", env()->module_system()->NewInstance());
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireAsyncFromContextWithNoModuleRegistry) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("test",
|
| - "requireAsync('natives').then(function(natives) {"
|
| - " var AssertTrue = requireNative('assert').AssertTrue;"
|
| - " natives.requireAsync('foo').then(function() {"
|
| - " AssertTrue(false);"
|
| - " }).catch(function(error) {"
|
| - " AssertTrue(error.message == "
|
| - " 'Extension view no longer exists');"
|
| - " });"
|
| - "});");
|
| - scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment();
|
| - gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule(
|
| - env()->isolate(), "natives", other_env->module_system()->NewInstance());
|
| - other_env->ShutdownGin();
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
| -
|
| -TEST_F(ModuleSystemTest, TestRequireAsyncFromContextWithNoModuleSystem) {
|
| - ModuleSystem::NativesEnabledScope natives_enabled_scope(
|
| - env()->module_system());
|
| - env()->RegisterModule("test",
|
| - "requireAsync('natives').then(function(natives) {"
|
| - " requireNative('assert').AssertTrue("
|
| - " natives.requireAsync('foo') === undefined);"
|
| - "});");
|
| - scoped_ptr<ModuleSystemTestEnvironment> other_env = CreateEnvironment();
|
| - gin::ModuleRegistry::From(env()->context()->v8_context())->AddBuiltinModule(
|
| - env()->isolate(), "natives", other_env->module_system()->NewInstance());
|
| - other_env->ShutdownModuleSystem();
|
| - env()->module_system()->Require("test");
|
| - RunResolvedPromises();
|
| -}
|
|
|