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 3 // found in the LICENSE file. 4 5 #include "base/strings/stringprintf.h" 6 #include "chrome/test/base/module_system_test.h" 7 #include "grit/extensions_renderer_resources.h" 8 9 namespace extensions { 10 namespace { 11 12 class UtilsUnittest : public ModuleSystemTest { 13 protected: 14 void RegisterTestModule(const char* code) { 15 RegisterModule("test", 16 base::StringPrintf( 17 "var assert = requireNative('assert');\n" 18 "var AssertTrue = assert.AssertTrue;\n" 19 "var AssertFalse = assert.AssertFalse;\n" 20 "var utils = require('utils');\n" 21 "%s", 22 code)); 23 } 24 25 private: 26 virtual void SetUp() OVERRIDE { 27 ModuleSystemTest::SetUp(); 28 29 RegisterModule("utils", IDR_UTILS_JS); 30 OverrideNativeHandler("schema_registry", 31 "exports.GetSchema = function() {};"); 32 OverrideNativeHandler("logging", 33 "exports.CHECK = function() {};\n" 34 "exports.WARNING = function() {};"); 35 } 36 }; 37 38 TEST_F(UtilsUnittest, TestNothing) { 39 ExpectNoAssertionsMade(); 40 } 41 42 TEST_F(UtilsUnittest, SuperClass) { 43 ModuleSystem::NativesEnabledScope natives_enabled_scope( 44 context_->module_system()); 45 RegisterTestModule( 46 "function SuperClassImpl() {}\n" 47 "\n" 48 "SuperClassImpl.prototype = {\n" 49 " attrA: 'aSuper',\n" 50 " attrB: 'bSuper',\n" 51 " func: function() { return 'func'; },\n" 52 " superFunc: function() { return 'superFunc'; }\n" 53 "};\n" 54 "\n" 55 "function SubClassImpl() {\n" 56 " SuperClassImpl.call(this);\n" 57 "}\n" 58 "\n" 59 "SubClassImpl.prototype = {\n" 60 " __proto__: SuperClassImpl.prototype,\n" 61 " attrA: 'aSub',\n" 62 " attrC: 'cSub',\n" 63 " func: function() { return 'overridden'; },\n" 64 " subFunc: function() { return 'subFunc'; }\n" 65 "};\n" 66 "\n" 67 "var SuperClass = utils.expose('SuperClass',\n" 68 " SuperClassImpl,\n" 69 " { functions: ['func', 'superFunc'],\n" 70 " properties: ['attrA', 'attrB'] });\n" 71 "\n" 72 "var SubClass = utils.expose('SubClass',\n" 73 " SubClassImpl,\n" 74 " { superclass: SuperClass,\n" 75 " functions: ['subFunc'],\n" 76 " properties: ['attrC'] });\n" 77 "\n" 78 "var supe = new SuperClass();\n" 79 "AssertTrue(supe.attrA == 'aSuper');\n" 80 "AssertTrue(supe.attrB == 'bSuper');\n" 81 "AssertFalse('attrC' in supe);\n" 82 "AssertTrue(supe.func() == 'func');\n" 83 "AssertTrue('superFunc' in supe);\n" 84 "AssertTrue(supe.superFunc() == 'superFunc');\n" 85 "AssertFalse('subFunc' in supe);\n" 86 "AssertTrue(supe instanceof SuperClass);\n" 87 "\n" 88 "var sub = new SubClass();\n" 89 "AssertTrue(sub.attrA == 'aSub');\n" 90 "AssertTrue(sub.attrB == 'bSuper');\n" 91 "AssertTrue(sub.attrC == 'cSub');\n" 92 "AssertTrue(sub.func() == 'overridden');\n" 93 "AssertTrue(sub.superFunc() == 'superFunc');\n" 94 "AssertTrue('subFunc' in sub);\n" 95 "AssertTrue(sub.subFunc() == 'subFunc');\n" 96 "AssertTrue(sub instanceof SuperClass);\n" 97 "AssertTrue(sub instanceof SubClass);\n" 98 "\n" 99 "function SubSubClassImpl() {}\n" 100 "SubSubClassImpl.prototype = Object.create(SubClassImpl.prototype);\n" 101 "SubSubClassImpl.prototype.subSubFunc = function() { return 'subsub'; }\n" 102 "\n" 103 "var SubSubClass = utils.expose('SubSubClass',\n" 104 " SubSubClassImpl,\n" 105 " { superclass: SubClass,\n" 106 " functions: ['subSubFunc'] });\n" 107 "var subsub = new SubSubClass();\n" 108 "AssertTrue(subsub.attrA == 'aSub');\n" 109 "AssertTrue(subsub.attrB == 'bSuper');\n" 110 "AssertTrue(subsub.attrC == 'cSub');\n" 111 "AssertTrue(subsub.func() == 'overridden');\n" 112 "AssertTrue(subsub.superFunc() == 'superFunc');\n" 113 "AssertTrue(subsub.subFunc() == 'subFunc');\n" 114 "AssertTrue(subsub.subSubFunc() == 'subsub');\n" 115 "AssertTrue(subsub instanceof SuperClass);\n" 116 "AssertTrue(subsub instanceof SubClass);\n" 117 "AssertTrue(subsub instanceof SubSubClass);\n"); 118 119 context_->module_system()->Require("test"); 120 } 121 122 } // namespace 123 } // namespace extensions 124