UNPKG

2.46 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var lodash_1 = require("./wrap/lodash");
4var log_1 = require("./log");
5var function_1 = require("./function");
6var imitate_1 = require("./imitate");
7var proxy_1 = require("./object/proxy");
8var DEFAULT_OPTIONS = { excludeMethods: ['then'] };
9function object(nameOrType, config) {
10 return lodash_1.default.tap(fakeObject(nameOrType, config, arguments.length), function (obj) {
11 addToStringToDouble(obj, nameOrType);
12 });
13}
14exports.default = object;
15var fakeObject = function (nameOrType, config, argCount) {
16 if (lodash_1.default.isArray(nameOrType)) {
17 return createTestDoublesForFunctionNames(nameOrType);
18 }
19 else if (lodash_1.default.isObjectLike(nameOrType)) {
20 return imitate_1.default(nameOrType);
21 }
22 else if (lodash_1.default.isString(nameOrType) || argCount === 0) {
23 return proxy_1.default(nameOrType, withDefaults(config));
24 }
25 else if (lodash_1.default.isFunction(nameOrType)) {
26 ensureFunctionIsNotPassed();
27 }
28 else {
29 ensureOtherGarbageIsNotPassed();
30 }
31};
32var createTestDoublesForFunctionNames = function (names) {
33 return lodash_1.default.transform(names, function (acc, funcName) {
34 acc[funcName] = function_1.default("." + String(funcName));
35 }, {});
36};
37var ensureFunctionIsNotPassed = function () {
38 return log_1.default.error('td.object', "Functions are not valid arguments to `td.object` (as of testdouble@2.0.0). Please use `td.function()` or `td.constructor()` instead for creating fake functions.");
39};
40var ensureOtherGarbageIsNotPassed = function () {
41 return log_1.default.error('td.object', "To create a fake object with td.object(), pass it a plain object that contains\nfunctions, an array of function names, or (if your runtime supports ES Proxy\nobjects) a string name.\n\nIf you passed td.object an instance of a custom type, consider passing the\ntype's constructor to `td.constructor()` instead.\n");
42};
43var withDefaults = function (config) {
44 return lodash_1.default.extend({}, DEFAULT_OPTIONS, config);
45};
46var addToStringToDouble = function (fakeObject, nameOrType) {
47 var name = nameOf(nameOrType);
48 fakeObject.toString = function () { return "[test double object" + (name ? " for \"" + name + "\"" : '') + "]"; };
49};
50var nameOf = function (nameOrType) {
51 return lodash_1.default.isString(nameOrType)
52 ? nameOrType
53 : '';
54};