@fgv/ts-utils-jest 1.9.4 → 2.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +28 -0
- package/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/dist/ts-utils-jest.d.ts +69 -0
- package/{helpers → lib/helpers}/fsHelpers.d.ts +21 -5
- package/lib/helpers/fsHelpers.d.ts.map +1 -0
- package/lib/helpers/fsHelpers.js +170 -0
- package/lib/helpers/fsHelpers.js.map +1 -0
- package/lib/helpers/index.d.ts +2 -0
- package/lib/helpers/index.d.ts.map +1 -0
- package/{helpers → lib/helpers}/index.js +1 -1
- package/lib/helpers/index.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +50 -0
- package/lib/index.js.map +1 -0
- package/{matchers → lib/matchers}/index.d.ts +1 -0
- package/lib/matchers/index.d.ts.map +1 -0
- package/lib/matchers/index.js +20 -0
- package/lib/matchers/index.js.map +1 -0
- package/{matchers → lib/matchers}/toFail/index.d.ts +1 -0
- package/lib/matchers/toFail/index.d.ts.map +1 -0
- package/lib/matchers/toFail/index.js +25 -0
- package/lib/matchers/toFail/index.js.map +1 -0
- package/{matchers → lib/matchers}/toFail/predicate.d.ts +2 -1
- package/lib/matchers/toFail/predicate.d.ts.map +1 -0
- package/lib/matchers/toFail/predicate.js +9 -0
- package/lib/matchers/toFail/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toFailTest/index.d.ts +1 -0
- package/lib/matchers/toFailTest/index.d.ts.map +1 -0
- package/lib/matchers/toFailTest/index.js +30 -0
- package/lib/matchers/toFailTest/index.js.map +1 -0
- package/lib/matchers/toFailTest/predicate.d.ts +3 -0
- package/lib/matchers/toFailTest/predicate.d.ts.map +1 -0
- package/lib/matchers/toFailTest/predicate.js +12 -0
- package/lib/matchers/toFailTest/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toFailTestAndMatchSnapshot/index.d.ts +1 -0
- package/lib/matchers/toFailTestAndMatchSnapshot/index.d.ts.map +1 -0
- package/lib/matchers/toFailTestAndMatchSnapshot/index.js +26 -0
- package/lib/matchers/toFailTestAndMatchSnapshot/index.js.map +1 -0
- package/{matchers → lib/matchers}/toFailTestAndMatchSnapshot/predicate.d.ts +2 -1
- package/lib/matchers/toFailTestAndMatchSnapshot/predicate.d.ts.map +1 -0
- package/lib/matchers/toFailTestAndMatchSnapshot/predicate.js +15 -0
- package/lib/matchers/toFailTestAndMatchSnapshot/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toFailTestWith/index.d.ts +2 -1
- package/lib/matchers/toFailTestWith/index.d.ts.map +1 -0
- package/lib/matchers/toFailTestWith/index.js +31 -0
- package/lib/matchers/toFailTestWith/index.js.map +1 -0
- package/{matchers → lib/matchers}/toFailTestWith/predicate.d.ts +2 -1
- package/lib/matchers/toFailTestWith/predicate.d.ts.map +1 -0
- package/lib/matchers/toFailTestWith/predicate.js +30 -0
- package/lib/matchers/toFailTestWith/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toFailWith/index.d.ts +2 -1
- package/lib/matchers/toFailWith/index.d.ts.map +1 -0
- package/lib/matchers/toFailWith/index.js +29 -0
- package/lib/matchers/toFailWith/index.js.map +1 -0
- package/{matchers → lib/matchers}/toFailWith/predicate.d.ts +2 -1
- package/lib/matchers/toFailWith/predicate.d.ts.map +1 -0
- package/lib/matchers/toFailWith/predicate.js +20 -0
- package/lib/matchers/toFailWith/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toFailWithDetail/index.d.ts +2 -1
- package/lib/matchers/toFailWithDetail/index.d.ts.map +1 -0
- package/lib/matchers/toFailWithDetail/index.js +29 -0
- package/lib/matchers/toFailWithDetail/index.js.map +1 -0
- package/{matchers → lib/matchers}/toFailWithDetail/predicate.d.ts +2 -1
- package/lib/matchers/toFailWithDetail/predicate.d.ts.map +1 -0
- package/lib/matchers/toFailWithDetail/predicate.js +26 -0
- package/lib/matchers/toFailWithDetail/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toHaveBeenCalledWithArgumentsMatching/index.d.ts +2 -1
- package/lib/matchers/toHaveBeenCalledWithArgumentsMatching/index.d.ts.map +1 -0
- package/lib/matchers/toHaveBeenCalledWithArgumentsMatching/index.js +71 -0
- package/lib/matchers/toHaveBeenCalledWithArgumentsMatching/index.js.map +1 -0
- package/lib/matchers/toHaveBeenCalledWithArgumentsMatching/predicate.d.ts +8 -0
- package/lib/matchers/toHaveBeenCalledWithArgumentsMatching/predicate.d.ts.map +1 -0
- package/lib/matchers/toHaveBeenCalledWithArgumentsMatching/predicate.js +16 -0
- package/lib/matchers/toHaveBeenCalledWithArgumentsMatching/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceed/index.d.ts +1 -0
- package/lib/matchers/toSucceed/index.d.ts.map +1 -0
- package/lib/matchers/toSucceed/index.js +25 -0
- package/lib/matchers/toSucceed/index.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceed/predicate.d.ts +2 -1
- package/lib/matchers/toSucceed/predicate.d.ts.map +1 -0
- package/lib/matchers/toSucceed/predicate.js +9 -0
- package/lib/matchers/toSucceed/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceedAndMatchInlineSnapshot/index.d.ts +1 -0
- package/lib/matchers/toSucceedAndMatchInlineSnapshot/index.d.ts.map +1 -0
- package/lib/matchers/toSucceedAndMatchInlineSnapshot/index.js +26 -0
- package/lib/matchers/toSucceedAndMatchInlineSnapshot/index.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceedAndMatchSnapshot/index.d.ts +1 -0
- package/lib/matchers/toSucceedAndMatchSnapshot/index.d.ts.map +1 -0
- package/lib/matchers/toSucceedAndMatchSnapshot/index.js +25 -0
- package/lib/matchers/toSucceedAndMatchSnapshot/index.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceedAndSatisfy/index.d.ts +2 -1
- package/lib/matchers/toSucceedAndSatisfy/index.d.ts.map +1 -0
- package/lib/matchers/toSucceedAndSatisfy/index.js +53 -0
- package/lib/matchers/toSucceedAndSatisfy/index.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceedAndSatisfy/predicate.d.ts +2 -1
- package/lib/matchers/toSucceedAndSatisfy/predicate.d.ts.map +1 -0
- package/lib/matchers/toSucceedAndSatisfy/predicate.js +21 -0
- package/lib/matchers/toSucceedAndSatisfy/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceedWith/index.d.ts +3 -2
- package/lib/matchers/toSucceedWith/index.d.ts.map +1 -0
- package/lib/matchers/toSucceedWith/index.js +29 -0
- package/lib/matchers/toSucceedWith/index.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceedWith/predicate.d.ts +2 -1
- package/lib/matchers/toSucceedWith/predicate.d.ts.map +1 -0
- package/lib/matchers/toSucceedWith/predicate.js +16 -0
- package/lib/matchers/toSucceedWith/predicate.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceedWithDetail/index.d.ts +2 -1
- package/lib/matchers/toSucceedWithDetail/index.d.ts.map +1 -0
- package/lib/matchers/toSucceedWithDetail/index.js +29 -0
- package/lib/matchers/toSucceedWithDetail/index.js.map +1 -0
- package/{matchers → lib/matchers}/toSucceedWithDetail/predicate.d.ts +2 -1
- package/lib/matchers/toSucceedWithDetail/predicate.d.ts.map +1 -0
- package/lib/matchers/toSucceedWithDetail/predicate.js +21 -0
- package/lib/matchers/toSucceedWithDetail/predicate.js.map +1 -0
- package/{resolvers → lib/resolvers}/cli.d.ts +1 -0
- package/lib/resolvers/cli.d.ts.map +1 -0
- package/lib/resolvers/cli.js +41 -0
- package/lib/resolvers/cli.js.map +1 -0
- package/{resolvers → lib/resolvers}/ide.d.ts +1 -0
- package/lib/resolvers/ide.d.ts.map +1 -0
- package/lib/resolvers/ide.js +41 -0
- package/lib/resolvers/ide.js.map +1 -0
- package/lib/ts-utils.d.ts +2 -0
- package/lib/ts-utils.d.ts.map +1 -0
- package/{ts-utils.js → lib/ts-utils.js} +1 -1
- package/lib/ts-utils.js.map +1 -0
- package/lib/tsdoc-metadata.json +11 -0
- package/{types → lib/types}/index.d.ts +20 -19
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +4 -0
- package/lib/types/index.js.map +1 -0
- package/{utils → lib/utils}/matcherHelpers.d.ts +1 -0
- package/lib/utils/matcherHelpers.d.ts.map +1 -0
- package/lib/utils/matcherHelpers.js +54 -0
- package/lib/utils/matcherHelpers.js.map +1 -0
- package/{utils → lib/utils}/snapshotResolver.d.ts +1 -0
- package/lib/utils/snapshotResolver.d.ts.map +1 -0
- package/lib/utils/snapshotResolver.js +19 -0
- package/lib/utils/snapshotResolver.js.map +1 -0
- package/package.json +56 -53
- package/helpers/fsHelpers.js +0 -164
- package/helpers/index.d.ts +0 -1
- package/index.d.ts +0 -2
- package/index.js +0 -27
- package/matchers/index.js +0 -34
- package/matchers/toFail/index.js +0 -29
- package/matchers/toFail/predicate.js +0 -9
- package/matchers/toFailTest/index.js +0 -30
- package/matchers/toFailTest/predicate.d.ts +0 -2
- package/matchers/toFailTest/predicate.js +0 -12
- package/matchers/toFailTestAndMatchSnapshot/index.js +0 -25
- package/matchers/toFailTestAndMatchSnapshot/predicate.js +0 -15
- package/matchers/toFailTestWith/index.js +0 -31
- package/matchers/toFailTestWith/predicate.js +0 -30
- package/matchers/toFailWith/index.js +0 -29
- package/matchers/toFailWith/predicate.js +0 -20
- package/matchers/toFailWithDetail/index.js +0 -29
- package/matchers/toFailWithDetail/predicate.js +0 -26
- package/matchers/toHaveBeenCalledWithArgumentsMatching/index.js +0 -71
- package/matchers/toHaveBeenCalledWithArgumentsMatching/predicate.d.ts +0 -7
- package/matchers/toHaveBeenCalledWithArgumentsMatching/predicate.js +0 -16
- package/matchers/toSucceed/index.js +0 -29
- package/matchers/toSucceed/predicate.js +0 -9
- package/matchers/toSucceedAndMatchInlineSnapshot/index.js +0 -26
- package/matchers/toSucceedAndMatchSnapshot/index.js +0 -25
- package/matchers/toSucceedAndSatisfy/index.js +0 -53
- package/matchers/toSucceedAndSatisfy/predicate.js +0 -21
- package/matchers/toSucceedWith/index.js +0 -29
- package/matchers/toSucceedWith/predicate.js +0 -16
- package/matchers/toSucceedWithDetail/index.js +0 -29
- package/matchers/toSucceedWithDetail/predicate.js +0 -21
- package/resolvers/cli.js +0 -41
- package/resolvers/ide.js +0 -41
- package/ts-utils.d.ts +0 -1
- package/types/index.js +0 -4
- package/utils/matcherHelpers.js +0 -56
- package/utils/snapshotResolver.js +0 -19
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.predicate = exports.matcherName = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */
|
|
5
|
+
const ts_utils_1 = require("../../ts-utils");
|
|
6
|
+
exports.matcherName = 'toFailTest';
|
|
7
|
+
function predicate(cb) {
|
|
8
|
+
const cbResult = (0, ts_utils_1.captureResult)(() => cb());
|
|
9
|
+
return cbResult.isFailure();
|
|
10
|
+
}
|
|
11
|
+
exports.predicate = predicate;
|
|
12
|
+
//# sourceMappingURL=predicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../../src/matchers/toFailTest/predicate.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,6CAA+C;AAClC,QAAA,WAAW,GAAW,YAAY,CAAC;AAEhD,SAAgB,SAAS,CAAI,EAAc;IACzC,MAAM,QAAQ,GAAG,IAAA,wBAAa,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC;AAC9B,CAAC;AAHD,8BAGC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */\nimport { captureResult } from '../../ts-utils';\nexport const matcherName: string = 'toFailTest';\n\nexport function predicate<T>(cb: () => void): boolean {\n const cbResult = captureResult(() => cb());\n return cbResult.isFailure();\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/matchers/toFailTestAndMatchSnapshot/index.ts"],"names":[],"mappings":"AAMA,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,IAAI,CAAC;QAEb,UAAU,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrB;;;;eAIG;YACH,0BAA0B,CAAC,CAAC,KAAK,CAAC,CAAC;SACpC;KACF;CACF;;0CAIS,KAAK,cAAc,MACrB,MAAM,IAAI,KACb,KAAK,mBAAmB;;AAJ7B,wBAyBE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */
|
|
4
|
+
const jest_snapshot_1 = require("jest-snapshot");
|
|
5
|
+
const predicate_1 = require("./predicate");
|
|
6
|
+
const jest_matcher_utils_1 = require("jest-matcher-utils");
|
|
7
|
+
exports.default = {
|
|
8
|
+
toFailTestAndMatchSnapshot: function (cb) {
|
|
9
|
+
const context = this;
|
|
10
|
+
const cbResult = (0, predicate_1.predicate)(cb);
|
|
11
|
+
if (cbResult.isFailure()) {
|
|
12
|
+
return {
|
|
13
|
+
pass: false,
|
|
14
|
+
message: () => {
|
|
15
|
+
return [
|
|
16
|
+
(0, jest_matcher_utils_1.matcherHint)(`${predicate_1.matcherName}`, 'callback'),
|
|
17
|
+
' Expected: Callback to fail with an error that matches snapshot',
|
|
18
|
+
' Received: Callback succeeded'
|
|
19
|
+
].join('\n');
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return jest_snapshot_1.toMatchSnapshot.call(context, cbResult.value, 'toFailTestAndMatchSnapshot');
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/matchers/toFailTestAndMatchSnapshot/index.ts"],"names":[],"mappings":";;AAAA,qEAAqE;AACrE,iDAAyD;AACzD,2CAAqD;AAErD,2DAAiD;AAiBjD,kBAAe;IACb,0BAA0B,EAAE,UAE1B,EAAc;QAEd,MAAM,OAAO,GAAG,IAA0B,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAA,qBAAS,EAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;YACxB,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,GAAW,EAAE;oBACpB,OAAO;wBACL,IAAA,gCAAW,EAAC,GAAG,uBAAW,EAAE,EAAE,UAAU,CAAC;wBACzC,kEAAkE;wBAClE,gCAAgC;qBACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;aACF,CAAC;SACH;QACD,OAAO,+BAAe,CAAC,IAAI,CACzB,OAAO,EACP,QAAQ,CAAC,KAAK,EACd,4BAA4B,CACD,CAAC;IAChC,CAAC;CACF,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */\nimport { Context, toMatchSnapshot } from 'jest-snapshot';\nimport { matcherName, predicate } from './predicate';\n\nimport { matcherHint } from 'jest-matcher-utils';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/ban-types, @typescript-eslint/naming-convention\n interface Matchers<R, T> {\n /**\n * Use .toFailTestWith to test a custom matcher by\n * verifying that a test case fails as expected and\n * reports an error matching a stored snapshot.\n */\n toFailTestAndMatchSnapshot<T>(): R;\n }\n }\n}\n\nexport default {\n toFailTestAndMatchSnapshot: function <T>(\n this: jest.MatcherContext,\n cb: () => void\n ): jest.CustomMatcherResult {\n const context = this as unknown as Context;\n const cbResult = predicate(cb);\n if (cbResult.isFailure()) {\n return {\n pass: false,\n message: (): string => {\n return [\n matcherHint(`${matcherName}`, 'callback'),\n ' Expected: Callback to fail with an error that matches snapshot',\n ' Received: Callback succeeded'\n ].join('\\n');\n }\n };\n }\n return toMatchSnapshot.call(\n context,\n cbResult.value,\n 'toFailTestAndMatchSnapshot'\n ) as jest.CustomMatcherResult;\n }\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../src/matchers/toFailTestAndMatchSnapshot/predicate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgC,MAAM,gBAAgB,CAAC;AAEtE,eAAO,MAAM,WAAW,EAAE,MAAqC,CAAC;AAEhE,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAM3D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.predicate = exports.matcherName = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */
|
|
5
|
+
const ts_utils_1 = require("../../ts-utils");
|
|
6
|
+
exports.matcherName = 'toFailTestAndMatchSnapshot';
|
|
7
|
+
function predicate(cb) {
|
|
8
|
+
const cbResult = (0, ts_utils_1.captureResult)(() => cb());
|
|
9
|
+
if (cbResult.isFailure()) {
|
|
10
|
+
return (0, ts_utils_1.succeed)(cbResult.message);
|
|
11
|
+
}
|
|
12
|
+
return (0, ts_utils_1.fail)('Callback did not fail');
|
|
13
|
+
}
|
|
14
|
+
exports.predicate = predicate;
|
|
15
|
+
//# sourceMappingURL=predicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../../src/matchers/toFailTestAndMatchSnapshot/predicate.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,6CAAsE;AAEzD,QAAA,WAAW,GAAW,4BAA4B,CAAC;AAEhE,SAAgB,SAAS,CAAI,EAAc;IACzC,MAAM,QAAQ,GAAG,IAAA,wBAAa,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;QACxB,OAAO,IAAA,kBAAO,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAClC;IACD,OAAO,IAAA,eAAI,EAAC,uBAAuB,CAAC,CAAC;AACvC,CAAC;AAND,8BAMC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */\nimport { Result, captureResult, fail, succeed } from '../../ts-utils';\n\nexport const matcherName: string = 'toFailTestAndMatchSnapshot';\n\nexport function predicate<T>(cb: () => void): Result<string> {\n const cbResult = captureResult(() => cb());\n if (cbResult.isFailure()) {\n return succeed(cbResult.message);\n }\n return fail('Callback did not fail');\n}\n"]}
|
|
@@ -5,7 +5,7 @@ declare global {
|
|
|
5
5
|
* Use .toFailTestWith to test a custom matcher by
|
|
6
6
|
* verifying that a test case fails as expected and
|
|
7
7
|
* reports an error matching a supplied value.
|
|
8
|
-
* @param
|
|
8
|
+
* @param expected -
|
|
9
9
|
*/
|
|
10
10
|
toFailTestWith<T>(expected: string | string[] | RegExp): R;
|
|
11
11
|
}
|
|
@@ -15,3 +15,4 @@ declare const _default: {
|
|
|
15
15
|
toFailTestWith: <T>(cb: () => void, expected: RegExp | string | string[]) => jest.CustomMatcherResult;
|
|
16
16
|
};
|
|
17
17
|
export default _default;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/matchers/toFailTestWith/index.ts"],"names":[],"mappings":"AAOA,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,IAAI,CAAC;QAEb,UAAU,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrB;;;;;eAKG;YACH,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC;SAC5D;KACF;CACF;;4BAwBO,MAAM,IAAI,YACJ,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KACnC,KAAK,mBAAmB;;AAJ7B,wBAYE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const predicate_1 = require("./predicate");
|
|
4
|
+
const jest_matcher_utils_1 = require("jest-matcher-utils");
|
|
5
|
+
const matcherHelpers_1 = require("../../utils/matcherHelpers");
|
|
6
|
+
function passMessage(cbResult, expected) {
|
|
7
|
+
return () => [
|
|
8
|
+
(0, jest_matcher_utils_1.matcherHint)(`.not.${predicate_1.matcherName}`, 'callback', 'expectedMessage'),
|
|
9
|
+
(0, matcherHelpers_1.printExpectedResult)('failure', false, expected),
|
|
10
|
+
` Received: Callback failed with:\n>>>>\n${cbResult.value}\n<<<<`
|
|
11
|
+
].join('\n');
|
|
12
|
+
}
|
|
13
|
+
function failMessage(cbResult, expected) {
|
|
14
|
+
return () => [
|
|
15
|
+
(0, jest_matcher_utils_1.matcherHint)(`${predicate_1.matcherName}`, 'callback', 'expectedMessage'),
|
|
16
|
+
(0, matcherHelpers_1.printExpectedResult)('failure', true, expected),
|
|
17
|
+
cbResult.message === ''
|
|
18
|
+
? ' Received: Callback succeeded'
|
|
19
|
+
: ` Received: Callback failed with:\n>>>>\n${cbResult.message}\n<<<<`
|
|
20
|
+
].join('\n');
|
|
21
|
+
}
|
|
22
|
+
exports.default = {
|
|
23
|
+
toFailTestWith: function (cb, expected) {
|
|
24
|
+
const cbResult = (0, predicate_1.predicate)(cb, expected);
|
|
25
|
+
if (cbResult.isSuccess()) {
|
|
26
|
+
return { pass: true, message: passMessage(cbResult, expected) };
|
|
27
|
+
}
|
|
28
|
+
return { pass: false, message: failMessage(cbResult, expected) };
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/matchers/toFailTestWith/index.ts"],"names":[],"mappings":";;AAEA,2CAAqD;AAErD,2DAAiD;AACjD,+DAAiE;AAkBjE,SAAS,WAAW,CAAI,QAAyB,EAAE,QAAoC;IACrF,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,QAAQ,uBAAW,EAAE,EAAE,UAAU,EAAE,iBAAiB,CAAC;QACjE,IAAA,oCAAmB,EAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC;QAC/C,4CAA4C,QAAQ,CAAC,KAAK,QAAQ;KACnE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAI,QAAyB,EAAE,QAAoC;IACrF,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,GAAG,uBAAW,EAAE,EAAE,UAAU,EAAE,iBAAiB,CAAC;QAC5D,IAAA,oCAAmB,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC;QAC9C,QAAQ,CAAC,OAAO,KAAK,EAAE;YACrB,CAAC,CAAC,gCAAgC;YAClC,CAAC,CAAC,4CAA4C,QAAQ,CAAC,OAAO,QAAQ;KACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,kBAAe;IACb,cAAc,EAAE,UACd,EAAc,EACd,QAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAA,qBAAS,EAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;YACxB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;SACjE;QAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;IACnE,CAAC;CACF,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */\nimport { Failure, Success } from '../../ts-utils';\nimport { matcherName, predicate } from './predicate';\n\nimport { matcherHint } from 'jest-matcher-utils';\nimport { printExpectedResult } from '../../utils/matcherHelpers';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/ban-types, @typescript-eslint/naming-convention\n interface Matchers<R, T> {\n /**\n * Use .toFailTestWith to test a custom matcher by\n * verifying that a test case fails as expected and\n * reports an error matching a supplied value.\n * @param expected -\n */\n toFailTestWith<T>(expected: string | string[] | RegExp): R;\n }\n }\n}\n\nfunction passMessage<T>(cbResult: Success<string>, expected: RegExp | string | string[]): () => string {\n return () =>\n [\n matcherHint(`.not.${matcherName}`, 'callback', 'expectedMessage'),\n printExpectedResult('failure', false, expected),\n ` Received: Callback failed with:\\n>>>>\\n${cbResult.value}\\n<<<<`\n ].join('\\n');\n}\n\nfunction failMessage<T>(cbResult: Failure<string>, expected: RegExp | string | string[]): () => string {\n return () =>\n [\n matcherHint(`${matcherName}`, 'callback', 'expectedMessage'),\n printExpectedResult('failure', true, expected),\n cbResult.message === ''\n ? ' Received: Callback succeeded'\n : ` Received: Callback failed with:\\n>>>>\\n${cbResult.message}\\n<<<<`\n ].join('\\n');\n}\n\nexport default {\n toFailTestWith: function <T>(\n cb: () => void,\n expected: RegExp | string | string[]\n ): jest.CustomMatcherResult {\n const cbResult = predicate(cb, expected);\n if (cbResult.isSuccess()) {\n return { pass: true, message: passMessage(cbResult, expected) };\n }\n\n return { pass: false, message: failMessage(cbResult, expected) };\n }\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { Result } from '../../ts-utils';
|
|
2
|
-
export declare const matcherName
|
|
2
|
+
export declare const matcherName: string;
|
|
3
3
|
export declare function predicate<T>(cb: () => void, expected: string | string[] | RegExp): Result<string>;
|
|
4
|
+
//# sourceMappingURL=predicate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../src/matchers/toFailTestWith/predicate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAgC,MAAM,gBAAgB,CAAC;AAEtE,eAAO,MAAM,WAAW,EAAE,MAAyB,CAAC;AAEpD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAgBjG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.predicate = exports.matcherName = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */
|
|
5
|
+
const expect_utils_1 = require("@jest/expect-utils");
|
|
6
|
+
const jest_matcher_utils_1 = require("jest-matcher-utils");
|
|
7
|
+
const ts_utils_1 = require("../../ts-utils");
|
|
8
|
+
exports.matcherName = 'toFailTestWith';
|
|
9
|
+
function predicate(cb, expected) {
|
|
10
|
+
const cbResult = (0, ts_utils_1.captureResult)(() => cb());
|
|
11
|
+
if (cbResult.isFailure()) {
|
|
12
|
+
let success = false;
|
|
13
|
+
if (expected instanceof RegExp) {
|
|
14
|
+
success = cbResult.message.match(expected) !== null;
|
|
15
|
+
}
|
|
16
|
+
else if (typeof expected === 'string') {
|
|
17
|
+
success = cbResult.message === expected;
|
|
18
|
+
}
|
|
19
|
+
else if (Array.isArray(expected)) {
|
|
20
|
+
success = (0, expect_utils_1.equals)(cbResult.message.split('\n'), expected);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return (0, ts_utils_1.fail)(`Unsupported expected value "${(0, jest_matcher_utils_1.stringify)(expected)}" for toFailTestWith`);
|
|
24
|
+
}
|
|
25
|
+
return success ? (0, ts_utils_1.succeed)(cbResult.message) : (0, ts_utils_1.fail)(cbResult.message);
|
|
26
|
+
}
|
|
27
|
+
return (0, ts_utils_1.fail)('');
|
|
28
|
+
}
|
|
29
|
+
exports.predicate = predicate;
|
|
30
|
+
//# sourceMappingURL=predicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../../src/matchers/toFailTestWith/predicate.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,qDAA4C;AAC5C,2DAA+C;AAC/C,6CAAsE;AAEzD,QAAA,WAAW,GAAW,gBAAgB,CAAC;AAEpD,SAAgB,SAAS,CAAI,EAAc,EAAE,QAAoC;IAC/E,MAAM,QAAQ,GAAG,IAAA,wBAAa,EAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;QACxB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAQ,YAAY,MAAM,EAAE;YAC9B,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;SACrD;aAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YACvC,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC;SACzC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAClC,OAAO,GAAG,IAAA,qBAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;SAC1D;aAAM;YACL,OAAO,IAAA,eAAI,EAAC,+BAA+B,IAAA,8BAAS,EAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;SACvF;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAA,kBAAO,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAA,eAAI,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACrE;IACD,OAAO,IAAA,eAAI,EAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAhBD,8BAgBC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars,no-unused-vars */\nimport { equals } from '@jest/expect-utils';\nimport { stringify } from 'jest-matcher-utils';\nimport { Result, captureResult, fail, succeed } from '../../ts-utils';\n\nexport const matcherName: string = 'toFailTestWith';\n\nexport function predicate<T>(cb: () => void, expected: string | string[] | RegExp): Result<string> {\n const cbResult = captureResult(() => cb());\n if (cbResult.isFailure()) {\n let success = false;\n if (expected instanceof RegExp) {\n success = cbResult.message.match(expected) !== null;\n } else if (typeof expected === 'string') {\n success = cbResult.message === expected;\n } else if (Array.isArray(expected)) {\n success = equals(cbResult.message.split('\\n'), expected);\n } else {\n return fail(`Unsupported expected value \"${stringify(expected)}\" for toFailTestWith`);\n }\n return success ? succeed(cbResult.message) : fail(cbResult.message);\n }\n return fail('');\n}\n"]}
|
|
@@ -5,7 +5,7 @@ declare global {
|
|
|
5
5
|
/**
|
|
6
6
|
* Use .toFailWith to verify that a Result<T> is a failure
|
|
7
7
|
* that matches a supplied string, RegExp or undefined value
|
|
8
|
-
* @param
|
|
8
|
+
* @param message -
|
|
9
9
|
*/
|
|
10
10
|
toFailWith(message: string | RegExp | undefined): R;
|
|
11
11
|
}
|
|
@@ -15,3 +15,4 @@ declare const _default: {
|
|
|
15
15
|
toFailWith: <T>(received: Result<T>, expected: string | RegExp | undefined) => jest.CustomMatcherResult;
|
|
16
16
|
};
|
|
17
17
|
export default _default;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/matchers/toFailWith/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,IAAI,CAAC;QAEb,UAAU,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrB;;;;eAIG;YACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC;SACrD;KACF;CACF;;mDAuBa,MAAM,GAAG,MAAM,GAAG,SAAS,KACpC,KAAK,mBAAmB;;AAJ7B,wBAYE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const matcherHelpers_1 = require("../../utils/matcherHelpers");
|
|
4
|
+
const predicate_1 = require("./predicate");
|
|
5
|
+
const jest_matcher_utils_1 = require("jest-matcher-utils");
|
|
6
|
+
function passMessage(received, expected) {
|
|
7
|
+
return () => [
|
|
8
|
+
(0, jest_matcher_utils_1.matcherHint)(`.not.${predicate_1.matcherName}`),
|
|
9
|
+
(0, matcherHelpers_1.printExpectedResult)('failure', false, expected),
|
|
10
|
+
(0, matcherHelpers_1.printReceivedResult)(received)
|
|
11
|
+
].join('\n');
|
|
12
|
+
}
|
|
13
|
+
function failMessage(received, expected) {
|
|
14
|
+
return () => [
|
|
15
|
+
(0, jest_matcher_utils_1.matcherHint)(`${predicate_1.matcherName}`),
|
|
16
|
+
(0, matcherHelpers_1.printExpectedResult)('failure', true, expected),
|
|
17
|
+
(0, matcherHelpers_1.printReceivedResult)(received)
|
|
18
|
+
].join('\n');
|
|
19
|
+
}
|
|
20
|
+
exports.default = {
|
|
21
|
+
toFailWith: function (received, expected) {
|
|
22
|
+
const pass = (0, predicate_1.predicate)(received, expected);
|
|
23
|
+
if (pass) {
|
|
24
|
+
return { pass: true, message: passMessage(received, expected) };
|
|
25
|
+
}
|
|
26
|
+
return { pass: false, message: failMessage(received, expected) };
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/matchers/toFailWith/index.ts"],"names":[],"mappings":";;AAAA,+DAAsF;AACtF,2CAAqD;AAGrD,2DAAiD;AAiBjD,SAAS,WAAW,CAAI,QAAmB,EAAE,QAAqC;IAChF,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,QAAQ,uBAAW,EAAE,CAAC;QAClC,IAAA,oCAAmB,EAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC;QAC/C,IAAA,oCAAmB,EAAC,QAAQ,CAAC;KAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAI,QAAmB,EAAE,QAAqC;IAChF,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,GAAG,uBAAW,EAAE,CAAC;QAC7B,IAAA,oCAAmB,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC;QAC9C,IAAA,oCAAmB,EAAC,QAAQ,CAAC;KAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,kBAAe;IACb,UAAU,EAAE,UACV,QAAmB,EACnB,QAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,IAAI,EAAE;YACR,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;SACjE;QAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;IACnE,CAAC;CACF,CAAC","sourcesContent":["import { printExpectedResult, printReceivedResult } from '../../utils/matcherHelpers';\nimport { matcherName, predicate } from './predicate';\n\nimport { Result } from '@fgv/ts-utils';\nimport { matcherHint } from 'jest-matcher-utils';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/ban-types, @typescript-eslint/naming-convention\n interface Matchers<R, T> {\n /**\n * Use .toFailWith to verify that a Result<T> is a failure\n * that matches a supplied string, RegExp or undefined value\n * @param message -\n */\n toFailWith(message: string | RegExp | undefined): R;\n }\n }\n}\n\nfunction passMessage<T>(received: Result<T>, expected: string | RegExp | undefined): () => string {\n return () =>\n [\n matcherHint(`.not.${matcherName}`),\n printExpectedResult('failure', false, expected),\n printReceivedResult(received)\n ].join('\\n');\n}\n\nfunction failMessage<T>(received: Result<T>, expected: string | RegExp | undefined): () => string {\n return () =>\n [\n matcherHint(`${matcherName}`),\n printExpectedResult('failure', true, expected),\n printReceivedResult(received)\n ].join('\\n');\n}\n\nexport default {\n toFailWith: function <T>(\n received: Result<T>,\n expected: string | RegExp | undefined\n ): jest.CustomMatcherResult {\n const pass = predicate(received, expected);\n if (pass) {\n return { pass: true, message: passMessage(received, expected) };\n }\n\n return { pass: false, message: failMessage(received, expected) };\n }\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { Result } from '../../ts-utils';
|
|
2
|
-
export declare const matcherName
|
|
2
|
+
export declare const matcherName: string;
|
|
3
3
|
export declare function predicate<T>(received: Result<T>, expected: string | RegExp | undefined): boolean;
|
|
4
|
+
//# sourceMappingURL=predicate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../src/matchers/toFailWith/predicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,eAAO,MAAM,WAAW,EAAE,MAAqB,CAAC;AAEhD,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAWhG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.predicate = exports.matcherName = void 0;
|
|
4
|
+
exports.matcherName = 'toFailWith';
|
|
5
|
+
function predicate(received, expected) {
|
|
6
|
+
if (received.isFailure()) {
|
|
7
|
+
if (expected === undefined) {
|
|
8
|
+
return received.message === undefined;
|
|
9
|
+
}
|
|
10
|
+
else if (expected instanceof RegExp) {
|
|
11
|
+
return received.message.match(expected) !== null;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return received.message === expected;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
exports.predicate = predicate;
|
|
20
|
+
//# sourceMappingURL=predicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../../src/matchers/toFailWith/predicate.ts"],"names":[],"mappings":";;;AAEa,QAAA,WAAW,GAAW,YAAY,CAAC;AAEhD,SAAgB,SAAS,CAAI,QAAmB,EAAE,QAAqC;IACrF,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;QACxB,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC;SACvC;aAAM,IAAI,QAAQ,YAAY,MAAM,EAAE;YACrC,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;SAClD;aAAM;YACL,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC;SACtC;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAXD,8BAWC","sourcesContent":["import { Result } from '../../ts-utils';\n\nexport const matcherName: string = 'toFailWith';\n\nexport function predicate<T>(received: Result<T>, expected: string | RegExp | undefined): boolean {\n if (received.isFailure()) {\n if (expected === undefined) {\n return received.message === undefined;\n } else if (expected instanceof RegExp) {\n return received.message.match(expected) !== null;\n } else {\n return received.message === expected;\n }\n }\n return false;\n}\n"]}
|
|
@@ -6,7 +6,7 @@ declare global {
|
|
|
6
6
|
* Use .toFailWithDetail to verify that a DetailedResult<T> is
|
|
7
7
|
* a failure that matches both a supplied expected failure message
|
|
8
8
|
* (string, RegExp or undefined) and a supplied failure detail.
|
|
9
|
-
* @param
|
|
9
|
+
* @param message -
|
|
10
10
|
*/
|
|
11
11
|
toFailWithDetail(message: string | RegExp | undefined, detail: ResultDetailType<T>): R;
|
|
12
12
|
}
|
|
@@ -16,3 +16,4 @@ declare const _default: {
|
|
|
16
16
|
toFailWithDetail: <T extends DetailedResult<unknown, unknown>>(received: T, expectedMessage: string | RegExp | undefined, expectedDetail: ResultDetailType<T>) => jest.CustomMatcherResult;
|
|
17
17
|
};
|
|
18
18
|
export default _default;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/matchers/toFailWithDetail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAOjE,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,IAAI,CAAC;QAEb,UAAU,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrB;;;;;eAKG;YACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACxF;KACF;CACF;;iGA+BoB,MAAM,GAAG,MAAM,GAAG,SAAS,0CAE3C,KAAK,mBAAmB;;AAL7B,wBAaE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const matcherHelpers_1 = require("../../utils/matcherHelpers");
|
|
4
|
+
const predicate_1 = require("./predicate");
|
|
5
|
+
const jest_matcher_utils_1 = require("jest-matcher-utils");
|
|
6
|
+
function passMessage(received, expectedMessage, expectedDetail) {
|
|
7
|
+
return () => [
|
|
8
|
+
(0, jest_matcher_utils_1.matcherHint)(`.not.${predicate_1.matcherName}`),
|
|
9
|
+
(0, matcherHelpers_1.printExpectedDetailedResult)('failure', false, expectedMessage, expectedDetail),
|
|
10
|
+
(0, matcherHelpers_1.printReceivedDetailedResult)(received)
|
|
11
|
+
].join('\n');
|
|
12
|
+
}
|
|
13
|
+
function failMessage(received, expectedMessage, expectedDetail) {
|
|
14
|
+
return () => [
|
|
15
|
+
(0, jest_matcher_utils_1.matcherHint)(`${predicate_1.matcherName}`),
|
|
16
|
+
(0, matcherHelpers_1.printExpectedDetailedResult)('failure', true, expectedMessage, expectedDetail),
|
|
17
|
+
(0, matcherHelpers_1.printReceivedDetailedResult)(received)
|
|
18
|
+
].join('\n');
|
|
19
|
+
}
|
|
20
|
+
exports.default = {
|
|
21
|
+
toFailWithDetail: function (received, expectedMessage, expectedDetail) {
|
|
22
|
+
const pass = (0, predicate_1.predicate)(received, expectedMessage, expectedDetail);
|
|
23
|
+
if (pass) {
|
|
24
|
+
return { pass: true, message: passMessage(received, expectedMessage, expectedDetail) };
|
|
25
|
+
}
|
|
26
|
+
return { pass: false, message: failMessage(received, expectedMessage, expectedDetail) };
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/matchers/toFailWithDetail/index.ts"],"names":[],"mappings":";;AACA,+DAAsG;AACtG,2CAAqD;AAErD,2DAAiD;AAmBjD,SAAS,WAAW,CAClB,QAA+B,EAC/B,eAA4C,EAC5C,cAAkB;IAElB,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,QAAQ,uBAAW,EAAE,CAAC;QAClC,IAAA,4CAA2B,EAAC,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC;QAC9E,IAAA,4CAA2B,EAAC,QAAQ,CAAC;KACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAClB,QAA+B,EAC/B,eAA4C,EAC5C,cAAkB;IAElB,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,GAAG,uBAAW,EAAE,CAAC;QAC7B,IAAA,4CAA2B,EAAC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,CAAC;QAC7E,IAAA,4CAA2B,EAAC,QAAQ,CAAC;KACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,kBAAe;IACb,gBAAgB,EAAE,UAChB,QAAW,EACX,eAA4C,EAC5C,cAAmC;QAEnC,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;QAClE,IAAI,IAAI,EAAE;YACR,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;SACxF;QAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;IAC1F,CAAC;CACF,CAAC","sourcesContent":["import { DetailedResult, ResultDetailType } from '@fgv/ts-utils';\nimport { printExpectedDetailedResult, printReceivedDetailedResult } from '../../utils/matcherHelpers';\nimport { matcherName, predicate } from './predicate';\n\nimport { matcherHint } from 'jest-matcher-utils';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars,no-unused-vars\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars, @typescript-eslint/ban-types, @typescript-eslint/naming-convention\n interface Matchers<R, T> {\n /**\n * Use .toFailWithDetail to verify that a DetailedResult<T> is\n * a failure that matches both a supplied expected failure message\n * (string, RegExp or undefined) and a supplied failure detail.\n * @param message -\n */\n toFailWithDetail(message: string | RegExp | undefined, detail: ResultDetailType<T>): R;\n }\n }\n}\n\nfunction passMessage<T, TD>(\n received: DetailedResult<T, TD>,\n expectedMessage: string | RegExp | undefined,\n expectedDetail: TD\n): () => string {\n return () =>\n [\n matcherHint(`.not.${matcherName}`),\n printExpectedDetailedResult('failure', false, expectedMessage, expectedDetail),\n printReceivedDetailedResult(received)\n ].join('\\n');\n}\n\nfunction failMessage<T, TD>(\n received: DetailedResult<T, TD>,\n expectedMessage: string | RegExp | undefined,\n expectedDetail: TD\n): () => string {\n return () =>\n [\n matcherHint(`${matcherName}`),\n printExpectedDetailedResult('failure', true, expectedMessage, expectedDetail),\n printReceivedDetailedResult(received)\n ].join('\\n');\n}\n\nexport default {\n toFailWithDetail: function <T extends DetailedResult<unknown, unknown>>(\n received: T,\n expectedMessage: string | RegExp | undefined,\n expectedDetail: ResultDetailType<T>\n ): jest.CustomMatcherResult {\n const pass = predicate(received, expectedMessage, expectedDetail);\n if (pass) {\n return { pass: true, message: passMessage(received, expectedMessage, expectedDetail) };\n }\n\n return { pass: false, message: failMessage(received, expectedMessage, expectedDetail) };\n }\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { DetailedResult } from '../../ts-utils';
|
|
2
|
-
export declare const matcherName
|
|
2
|
+
export declare const matcherName: string;
|
|
3
3
|
export declare function predicate<T, TD>(received: DetailedResult<T, TD>, expectedResult: string | RegExp | undefined, expectedDetail: TD): boolean;
|
|
4
|
+
//# sourceMappingURL=predicate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../src/matchers/toFailWithDetail/predicate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,eAAO,MAAM,WAAW,EAAE,MAAqB,CAAC;AAEhD,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,EAC7B,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAC/B,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAC3C,cAAc,EAAE,EAAE,GACjB,OAAO,CAiBT"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.predicate = exports.matcherName = void 0;
|
|
4
|
+
const expect_utils_1 = require("@jest/expect-utils");
|
|
5
|
+
exports.matcherName = 'toFailWith';
|
|
6
|
+
function predicate(received, expectedResult, expectedDetail) {
|
|
7
|
+
if (received.isFailure()) {
|
|
8
|
+
if (expectedResult === undefined) {
|
|
9
|
+
if (received.message !== undefined) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
else if (expectedResult instanceof RegExp) {
|
|
14
|
+
if (received.message.match(expectedResult) === null) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else if (received.message !== expectedResult) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return (0, expect_utils_1.equals)(received.detail, expectedDetail);
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
exports.predicate = predicate;
|
|
26
|
+
//# sourceMappingURL=predicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../../src/matchers/toFailWithDetail/predicate.ts"],"names":[],"mappings":";;;AAAA,qDAA4C;AAG/B,QAAA,WAAW,GAAW,YAAY,CAAC;AAEhD,SAAgB,SAAS,CACvB,QAA+B,EAC/B,cAA2C,EAC3C,cAAkB;IAElB,IAAI,QAAQ,CAAC,SAAS,EAAE,EAAE;QACxB,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE;gBAClC,OAAO,KAAK,CAAC;aACd;SACF;aAAM,IAAI,cAAc,YAAY,MAAM,EAAE;YAC3C,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;gBACnD,OAAO,KAAK,CAAC;aACd;SACF;aAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,cAAc,EAAE;YAC9C,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAA,qBAAM,EAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;KAChD;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AArBD,8BAqBC","sourcesContent":["import { equals } from '@jest/expect-utils';\nimport { DetailedResult } from '../../ts-utils';\n\nexport const matcherName: string = 'toFailWith';\n\nexport function predicate<T, TD>(\n received: DetailedResult<T, TD>,\n expectedResult: string | RegExp | undefined,\n expectedDetail: TD\n): boolean {\n if (received.isFailure()) {\n if (expectedResult === undefined) {\n if (received.message !== undefined) {\n return false;\n }\n } else if (expectedResult instanceof RegExp) {\n if (received.message.match(expectedResult) === null) {\n return false;\n }\n } else if (received.message !== expectedResult) {\n return false;\n }\n\n return equals(received.detail, expectedDetail);\n }\n return false;\n}\n"]}
|
|
@@ -4,7 +4,7 @@ declare global {
|
|
|
4
4
|
/**
|
|
5
5
|
* Use .toSucceedWith to verify that a Result<T> is a success
|
|
6
6
|
* and that the result value matches the supplied value
|
|
7
|
-
* @param
|
|
7
|
+
* @param expected -
|
|
8
8
|
*/
|
|
9
9
|
toHaveBeenCalledWithArgumentsMatching(expected: unknown): R;
|
|
10
10
|
}
|
|
@@ -14,3 +14,4 @@ declare const _default: {
|
|
|
14
14
|
toHaveBeenCalledWithArgumentsMatching: (received: jest.Mock, expected: unknown) => jest.CustomMatcherResult;
|
|
15
15
|
};
|
|
16
16
|
export default _default;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/matchers/toHaveBeenCalledWithArgumentsMatching/index.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,IAAI,CAAC;QAEb,UAAU,QAAQ,CAAC,CAAC;YAClB;;;;eAIG;YACH,qCAAqC,CAAC,QAAQ,EAAE,OAAO,GAAG,CAAC,CAAC;SAC7D;KACF;CACF;;sDAoEa,KAAK,IAAI,YACT,OAAO,KAChB,KAAK,mBAAmB;;AAJ7B,wBAgBE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ts_utils_1 = require("@fgv/ts-utils");
|
|
4
|
+
const jest_matcher_utils_1 = require("jest-matcher-utils");
|
|
5
|
+
const predicate_1 = require("./predicate");
|
|
6
|
+
function getRange(length, cursor) {
|
|
7
|
+
// less than 3 return everything
|
|
8
|
+
if (length < 3) {
|
|
9
|
+
return { start: 0, end: length };
|
|
10
|
+
}
|
|
11
|
+
if (cursor === 0) {
|
|
12
|
+
return { start: 0, end: 3 };
|
|
13
|
+
}
|
|
14
|
+
else if (cursor >= length - 1) {
|
|
15
|
+
return { start: length - 3, end: length };
|
|
16
|
+
}
|
|
17
|
+
return { start: cursor - 1, end: cursor + 2 };
|
|
18
|
+
}
|
|
19
|
+
function formatOneCall(index, received, cursor) {
|
|
20
|
+
const indexString = index.toLocaleString([], { maximumFractionDigits: 0, minimumIntegerDigits: 3 });
|
|
21
|
+
const cursorString = cursor ? '*' : ' ';
|
|
22
|
+
return `${cursorString}${indexString}: ${(0, jest_matcher_utils_1.printReceived)(received)}`;
|
|
23
|
+
}
|
|
24
|
+
function formatArgsMessage(received, cursor) {
|
|
25
|
+
const calls = received.mock.calls;
|
|
26
|
+
if (calls.length > 0) {
|
|
27
|
+
// if there's no cursor, show the last 3
|
|
28
|
+
const { start, end } = getRange(calls.length, cursor !== undefined ? cursor : calls.length - 1);
|
|
29
|
+
const callsToShow = calls.slice(start, end);
|
|
30
|
+
return callsToShow.map((c, i) => formatOneCall(start + i, c, start + i === cursor));
|
|
31
|
+
}
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
function passMessage(received, expected, matched) {
|
|
35
|
+
return () => [
|
|
36
|
+
(0, jest_matcher_utils_1.matcherHint)(`.not.${predicate_1.matcherName}`),
|
|
37
|
+
'Expected no call with arguments matching:',
|
|
38
|
+
` ${(0, jest_matcher_utils_1.printExpected)(expected)}`,
|
|
39
|
+
`Received (${received.mock.calls.length} total):`,
|
|
40
|
+
...formatArgsMessage(received, matched.index)
|
|
41
|
+
].join('\n');
|
|
42
|
+
}
|
|
43
|
+
function failMessage(received, expected) {
|
|
44
|
+
return () => [
|
|
45
|
+
(0, jest_matcher_utils_1.matcherHint)(`${predicate_1.matcherName}`),
|
|
46
|
+
'Expected call with arguments matching:',
|
|
47
|
+
` ${(0, jest_matcher_utils_1.printExpected)(expected)}`,
|
|
48
|
+
`Received (${received.mock.calls.length} total):`,
|
|
49
|
+
...formatArgsMessage(received)
|
|
50
|
+
].join('\n');
|
|
51
|
+
}
|
|
52
|
+
function isMock(received) {
|
|
53
|
+
if (received !== null && !Array.isArray(received)) {
|
|
54
|
+
return ((0, ts_utils_1.getValueOfPropertyOrDefault)('_isMockFunction', received) === true &&
|
|
55
|
+
(0, ts_utils_1.getTypeOfProperty)('mock', received) === 'object');
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
exports.default = {
|
|
60
|
+
toHaveBeenCalledWithArgumentsMatching: function (received, expected) {
|
|
61
|
+
if (!isMock(received)) {
|
|
62
|
+
throw new Error('Test error: toHaveBeenCalledWithArgumentsMatching called with other than jest.Mock');
|
|
63
|
+
}
|
|
64
|
+
const matched = (0, predicate_1.predicate)(received, expected);
|
|
65
|
+
if (matched !== undefined) {
|
|
66
|
+
return { pass: true, message: passMessage(received, expected, matched) };
|
|
67
|
+
}
|
|
68
|
+
return { pass: false, message: failMessage(received, expected) };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/matchers/toHaveBeenCalledWithArgumentsMatching/index.ts"],"names":[],"mappings":";;AAAA,4CAA+E;AAC/E,2DAA+E;AAC/E,2CAAmE;AAiBnE,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAc;IAC9C,gCAAgC;IAChC,IAAI,MAAM,GAAG,CAAC,EAAE;QACd,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;KAClC;IAED,IAAI,MAAM,KAAK,CAAC,EAAE;QAChB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;KAC7B;SAAM,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE;QAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;KAC3C;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,QAAiB,EAAE,MAAe;IACtE,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC;IACpG,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACxC,OAAO,GAAG,YAAY,GAAG,WAAW,KAAK,IAAA,kCAAa,EAAC,QAAQ,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAmB,EAAE,MAAe;IAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAElC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,wCAAwC;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChG,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;KACrF;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,QAAmB,EAAE,QAAiB,EAAE,OAAqB;IAChF,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,QAAQ,uBAAW,EAAE,CAAC;QAClC,2CAA2C;QAC3C,SAAS,IAAA,kCAAa,EAAC,QAAQ,CAAC,EAAE;QAClC,aAAa,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,UAAU;QACjD,GAAG,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;KAC9C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,QAAmB,EAAE,QAAiB;IACzD,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,GAAG,uBAAW,EAAE,CAAC;QAC7B,wCAAwC;QACxC,SAAS,IAAA,kCAAa,EAAC,QAAQ,CAAC,EAAE;QAClC,aAAa,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,UAAU;QACjD,GAAG,iBAAiB,CAAC,QAAQ,CAAC;KAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,MAAM,CAAC,QAAiB;IAC/B,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACjD,OAAO,CACL,IAAA,sCAA2B,EAAC,iBAAiB,EAAE,QAAkB,CAAC,KAAK,IAAI;YAC3E,IAAA,4BAAiB,EAAC,MAAM,EAAE,QAAkB,CAAC,KAAK,QAAQ,CAC3D,CAAC;KACH;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kBAAe;IACb,qCAAqC,EAAE,UACrC,QAAmB,EACnB,QAAiB;QAEjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;SACvG;QAED,MAAM,OAAO,GAAG,IAAA,qBAAS,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;SAC1E;QAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;IACnE,CAAC;CACF,CAAC","sourcesContent":["import { getTypeOfProperty, getValueOfPropertyOrDefault } from '@fgv/ts-utils';\nimport { matcherHint, printExpected, printReceived } from 'jest-matcher-utils';\nimport { IMatchedCall, matcherName, predicate } from './predicate';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars, @typescript-eslint/ban-types, @typescript-eslint/naming-convention\n interface Matchers<R> {\n /**\n * Use .toSucceedWith to verify that a Result<T> is a success\n * and that the result value matches the supplied value\n * @param expected -\n */\n toHaveBeenCalledWithArgumentsMatching(expected: unknown): R;\n }\n }\n}\n\nfunction getRange(length: number, cursor: number): { start: number; end: number } {\n // less than 3 return everything\n if (length < 3) {\n return { start: 0, end: length };\n }\n\n if (cursor === 0) {\n return { start: 0, end: 3 };\n } else if (cursor >= length - 1) {\n return { start: length - 3, end: length };\n }\n return { start: cursor - 1, end: cursor + 2 };\n}\n\nfunction formatOneCall(index: number, received: unknown, cursor: boolean): string {\n const indexString = index.toLocaleString([], { maximumFractionDigits: 0, minimumIntegerDigits: 3 });\n const cursorString = cursor ? '*' : ' ';\n return `${cursorString}${indexString}: ${printReceived(received)}`;\n}\n\nfunction formatArgsMessage(received: jest.Mock, cursor?: number): string[] {\n const calls = received.mock.calls;\n\n if (calls.length > 0) {\n // if there's no cursor, show the last 3\n const { start, end } = getRange(calls.length, cursor !== undefined ? cursor : calls.length - 1);\n const callsToShow = calls.slice(start, end);\n return callsToShow.map((c, i) => formatOneCall(start + i, c, start + i === cursor));\n }\n return [];\n}\n\nfunction passMessage(received: jest.Mock, expected: unknown, matched: IMatchedCall): () => string {\n return () =>\n [\n matcherHint(`.not.${matcherName}`),\n 'Expected no call with arguments matching:',\n ` ${printExpected(expected)}`,\n `Received (${received.mock.calls.length} total):`,\n ...formatArgsMessage(received, matched.index)\n ].join('\\n');\n}\n\nfunction failMessage(received: jest.Mock, expected: unknown): () => string {\n return () =>\n [\n matcherHint(`${matcherName}`),\n 'Expected call with arguments matching:',\n ` ${printExpected(expected)}`,\n `Received (${received.mock.calls.length} total):`,\n ...formatArgsMessage(received)\n ].join('\\n');\n}\n\nfunction isMock(received: unknown): received is jest.Mock {\n if (received !== null && !Array.isArray(received)) {\n return (\n getValueOfPropertyOrDefault('_isMockFunction', received as object) === true &&\n getTypeOfProperty('mock', received as object) === 'object'\n );\n }\n return false;\n}\n\nexport default {\n toHaveBeenCalledWithArgumentsMatching: function (\n received: jest.Mock,\n expected: unknown\n ): jest.CustomMatcherResult {\n if (!isMock(received)) {\n throw new Error('Test error: toHaveBeenCalledWithArgumentsMatching called with other than jest.Mock');\n }\n\n const matched = predicate(received, expected);\n if (matched !== undefined) {\n return { pass: true, message: passMessage(received, expected, matched) };\n }\n\n return { pass: false, message: failMessage(received, expected) };\n }\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
2
|
+
export declare const matcherName: string;
|
|
3
|
+
export interface IMatchedCall {
|
|
4
|
+
index: number;
|
|
5
|
+
arguments: unknown[];
|
|
6
|
+
}
|
|
7
|
+
export declare function predicate(received: jest.Mock, expected: unknown): undefined | IMatchedCall;
|
|
8
|
+
//# sourceMappingURL=predicate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../src/matchers/toHaveBeenCalledWithArgumentsMatching/predicate.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,WAAW,EAAE,MAAgD,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAQ1F"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.predicate = exports.matcherName = void 0;
|
|
4
|
+
const expect_utils_1 = require("@jest/expect-utils");
|
|
5
|
+
exports.matcherName = 'toHaveBeenCalledWithArgumentsMatching';
|
|
6
|
+
function predicate(received, expected) {
|
|
7
|
+
for (let i = 0; i < received.mock.calls.length; i++) {
|
|
8
|
+
const args = received.mock.calls[i];
|
|
9
|
+
if ((0, expect_utils_1.equals)(args, expected)) {
|
|
10
|
+
return { index: i, arguments: args };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
exports.predicate = predicate;
|
|
16
|
+
//# sourceMappingURL=predicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["../../../src/matchers/toHaveBeenCalledWithArgumentsMatching/predicate.ts"],"names":[],"mappings":";;;AAAA,qDAA4C;AAE/B,QAAA,WAAW,GAAW,uCAAuC,CAAC;AAO3E,SAAgB,SAAS,CAAC,QAAmB,EAAE,QAAiB;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,IAAA,qBAAM,EAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;YAC1B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACtC;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AARD,8BAQC","sourcesContent":["import { equals } from '@jest/expect-utils';\n\nexport const matcherName: string = 'toHaveBeenCalledWithArgumentsMatching';\n\nexport interface IMatchedCall {\n index: number;\n arguments: unknown[];\n}\n\nexport function predicate(received: jest.Mock, expected: unknown): undefined | IMatchedCall {\n for (let i = 0; i < received.mock.calls.length; i++) {\n const args = received.mock.calls[i];\n if (equals(args, expected)) {\n return { index: i, arguments: args };\n }\n }\n return undefined;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/matchers/toSucceed/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,IAAI,CAAC;QAEb,UAAU,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrB;;eAEG;YACH,SAAS,IAAI,CAAC,CAAC;SAChB;KACF;CACF;;2CAmB+C,KAAK,mBAAmB;;AADxE,wBASE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const matcherHelpers_1 = require("../../utils/matcherHelpers");
|
|
4
|
+
const predicate_1 = require("./predicate");
|
|
5
|
+
const jest_matcher_utils_1 = require("jest-matcher-utils");
|
|
6
|
+
function passMessage(received) {
|
|
7
|
+
return () => [
|
|
8
|
+
(0, jest_matcher_utils_1.matcherHint)(`.not.${predicate_1.matcherName}`),
|
|
9
|
+
(0, matcherHelpers_1.printExpectedResult)('success', false),
|
|
10
|
+
(0, matcherHelpers_1.printReceivedResult)(received)
|
|
11
|
+
].join('\n');
|
|
12
|
+
}
|
|
13
|
+
function failMessage(received) {
|
|
14
|
+
return () => [(0, jest_matcher_utils_1.matcherHint)(`${predicate_1.matcherName}`), (0, matcherHelpers_1.printExpectedResult)('success', true), (0, matcherHelpers_1.printReceivedResult)(received)].join('\n');
|
|
15
|
+
}
|
|
16
|
+
exports.default = {
|
|
17
|
+
toSucceed: function (received) {
|
|
18
|
+
const pass = (0, predicate_1.predicate)(received);
|
|
19
|
+
if (pass) {
|
|
20
|
+
return { pass: true, message: passMessage(received) };
|
|
21
|
+
}
|
|
22
|
+
return { pass: false, message: failMessage(received) };
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/matchers/toSucceed/index.ts"],"names":[],"mappings":";;AAAA,+DAAsF;AACtF,2CAAqD;AAGrD,2DAAiD;AAejD,SAAS,WAAW,CAAI,QAAmB;IACzC,OAAO,GAAG,EAAE,CACV;QACE,IAAA,gCAAW,EAAC,QAAQ,uBAAW,EAAE,CAAC;QAClC,IAAA,oCAAmB,EAAC,SAAS,EAAE,KAAK,CAAC;QACrC,IAAA,oCAAmB,EAAC,QAAQ,CAAC;KAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAI,QAAmB;IACzC,OAAO,GAAG,EAAE,CACV,CAAC,IAAA,gCAAW,EAAC,GAAG,uBAAW,EAAE,CAAC,EAAE,IAAA,oCAAmB,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAA,oCAAmB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACvG,IAAI,CACL,CAAC;AACN,CAAC;AAED,kBAAe;IACb,SAAS,EAAE,UAAa,QAAmB;QACzC,MAAM,IAAI,GAAG,IAAA,qBAAS,EAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,IAAI,EAAE;YACR,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;SACvD;QAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzD,CAAC;CACF,CAAC","sourcesContent":["import { printExpectedResult, printReceivedResult } from '../../utils/matcherHelpers';\nimport { matcherName, predicate } from './predicate';\n\nimport { Result } from '@fgv/ts-utils';\nimport { matcherHint } from 'jest-matcher-utils';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/ban-types, @typescript-eslint/naming-convention\n interface Matchers<R, T> {\n /**\n * Use .toSucceed to verify that a Result<T> is a success\n */\n toSucceed(): R;\n }\n }\n}\n\nfunction passMessage<T>(received: Result<T>): () => string {\n return () =>\n [\n matcherHint(`.not.${matcherName}`),\n printExpectedResult('success', false),\n printReceivedResult(received)\n ].join('\\n');\n}\n\nfunction failMessage<T>(received: Result<T>): () => string {\n return () =>\n [matcherHint(`${matcherName}`), printExpectedResult('success', true), printReceivedResult(received)].join(\n '\\n'\n );\n}\n\nexport default {\n toSucceed: function <T>(received: Result<T>): jest.CustomMatcherResult {\n const pass = predicate(received);\n if (pass) {\n return { pass: true, message: passMessage(received) };\n }\n\n return { pass: false, message: failMessage(received) };\n }\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.d.ts","sourceRoot":"","sources":["../../../src/matchers/toSucceed/predicate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,eAAO,MAAM,WAAW,EAAE,MAAoB,CAAC;AAE/C,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAEzD"}
|