Home | History | Annotate | Download | only in extensions
      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