UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

1,301 lines (1,105 loc) 1.37 MB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2013 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Tristan Koch (tristankoch) * Henner Kollmann (hkollmann) ====================================================================== This class contains code based on the following work: * Sinon.JS 12.0.1 Homepage: http://sinonjs.org/ Documentation: http://sinonjs.org/docs/ Discussion: http://groups.google.com/group/sinonjs Code: https://github.com/cjohansen/Sinon.JS Copyright: (c) 2010-2017, Christian Johansen License: BSD: http://www.opensource.org/licenses/bsd-license.php ************************************************************************ */ /** * Exposes Sinon.JS to qooxdoo. * * This class exposes Sinon.JS (http://sinonjs.org/) and is not to be used * directly. Instead, you should include qx.dev.unit.MMock in your TestCase * and use the wrappers provided. * * @internal */ qx.Bootstrap.define("qx.dev.unit.Sinon", { statics: { /** * Get the Sinon.JS object. * * @signature function() * @return {Object} The Sinon.JS object * */ getSinon: null } }); /* eslint-disable */ /** * @ignore(require) * @ignore(process) * @ignore(global) * @ignore(self) * @ignore(BigInt) * @ignore(TextEncoder) * @ignore(ProgressEvent) * @ignore(_this$options) * @ignore(Blob) * @ignore(CustomEvent) * @ignore(FormData) * @ignore(DOMParser) * */ /*eslint curly: "off"*/ /*eslint no-void: "off"*/ /*eslint no-func-assign: "off" */ /*eslint complexity: ["error", 99]*/ (function () { this.sinon = /** * Below is the original Sinon.JS: * */ /* Sinon.JS 12.0.1, 2021-11-04, @license BSD-3 */ (function () { var define, module, exports; return (function () { function r(e, n, t) { function o(i, f) { if (!n[i]) { if (!e[i]) { var c = "function" == typeof require && require; if (!f && c) return c(i, !0); if (u) return u(i, !0); var a = new Error("Cannot find module '" + i + "'"); throw a.code = "MODULE_NOT_FOUND", a } var p = n[i] = { exports: {} }; e[i][0].call(p.exports, function (r) { var n = e[i][1][r]; return o(n || r) }, p, p.exports, r, e, n, t) } return n[i].exports } for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) o(t[i]); return o } return r })()({ 1: [function (require, module, exports) { "use strict"; var behavior = require("./sinon/behavior"); var createSandbox = require("./sinon/create-sandbox"); var extend = require("./sinon/util/core/extend"); var fakeTimers = require("./sinon/util/fake-timers"); var format = require("./sinon/util/core/format"); var nise = require("nise"); var Sandbox = require("./sinon/sandbox"); var stub = require("./sinon/stub"); var promise = require("./sinon/promise"); var apiMethods = { createSandbox: createSandbox, assert: require("./sinon/assert"), match: require("@sinonjs/samsam").createMatcher, restoreObject: require("./sinon/restore-object"), expectation: require("./sinon/mock-expectation"), defaultConfig: require("./sinon/util/core/default-config"), setFormatter: format.setFormatter, // fake timers timers: fakeTimers.timers, // fake XHR xhr: nise.fakeXhr.xhr, FakeXMLHttpRequest: nise.fakeXhr.FakeXMLHttpRequest, // fake server fakeServer: nise.fakeServer, fakeServerWithClock: nise.fakeServerWithClock, createFakeServer: nise.fakeServer.create.bind(nise.fakeServer), createFakeServerWithClock: nise.fakeServerWithClock.create.bind( nise.fakeServerWithClock), addBehavior: function (name, fn) { behavior.addBehavior(stub, name, fn); }, // fake promise promise: promise, }; var sandbox = new Sandbox(); var api = extend(sandbox, apiMethods); module.exports = api; }, { "./sinon/assert": 2, "./sinon/behavior": 3, "./sinon/create-sandbox": 6, "./sinon/mock-expectation": 9, "./sinon/promise": 11, "./sinon/restore-object": 16, "./sinon/sandbox": 17, "./sinon/stub": 20, "./sinon/util/core/default-config": 22, "./sinon/util/core/extend": 24, "./sinon/util/core/format": 25, "./sinon/util/fake-timers": 39, "@sinonjs/samsam": 84, "nise": 106 } ], 2: [function (require, module, exports) { "use strict"; var arrayProto = require("@sinonjs/commons").prototypes.array; var calledInOrder = require("@sinonjs/commons").calledInOrder; var createMatcher = require("@sinonjs/samsam").createMatcher; var orderByFirstCall = require("@sinonjs/commons").orderByFirstCall; var timesInWords = require("./util/core/times-in-words"); var format = require("./util/core/format"); var stringSlice = require("@sinonjs/commons").prototypes.string.slice; var globalObject = require("@sinonjs/commons").global; var arraySlice = arrayProto.slice; var concat = arrayProto.concat; var forEach = arrayProto.forEach; var join = arrayProto.join; var splice = arrayProto.splice; function createAssertObject() { var assert; function verifyIsStub() { var args = arraySlice(arguments); forEach(args, function (method) { if (!method) { assert.fail("fake is not a spy"); } if (method.proxy && method.proxy.isSinonProxy) { verifyIsStub(method.proxy); } else { if (typeof method !== "function") { assert.fail(`${method} is not a function`); } if (typeof method.getCall !== "function") { assert.fail(`${method} is not stubbed`); } } }); } function verifyIsValidAssertion(assertionMethod, assertionArgs) { switch (assertionMethod) { case "notCalled": case "called": case "calledOnce": case "calledTwice": case "calledThrice": if (assertionArgs.length !== 0) { assert.fail( `${assertionMethod} takes 1 argument but was called with ${ assertionArgs.length + 1 } arguments`); } break; default: break; } } function failAssertion(object, msg) { var obj = object || globalObject; var failMethod = obj.fail || assert.fail; failMethod.call(obj, msg); } function mirrorPropAsAssertion(name, method, message) { var msg = message; var meth = method; if (arguments.length === 2) { msg = method; meth = name; } assert[name] = function (fake) { verifyIsStub(fake); var args = arraySlice(arguments, 1); var failed = false; verifyIsValidAssertion(name, args); if (typeof meth === "function") { failed = !meth(fake); } else { failed = typeof fake[meth] === "function" ? !fake[meth].apply(fake, args) : !fake[meth]; } if (failed) { failAssertion( this, (fake.printf || fake.proxy.printf).apply( fake, concat([msg], args))); } else { assert.pass(name); } }; } function exposedName(prefix, prop) { return !prefix || /^fail/.test(prop) ? prop : prefix + stringSlice(prop, 0, 1).toUpperCase() + stringSlice(prop, 1); } assert = { failException: "AssertError", fail: function fail(message) { var error = new Error(message); error.name = this.failException || assert.failException; throw error; }, pass: function pass() { return; }, callOrder: function assertCallOrder() { verifyIsStub.apply(null, arguments); var expected = ""; var actual = ""; if (!calledInOrder(arguments)) { try { expected = join(arguments, ", "); var calls = arraySlice(arguments); var i = calls.length; while (i) { if (!calls[--i].called) { splice(calls, i, 1); } } actual = join(orderByFirstCall(calls), ", "); } catch (e) { // If this fails, we'll just fall back to the blank string } failAssertion( this, `expected ${expected} to be called in order but were called as ${actual}`); } else { assert.pass("callOrder"); } }, callCount: function assertCallCount(method, count) { verifyIsStub(method); if (method.callCount !== count) { var msg = `expected %n to be called ${timesInWords( count )} but was called %c%C`; failAssertion(this, method.printf(msg)); } else { assert.pass("callCount"); } }, expose: function expose(target, options) { if (!target) { throw new TypeError("target is null or undefined"); } var o = options || {}; var prefix = (typeof o.prefix === "undefined" && "assert") || o.prefix; var includeFail = typeof o.includeFail === "undefined" || Boolean(o.includeFail); var instance = this; forEach(Object.keys(instance), function (method) { if ( method !== "expose" && (includeFail || !/^(fail)/.test(method))) { target[exposedName(prefix, method)] = instance[method]; } }); return target; }, match: function match(actual, expectation) { var matcher = createMatcher(expectation); if (matcher.test(actual)) { assert.pass("match"); } else { var formatted = [ "expected value to match", ` expected = ${format(expectation)}`, ` actual = ${format(actual)}`, ]; failAssertion(this, join(formatted, "\n")); } }, }; mirrorPropAsAssertion( "called", "expected %n to have been called at least once but was never called"); mirrorPropAsAssertion( "notCalled", function (spy) { return !spy.called; }, "expected %n to not have been called but was called %c%C"); mirrorPropAsAssertion( "calledOnce", "expected %n to be called once but was called %c%C"); mirrorPropAsAssertion( "calledTwice", "expected %n to be called twice but was called %c%C"); mirrorPropAsAssertion( "calledThrice", "expected %n to be called thrice but was called %c%C"); mirrorPropAsAssertion( "calledOn", "expected %n to be called with %1 as this but was called with %t"); mirrorPropAsAssertion( "alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); mirrorPropAsAssertion( "alwaysCalledWithNew", "expected %n to always be called with new"); mirrorPropAsAssertion( "calledWith", "expected %n to be called with arguments %D"); mirrorPropAsAssertion( "calledWithMatch", "expected %n to be called with match %D"); mirrorPropAsAssertion( "alwaysCalledWith", "expected %n to always be called with arguments %D"); mirrorPropAsAssertion( "alwaysCalledWithMatch", "expected %n to always be called with match %D"); mirrorPropAsAssertion( "calledWithExactly", "expected %n to be called with exact arguments %D"); mirrorPropAsAssertion( "calledOnceWithExactly", "expected %n to be called once and with exact arguments %D"); mirrorPropAsAssertion( "calledOnceWithMatch", "expected %n to be called once and with match %D"); mirrorPropAsAssertion( "alwaysCalledWithExactly", "expected %n to always be called with exact arguments %D"); mirrorPropAsAssertion( "neverCalledWith", "expected %n to never be called with arguments %*%C"); mirrorPropAsAssertion( "neverCalledWithMatch", "expected %n to never be called with match %*%C"); mirrorPropAsAssertion("threw", "%n did not throw exception%C"); mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); return assert; } module.exports = createAssertObject(); module.exports.createAssertObject = createAssertObject; }, { "./util/core/format": 25, "./util/core/times-in-words": 34, "@sinonjs/commons": 46, "@sinonjs/samsam": 84 } ], 3: [function (require, module, exports) { "use strict"; var arrayProto = require("@sinonjs/commons").prototypes.array; var extend = require("./util/core/extend"); var functionName = require("@sinonjs/commons").functionName; var nextTick = require("./util/core/next-tick"); var valueToString = require("@sinonjs/commons").valueToString; var exportAsyncBehaviors = require("./util/core/export-async-behaviors"); var concat = arrayProto.concat; var join = arrayProto.join; var reverse = arrayProto.reverse; var slice = arrayProto.slice; var useLeftMostCallback = -1; var useRightMostCallback = -2; function getCallback(behavior, args) { var callArgAt = behavior.callArgAt; if (callArgAt >= 0) { return args[callArgAt]; } var argumentList; if (callArgAt === useLeftMostCallback) { argumentList = args; } if (callArgAt === useRightMostCallback) { argumentList = reverse(slice(args)); } var callArgProp = behavior.callArgProp; for (var i = 0, l = argumentList.length; i < l; ++i) { if (!callArgProp && typeof argumentList[i] === "function") { return argumentList[i]; } if ( callArgProp && argumentList[i] && typeof argumentList[i][callArgProp] === "function") { return argumentList[i][callArgProp]; } } return null; } function getCallbackError(behavior, func, args) { if (behavior.callArgAt < 0) { var msg; if (behavior.callArgProp) { msg = `${functionName( behavior.stub )} expected to yield to '${valueToString( behavior.callArgProp )}', but no object with such a property was passed.`; } else { msg = `${functionName( behavior.stub )} expected to yield, but no callback was passed.`; } if (args.length > 0) { msg += ` Received [${join(args, ", ")}]`; } return msg; } return `argument at index ${behavior.callArgAt} is not a function: ${func}`; } function ensureArgs(name, behavior, args) { // map function name to internal property // callsArg => callArgAt var property = name.replace(/sArg/, "ArgAt"); var index = behavior[property]; if (index >= args.length) { throw new TypeError( `${name} failed: ${index + 1} arguments required but only ${ args.length } present`); } } function callCallback(behavior, args) { if (typeof behavior.callArgAt === "number") { ensureArgs("callsArg", behavior, args); var func = getCallback(behavior, args); if (typeof func !== "function") { throw new TypeError(getCallbackError(behavior, func, args)); } if (behavior.callbackAsync) { nextTick(function () { func.apply( behavior.callbackContext, behavior.callbackArguments); }); } else { return func.apply( behavior.callbackContext, behavior.callbackArguments); } } return undefined; } var proto = { create: function create(stub) { var behavior = extend({}, proto); delete behavior.create; delete behavior.addBehavior; delete behavior.createBehavior; behavior.stub = stub; if (stub.defaultBehavior && stub.defaultBehavior.promiseLibrary) { behavior.promiseLibrary = stub.defaultBehavior.promiseLibrary; } return behavior; }, isPresent: function isPresent() { return ( typeof this.callArgAt === "number" || this.exception || this.exceptionCreator || typeof this.returnArgAt === "number" || this.returnThis || typeof this.resolveArgAt === "number" || this.resolveThis || typeof this.throwArgAt === "number" || this.fakeFn || this.returnValueDefined); }, invoke: function invoke(context, args) { /* * callCallback (conditionally) calls ensureArgs * * Note: callCallback intentionally happens before * everything else and cannot be moved lower */ var returnValue = callCallback(this, args); if (this.exception) { throw this.exception; } else if (this.exceptionCreator) { this.exception = this.exceptionCreator(); this.exceptionCreator = undefined; throw this.exception; } else if (typeof this.returnArgAt === "number") { ensureArgs("returnsArg", this, args); return args[this.returnArgAt]; } else if (this.returnThis) { return context; } else if (typeof this.throwArgAt === "number") { ensureArgs("throwsArg", this, args); throw args[this.throwArgAt]; } else if (this.fakeFn) { return this.fakeFn.apply(context, args); } else if (typeof this.resolveArgAt === "number") { ensureArgs("resolvesArg", this, args); return (this.promiseLibrary || Promise).resolve( args[this.resolveArgAt]); } else if (this.resolveThis) { return (this.promiseLibrary || Promise).resolve(context); } else if (this.resolve) { return (this.promiseLibrary || Promise).resolve(this.returnValue); } else if (this.reject) { return (this.promiseLibrary || Promise).reject(this.returnValue); } else if (this.callsThrough) { var wrappedMethod = this.effectiveWrappedMethod(); return wrappedMethod.apply(context, args); } else if (this.callsThroughWithNew) { // Get the original method (assumed to be a constructor in this case) var WrappedClass = this.effectiveWrappedMethod(); // Turn the arguments object into a normal array var argsArray = slice(args); // Call the constructor var F = WrappedClass.bind.apply( WrappedClass, concat([null], argsArray)); return new F(); } else if (typeof this.returnValue !== "undefined") { return this.returnValue; } else if (typeof this.callArgAt === "number") { return returnValue; } return this.returnValue; }, effectiveWrappedMethod: function effectiveWrappedMethod() { for (var stubb = this.stub; stubb; stubb = stubb.parent) { if (stubb.wrappedMethod) { return stubb.wrappedMethod; } } throw new Error("Unable to find wrapped method"); }, onCall: function onCall(index) { return this.stub.onCall(index); }, onFirstCall: function onFirstCall() { return this.stub.onFirstCall(); }, onSecondCall: function onSecondCall() { return this.stub.onSecondCall(); }, onThirdCall: function onThirdCall() { return this.stub.onThirdCall(); }, withArgs: function withArgs(/* arguments */) { throw new Error( 'Defining a stub by invoking "stub.onCall(...).withArgs(...)" ' + 'is not supported. Use "stub.withArgs(...).onCall(...)" ' + "to define sequential behavior for calls with certain arguments."); }, }; function createBehavior(behaviorMethod) { return function () { this.defaultBehavior = this.defaultBehavior || proto.create(this); this.defaultBehavior[behaviorMethod].apply( this.defaultBehavior, arguments); return this; }; } function addBehavior(stub, name, fn) { proto[name] = function () { fn.apply(this, concat([this], slice(arguments))); return this.stub || this; }; stub[name] = createBehavior(name); } proto.addBehavior = addBehavior; proto.createBehavior = createBehavior; var asyncBehaviors = exportAsyncBehaviors(proto); module.exports = extend.nonEnum({}, proto, asyncBehaviors); }, { "./util/core/export-async-behaviors": 23, "./util/core/extend": 24, "./util/core/next-tick": 33, "@sinonjs/commons": 46 } ], 4: [function (require, module, exports) { "use strict"; var walk = require("./util/core/walk"); var getPropertyDescriptor = require("./util/core/get-property-descriptor"); var hasOwnProperty = require("@sinonjs/commons").prototypes.object.hasOwnProperty; var push = require("@sinonjs/commons").prototypes.array.push; function collectMethod(methods, object, prop, propOwner) { if ( typeof getPropertyDescriptor(propOwner, prop).value === "function" && hasOwnProperty(object, prop)) { push(methods, object[prop]); } } // This function returns an array of all the own methods on the passed object function collectOwnMethods(object) { var methods = []; walk(object, collectMethod.bind(null, methods, object)); return methods; } module.exports = collectOwnMethods; }, { "./util/core/get-property-descriptor": 28, "./util/core/walk": 37, "@sinonjs/commons": 46 } ], 5: [function (require, module, exports) { "use strict"; var supportsColor = require("supports-color"); function colorize(str, color) { if (supportsColor.stdout === false) { return str; } return `\x1b[${color}m${str}\x1b[0m`; } exports.red = function (str) { return colorize(str, 31); }; exports.green = function (str) { return colorize(str, 32); }; exports.cyan = function (str) { return colorize(str, 96); }; exports.white = function (str) { return colorize(str, 39); }; exports.bold = function (str) { return colorize(str, 1); }; }, { "supports-color": 109 } ], 6: [function (require, module, exports) { "use strict"; var arrayProto = require("@sinonjs/commons").prototypes.array; var Sandbox = require("./sandbox"); var forEach = arrayProto.forEach; var push = arrayProto.push; function prepareSandboxFromConfig(config) { var sandbox = new Sandbox(); if (config.useFakeServer) { if (typeof config.useFakeServer === "object") { sandbox.serverPrototype = config.useFakeServer; } sandbox.useFakeServer(); } if (config.useFakeTimers) { if (typeof config.useFakeTimers === "object") { sandbox.useFakeTimers(config.useFakeTimers); } else { sandbox.useFakeTimers(); } } return sandbox; } function exposeValue(sandbox, config, key, value) { if (!value) { return; } if (config.injectInto && !(key in config.injectInto)) { config.injectInto[key] = value; push(sandbox.injectedKeys, key); } else { push(sandbox.args, value); } } function createSandbox(config) { if (!config) { return new Sandbox(); } var configuredSandbox = prepareSandboxFromConfig(config); configuredSandbox.args = configuredSandbox.args || []; configuredSandbox.injectedKeys = []; configuredSandbox.injectInto = config.injectInto; var exposed = configuredSandbox.inject({}); if (config.properties) { forEach(config.properties, function (prop) { var value = exposed[prop] || (prop === "sandbox" && configuredSandbox); exposeValue(configuredSandbox, config, prop, value); }); } else { exposeValue(configuredSandbox, config, "sandbox"); } return configuredSandbox; } module.exports = createSandbox; }, { "./sandbox": 17, "@sinonjs/commons": 46 } ], 7: [function (require, module, exports) { "use strict"; var arrayProto = require("@sinonjs/commons").prototypes.array; var isPropertyConfigurable = require("./util/core/is-property-configurable"); var exportAsyncBehaviors = require("./util/core/export-async-behaviors"); var extend = require("./util/core/extend"); var slice = arrayProto.slice; var useLeftMostCallback = -1; var useRightMostCallback = -2; function throwsException(fake, error, message) { if (typeof error === "function") { fake.exceptionCreator = error; } else if (typeof error === "string") { fake.exceptionCreator = function () { var newException = new Error(message || ""); newException.name = error; return newException; }; } else if (!error) { fake.exceptionCreator = function () { return new Error("Error"); }; } else { fake.exception = error; } } var defaultBehaviors = { callsFake: function callsFake(fake, fn) { fake.fakeFn = fn; }, callsArg: function callsArg(fake, index) { if (typeof index !== "number") { throw new TypeError("argument index is not number"); } fake.callArgAt = index; fake.callbackArguments = []; fake.callbackContext = undefined; fake.callArgProp = undefined; fake.callbackAsync = false; }, callsArgOn: function callsArgOn(fake, index, context) { if (typeof index !== "number") { throw new TypeError("argument index is not number"); } fake.callArgAt = index; fake.callbackArguments = []; fake.callbackContext = context; fake.callArgProp = undefined; fake.callbackAsync = false; }, callsArgWith: function callsArgWith(fake, index) { if (typeof index !== "number") { throw new TypeError("argument index is not number"); } fake.callArgAt = index; fake.callbackArguments = slice(arguments, 2); fake.callbackContext = undefined; fake.callArgProp = undefined; fake.callbackAsync = false; }, callsArgOnWith: function callsArgWith(fake, index, context) { if (typeof index !== "number") { throw new TypeError("argument index is not number"); } fake.callArgAt = index; fake.callbackArguments = slice(arguments, 3); fake.callbackContext = context; fake.callArgProp = undefined; fake.callbackAsync = false; }, usingPromise: function usingPromise(fake, promiseLibrary) { fake.promiseLibrary = promiseLibrary; }, yields: function (fake) { fake.callArgAt = useLeftMostCallback; fake.callbackArguments = slice(arguments, 1); fake.callbackContext = undefined; fake.callArgProp = undefined; fake.callbackAsync = false; fake.fakeFn = undefined; }, yieldsRight: function (fake) { fake.callArgAt = useRightMostCallback; fake.callbackArguments = slice(arguments, 1); fake.callbackContext = undefined; fake.callArgProp = undefined; fake.callbackAsync = false; fake.fakeFn = undefined; }, yieldsOn: function (fake, context) { fake.callArgAt = useLeftMostCallback; fake.callbackArguments = slice(arguments, 2); fake.callbackContext = context; fake.callArgProp = undefined; fake.callbackAsync = false; fake.fakeFn = undefined; }, yieldsTo: function (fake, prop) { fake.callArgAt = useLeftMostCallback; fake.callbackArguments = slice(arguments, 2); fake.callbackContext = undefined; fake.callArgProp = prop; fake.callbackAsync = false; fake.fakeFn = undefined; }, yieldsToOn: function (fake, prop, context) { fake.callArgAt = useLeftMostCallback; fake.callbackArguments = slice(arguments, 3); fake.callbackContext = context; fake.callArgProp = prop; fake.callbackAsync = false; fake.fakeFn = undefined; }, throws: throwsException, throwsException: throwsException, returns: function returns(fake, value) { fake.returnValue = value; fake.resolve = false; fake.reject = false; fake.returnValueDefined = true; fake.exception = undefined; fake.exceptionCreator = undefined; fake.fakeFn = undefined; }, returnsArg: function returnsArg(fake, index) { if (typeof index !== "number") { throw new TypeError("argument index is not number"); } fake.returnArgAt = index; }, throwsArg: function throwsArg(fake, index) { if (typeof index !== "number") { throw new TypeError("argument index is not number"); } fake.throwArgAt = index; }, returnsThis: function returnsThis(fake) { fake.returnThis = true; }, resolves: function resolves(fake, value) { fake.returnValue = value; fake.resolve = true; fake.resolveThis = false; fake.reject = false; fake.returnValueDefined = true; fake.exception = undefined; fake.exceptionCreator = undefined; fake.fakeFn = undefined; }, resolvesArg: function resolvesArg(fake, index) { if (typeof index !== "number") { throw new TypeError("argument index is not number"); } fake.resolveArgAt = index; fake.returnValue = undefined; fake.resolve = true; fake.resolveThis = false; fake.reject = false; fake.returnValueDefined = false; fake.exception = undefined; fake.exceptionCreator = undefined; fake.fakeFn = undefined; }, rejects: function rejects(fake, error, message) { var reason; if (typeof error === "string") { reason = new Error(message || ""); reason.name = error; } else if (!error) { reason = new Error("Error"); } else { reason = error; } fake.returnValue = reason; fake.resolve = false; fake.resolveThis = false; fake.reject = true; fake.returnValueDefined = true; fake.exception = undefined; fake.exceptionCreator = undefined; fake.fakeFn = undefined; return fake; }, resolvesThis: function resolvesThis(fake) { fake.returnValue = undefined; fake.resolve = false; fake.resolveThis = true; fake.reject = false; fake.returnValueDefined = false; fake.exception = undefined; fake.exceptionCreator = undefined; fake.fakeFn = undefined; }, callThrough: function callThrough(fake) { fake.callsThrough = true; }, callThroughWithNew: function callThroughWithNew(fake) { fake.callsThroughWithNew = true; }, get: function get(fake, getterFunction) { var rootStub = fake.stub || fake; Object.defineProperty(rootStub.rootObj, rootStub.propName, { get: getterFunction, configurable: isPropertyConfigurable( rootStub.rootObj, rootStub.propName), }); return fake; }, set: function set(fake, setterFunction) { var rootStub = fake.stub || fake; Object.defineProperty( rootStub.rootObj, rootStub.propName, // eslint-disable-next-line accessor-pairs { set: setterFunction, configurable: isPropertyConfigurable( rootStub.rootObj, rootStub.propName), }); return fake; }, value: function value(fake, newVal) { var rootStub = fake.stub || fake; Object.defineProperty(rootStub.rootObj, rootStub.propName, { value: newVal, enumerable: true, configurable: rootStub.shadowsPropOnPrototype || isPropertyConfigurable(rootStub.rootObj, rootStub.propName), }); return fake; }, }; var asyncBehaviors = exportAsyncBehaviors(defaultBehaviors); module.exports = extend({}, defaultBehaviors, asyncBehaviors); }, { "./util/core/export-async-behaviors": 23, "./util/core/extend": 24, "./util/core/is-property-configurable": 31, "@sinonjs/commons": 46 } ], 8: [function (require, module, exports) { "use strict"; var arrayProto = require("@sinonjs/commons").prototypes.array; var createProxy = require("./proxy"); var nextTick = require("./util/core/next-tick"); var slice = arrayProto.slice; var promiseLib = Promise; module.exports = fake; /** * Returns a `fake` that records all calls, arguments and return values. * * When an `f` argument is supplied, this implementation will be used. * * @example * // create an empty fake * var f1 = sinon.fake(); * * f1(); * * f1.calledOnce() * // true * * @example * function greet(greeting) { * console.log(`Hello ${greeting}`); * } * * // create a fake with implementation * var f2 = sinon.fake(greet); * * // Hello world * f2("world"); * * f2.calledWith("world"); * // true * * @param {Function|undefined} f * @returns {Function} * @namespace */ function fake(f) { if (arguments.length > 0 && typeof f !== "function") { throw new TypeError("Expected f argument to be a Function"); } return wrapFunc(f); } /** * Creates a `fake` that returns the provided `value`, as well as recording all * calls, arguments and return values. * * @example * var f1 = sinon.fake.returns(42); * * f1(); * // 42 * * @memberof fake * @param {*} value * @returns {Function} */ fake.returns = function returns(value) { // eslint-disable-next-line jsdoc/require-jsdoc function f() { return value; } return wrapFunc(f); }; /** * Creates a `fake` that throws an Error. * If the `value` argument does not have Error in its prototype chain, it will * be used for creating a new error. * * @example * var f1 = sinon.fake.throws("hello"); * * f1(); * // Uncaught Error: hello * * @example * var f2 = sinon.fake.throws(new TypeError("Invalid argument")); * * f2(); * // Uncaught TypeError: Invalid argument * * @memberof fake * @param {*|Error} value * @returns {Function} */ fake.throws = function throws(value) { // eslint-disable-next-line jsdoc/require-jsdoc function f() { throw getError(value); } return wrapFunc(f); }; /** * Creates a `fake` that returns a promise that resolves to the passed `value` * argument. * * @example * var f1 = sinon.fake.resolves("apple pie"); * * await f1(); * // "apple pie" * * @memb