1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var lodash_1 = require("./wrap/lodash");
|
4 | var log_1 = require("./log");
|
5 | var function_1 = require("./function");
|
6 | var imitate_1 = require("./imitate");
|
7 | var proxy_1 = require("./object/proxy");
|
8 | var DEFAULT_OPTIONS = { excludeMethods: ['then'] };
|
9 | function object(nameOrType, config) {
|
10 | return lodash_1.default.tap(fakeObject(nameOrType, config, arguments.length), function (obj) {
|
11 | addToStringToDouble(obj, nameOrType);
|
12 | });
|
13 | }
|
14 | exports.default = object;
|
15 | var 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 | };
|
32 | var createTestDoublesForFunctionNames = function (names) {
|
33 | return lodash_1.default.transform(names, function (acc, funcName) {
|
34 | acc[funcName] = function_1.default("." + String(funcName));
|
35 | }, {});
|
36 | };
|
37 | var 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 | };
|
40 | var 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 | };
|
43 | var withDefaults = function (config) {
|
44 | return lodash_1.default.extend({}, DEFAULT_OPTIONS, config);
|
45 | };
|
46 | var addToStringToDouble = function (fakeObject, nameOrType) {
|
47 | var name = nameOf(nameOrType);
|
48 | fakeObject.toString = function () { return "[test double object" + (name ? " for \"" + name + "\"" : '') + "]"; };
|
49 | };
|
50 | var nameOf = function (nameOrType) {
|
51 | return lodash_1.default.isString(nameOrType)
|
52 | ? nameOrType
|
53 | : '';
|
54 | };
|