| Index: extensions/test/data/utils_unittest.js
|
| diff --git a/extensions/test/data/utils_unittest.js b/extensions/test/data/utils_unittest.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1ecc42147a3ef7589ba2b18d5dcc30194cc85206
|
| --- /dev/null
|
| +++ b/extensions/test/data/utils_unittest.js
|
| @@ -0,0 +1,137 @@
|
| +// Copyright 2014 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.
|
| +
|
| +var assert = requireNative('assert');
|
| +var AssertTrue = assert.AssertTrue;
|
| +var AssertFalse = assert.AssertFalse;
|
| +var utils = require('utils');
|
| +
|
| +function testSuperClass() {
|
| + function SuperClassImpl() {}
|
| +
|
| + SuperClassImpl.prototype = {
|
| + attrA: 'aSuper',
|
| + attrB: 'bSuper',
|
| + func: function() { return 'func'; },
|
| + superFunc: function() { return 'superFunc'; }
|
| + };
|
| +
|
| + function SubClassImpl() {
|
| + SuperClassImpl.call(this);
|
| + }
|
| +
|
| + SubClassImpl.prototype = {
|
| + __proto__: SuperClassImpl.prototype,
|
| + attrA: 'aSub',
|
| + attrC: 'cSub',
|
| + func: function() { return 'overridden'; },
|
| + subFunc: function() { return 'subFunc'; }
|
| + };
|
| +
|
| + var SuperClass = utils.expose('SuperClass',
|
| + SuperClassImpl,
|
| + { functions: ['func', 'superFunc'],
|
| + properties: ['attrA', 'attrB'] });
|
| +
|
| + var SubClass = utils.expose('SubClass',
|
| + SubClassImpl,
|
| + { superclass: SuperClass,
|
| + functions: ['subFunc'],
|
| + properties: ['attrC'] });
|
| +
|
| + var supe = new SuperClass();
|
| + AssertTrue(supe.attrA == 'aSuper');
|
| + AssertTrue(supe.attrB == 'bSuper');
|
| + AssertFalse('attrC' in supe);
|
| + AssertTrue(supe.func() == 'func');
|
| + AssertTrue('superFunc' in supe);
|
| + AssertTrue(supe.superFunc() == 'superFunc');
|
| + AssertFalse('subFunc' in supe);
|
| + AssertTrue(supe instanceof SuperClass);
|
| +
|
| + var sub = new SubClass();
|
| + AssertTrue(sub.attrA == 'aSub');
|
| + AssertTrue(sub.attrB == 'bSuper');
|
| + AssertTrue(sub.attrC == 'cSub');
|
| + AssertTrue(sub.func() == 'overridden');
|
| + AssertTrue(sub.superFunc() == 'superFunc');
|
| + AssertTrue('subFunc' in sub);
|
| + AssertTrue(sub.subFunc() == 'subFunc');
|
| + AssertTrue(sub instanceof SuperClass);
|
| + AssertTrue(sub instanceof SubClass);
|
| +
|
| + function SubSubClassImpl() {}
|
| + SubSubClassImpl.prototype = Object.create(SubClassImpl.prototype);
|
| + SubSubClassImpl.prototype.subSubFunc = function() { return 'subsub'; }
|
| +
|
| + var SubSubClass = utils.expose('SubSubClass',
|
| + SubSubClassImpl,
|
| + { superclass: SubClass,
|
| + functions: ['subSubFunc'] });
|
| + var subsub = new SubSubClass();
|
| + AssertTrue(subsub.attrA == 'aSub');
|
| + AssertTrue(subsub.attrB == 'bSuper');
|
| + AssertTrue(subsub.attrC == 'cSub');
|
| + AssertTrue(subsub.func() == 'overridden');
|
| + AssertTrue(subsub.superFunc() == 'superFunc');
|
| + AssertTrue(subsub.subFunc() == 'subFunc');
|
| + AssertTrue(subsub.subSubFunc() == 'subsub');
|
| + AssertTrue(subsub instanceof SuperClass);
|
| + AssertTrue(subsub instanceof SubClass);
|
| + AssertTrue(subsub instanceof SubSubClass);
|
| +}
|
| +
|
| +function fakeApiFunction(shouldSucceed, numberOfResults, callback) {
|
| + if (shouldSucceed) {
|
| + var result = [];
|
| + for (var i = 0; i < numberOfResults; i++) {
|
| + result.push(i);
|
| + }
|
| + $Function.apply(callback, null, result);
|
| + return;
|
| + }
|
| + chrome.runtime.lastError = 'error message';
|
| + callback();
|
| + chrome.runtime.lastError = null;
|
| +}
|
| +
|
| +function testPromiseNoResult() {
|
| + utils.promise(fakeApiFunction, true, 0).then(function(result) {
|
| + AssertTrue(result === undefined);
|
| + }).catch(function(e) {
|
| + AssertFalse(True);
|
| + });
|
| +}
|
| +
|
| +function testPromiseOneResult() {
|
| + utils.promise(fakeApiFunction, true, 1).then(function(result) {
|
| + AssertTrue(result === 0);
|
| + }).catch(function(e) {
|
| + AssertFalse(True);
|
| + });
|
| +}
|
| +
|
| +function testPromiseTwoResults() {
|
| + utils.promise(fakeApiFunction, true, 2).then(function(result) {
|
| + AssertTrue(result.length == 2);
|
| + AssertTrue(result[0] == 0);
|
| + AssertTrue(result[1] == 1);
|
| + }).catch(function(e) {
|
| + AssertFalse(True);
|
| + });
|
| +}
|
| +
|
| +function testPromiseError() {
|
| + utils.promise(fakeApiFunction, false, 0).then(function(result) {
|
| + AssertFalse(True);
|
| + }).catch(function(e) {
|
| + AssertTrue(e.message == 'error message');
|
| + });
|
| +}
|
| +
|
| +exports.testSuperClass = testSuperClass;
|
| +exports.testPromiseNoResult = testPromiseNoResult;
|
| +exports.testPromiseOneResult = testPromiseOneResult;
|
| +exports.testPromiseTwoResults = testPromiseTwoResults;
|
| +exports.testPromiseError = testPromiseError;
|
|
|