@nestia/e2e 0.1.5 → 0.1.7
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/lib/TestValidator.d.ts +19 -0
- package/lib/TestValidator.js +31 -0
- package/lib/TestValidator.js.map +1 -1
- package/lib/internal/json_equal_to.d.ts +1 -0
- package/lib/internal/json_equal_to.js +36 -0
- package/lib/internal/json_equal_to.js.map +1 -0
- package/package.json +56 -52
- package/src/TestValidator.ts +38 -0
- package/src/internal/json_equal_to.ts +37 -0
package/lib/TestValidator.d.ts
CHANGED
|
@@ -6,6 +6,25 @@
|
|
|
6
6
|
* @author Jeongho Nam - https://github.com/samchon
|
|
7
7
|
*/
|
|
8
8
|
export declare namespace TestValidator {
|
|
9
|
+
/**
|
|
10
|
+
* Test whether condition is satisfied.
|
|
11
|
+
*
|
|
12
|
+
* @param title Title of error message when condition is not satisfied
|
|
13
|
+
* @return Currying function
|
|
14
|
+
*/
|
|
15
|
+
const predicate: (title: string) => (condition: () => boolean) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Test whether two values are equal.
|
|
18
|
+
*
|
|
19
|
+
* If you want to validate `covers` relationship,
|
|
20
|
+
* call smaller first and then larger.
|
|
21
|
+
*
|
|
22
|
+
* Otherwise you wanna non equals validator, combine with {@link error}.
|
|
23
|
+
*
|
|
24
|
+
* @param title Title of error message when different
|
|
25
|
+
* @returns Currying function
|
|
26
|
+
*/
|
|
27
|
+
const equals: (title: string) => <T>(x: T) => (y: T) => void;
|
|
9
28
|
/**
|
|
10
29
|
* Test whether error occurs.
|
|
11
30
|
*
|
package/lib/TestValidator.js
CHANGED
|
@@ -50,6 +50,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
50
50
|
exports.TestValidator = void 0;
|
|
51
51
|
var ranges_1 = require("tstl/ranges");
|
|
52
52
|
var RandomGenerator_1 = require("./RandomGenerator");
|
|
53
|
+
var json_equal_to_1 = require("./internal/json_equal_to");
|
|
53
54
|
/**
|
|
54
55
|
* Test validator.
|
|
55
56
|
*
|
|
@@ -60,6 +61,36 @@ var RandomGenerator_1 = require("./RandomGenerator");
|
|
|
60
61
|
var TestValidator;
|
|
61
62
|
(function (TestValidator) {
|
|
62
63
|
var _this = this;
|
|
64
|
+
/**
|
|
65
|
+
* Test whether condition is satisfied.
|
|
66
|
+
*
|
|
67
|
+
* @param title Title of error message when condition is not satisfied
|
|
68
|
+
* @return Currying function
|
|
69
|
+
*/
|
|
70
|
+
TestValidator.predicate = function (title) { return function (condition) {
|
|
71
|
+
if (condition() !== true)
|
|
72
|
+
throw new Error("Bug on ".concat(title, ": expected condition is not satisfied."));
|
|
73
|
+
}; };
|
|
74
|
+
/**
|
|
75
|
+
* Test whether two values are equal.
|
|
76
|
+
*
|
|
77
|
+
* If you want to validate `covers` relationship,
|
|
78
|
+
* call smaller first and then larger.
|
|
79
|
+
*
|
|
80
|
+
* Otherwise you wanna non equals validator, combine with {@link error}.
|
|
81
|
+
*
|
|
82
|
+
* @param title Title of error message when different
|
|
83
|
+
* @returns Currying function
|
|
84
|
+
*/
|
|
85
|
+
TestValidator.equals = function (title) {
|
|
86
|
+
return function (x) {
|
|
87
|
+
return function (y) {
|
|
88
|
+
var diff = (0, json_equal_to_1.json_equal_to)(x, y);
|
|
89
|
+
if (diff.length)
|
|
90
|
+
throw new Error("Bug on ".concat(title, ": found different values - [").concat(diff.join(", "), "]"));
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
};
|
|
63
94
|
/**
|
|
64
95
|
* Test whether error occurs.
|
|
65
96
|
*
|
package/lib/TestValidator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAwC;AAExC,qDAAoD;
|
|
1
|
+
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function json_equal_to<T>(x: T, y: T): string[];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.json_equal_to = void 0;
|
|
4
|
+
function array_equal_to(items, name, x, y) {
|
|
5
|
+
if (x.length !== y.length)
|
|
6
|
+
items.push("".concat(name, ".length"));
|
|
7
|
+
x.forEach(function (xItem, i) { return any_equal_to(items, "".concat(name, "[").concat(i, "]"), xItem, y[i]); });
|
|
8
|
+
}
|
|
9
|
+
function object_equal_to(items, name, x, y) {
|
|
10
|
+
for (var key in x) {
|
|
11
|
+
if (key.substr(-2) === "id" || key.substr(-3) === "_at")
|
|
12
|
+
continue;
|
|
13
|
+
any_equal_to(items, "".concat(name, ".").concat(key), x[key], y[key]);
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
function any_equal_to(items, name, x, y) {
|
|
18
|
+
if (typeof x !== typeof y)
|
|
19
|
+
items.push(name);
|
|
20
|
+
else if (x instanceof Array)
|
|
21
|
+
if (!(y instanceof Array))
|
|
22
|
+
items.push(name);
|
|
23
|
+
else
|
|
24
|
+
array_equal_to(items, name, x, y);
|
|
25
|
+
else if (x instanceof Object)
|
|
26
|
+
object_equal_to(items, name, x, y);
|
|
27
|
+
else if (x !== y)
|
|
28
|
+
items.push(name);
|
|
29
|
+
}
|
|
30
|
+
function json_equal_to(x, y) {
|
|
31
|
+
var ret = [];
|
|
32
|
+
any_equal_to(ret, "", x, y);
|
|
33
|
+
return ret;
|
|
34
|
+
}
|
|
35
|
+
exports.json_equal_to = json_equal_to;
|
|
36
|
+
//# sourceMappingURL=json_equal_to.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json_equal_to.js","sourceRoot":"","sources":["../../src/internal/json_equal_to.ts"],"names":[],"mappings":";;;AAAA,SAAS,cAAc,CACnB,KAAe,EACf,IAAY,EACZ,CAAQ,EACR,CAAQ;IAER,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,UAAG,IAAI,YAAS,CAAC,CAAC;IACxD,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,CAAC,IAAK,OAAA,YAAY,CAAC,KAAK,EAAE,UAAG,IAAI,cAAI,CAAC,MAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAjD,CAAiD,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,eAAe,CACpB,KAAe,EACf,IAAY,EACZ,CAAM,EACN,CAAM;IAEN,KAAK,IAAM,GAAG,IAAI,CAAC,EAAE;QACjB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK;YAAE,SAAS;QAClE,YAAY,CAAC,KAAK,EAAE,UAAG,IAAI,cAAI,GAAG,CAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACzD;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAe,EAAE,IAAY,EAAE,CAAM,EAAE,CAAM;IAC/D,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACvC,IAAI,CAAC,YAAY,KAAK;QACvB,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACvC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACtC,IAAI,CAAC,YAAY,MAAM;QAAE,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5D,IAAI,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,aAAa,CAAI,CAAI,EAAE,CAAI;IACvC,IAAM,GAAG,GAAa,EAAE,CAAC;IACzB,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,GAAG,CAAC;AACf,CAAC;AAJD,sCAIC"}
|
package/package.json
CHANGED
|
@@ -1,52 +1,56 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@nestia/e2e",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "E2E test utilify functions",
|
|
5
|
-
"main": "lib/index.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"build": "rimraf lib && tsc",
|
|
8
|
-
"dev": "npm run build -- --watch",
|
|
9
|
-
"prettier": "prettier --write ./src/**/*.ts",
|
|
10
|
-
"test": "node lib/test"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
"@
|
|
33
|
-
"@types/
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@nestia/e2e",
|
|
3
|
+
"version": "0.1.7",
|
|
4
|
+
"description": "E2E test utilify functions",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "rimraf lib && tsc",
|
|
8
|
+
"dev": "npm run build -- --watch",
|
|
9
|
+
"prettier": "prettier --write ./src/**/*.ts",
|
|
10
|
+
"test": "node lib/test",
|
|
11
|
+
"prepare": "ts-patch install"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/samchon/nestia"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"e2e",
|
|
19
|
+
"nestia",
|
|
20
|
+
"nestjs",
|
|
21
|
+
"test",
|
|
22
|
+
"tdd",
|
|
23
|
+
"utility"
|
|
24
|
+
],
|
|
25
|
+
"author": "Jeongho Nam",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/samchon/nestia/issues"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/samchon/nestia#readme",
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
|
|
33
|
+
"@types/cli": "^0.11.21",
|
|
34
|
+
"@types/node": "^18.11.18",
|
|
35
|
+
"prettier": "^2.8.3",
|
|
36
|
+
"rimraf": "^4.1.2",
|
|
37
|
+
"ts-node": "^10.9.1",
|
|
38
|
+
"ts-patch": "^2.1.0",
|
|
39
|
+
"typescript": "^4.9.5",
|
|
40
|
+
"typia": "^3.6.9"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"chalk": "^4.1.2",
|
|
44
|
+
"cli": "^1.0.1",
|
|
45
|
+
"tstl": "^2.5.13"
|
|
46
|
+
},
|
|
47
|
+
"files": [
|
|
48
|
+
"lib",
|
|
49
|
+
"src",
|
|
50
|
+
"!lib/test",
|
|
51
|
+
"!src/test",
|
|
52
|
+
"README.md",
|
|
53
|
+
"LICENSE",
|
|
54
|
+
"package.json"
|
|
55
|
+
]
|
|
56
|
+
}
|
package/src/TestValidator.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { is_sorted } from "tstl/ranges";
|
|
2
2
|
|
|
3
3
|
import { RandomGenerator } from "./RandomGenerator";
|
|
4
|
+
import { json_equal_to } from "./internal/json_equal_to";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Test validator.
|
|
@@ -10,6 +11,43 @@ import { RandomGenerator } from "./RandomGenerator";
|
|
|
10
11
|
* @author Jeongho Nam - https://github.com/samchon
|
|
11
12
|
*/
|
|
12
13
|
export namespace TestValidator {
|
|
14
|
+
/**
|
|
15
|
+
* Test whether condition is satisfied.
|
|
16
|
+
*
|
|
17
|
+
* @param title Title of error message when condition is not satisfied
|
|
18
|
+
* @return Currying function
|
|
19
|
+
*/
|
|
20
|
+
export const predicate = (title: string) => (condition: () => boolean) => {
|
|
21
|
+
if (condition() !== true)
|
|
22
|
+
throw new Error(
|
|
23
|
+
`Bug on ${title}: expected condition is not satisfied.`,
|
|
24
|
+
);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Test whether two values are equal.
|
|
29
|
+
*
|
|
30
|
+
* If you want to validate `covers` relationship,
|
|
31
|
+
* call smaller first and then larger.
|
|
32
|
+
*
|
|
33
|
+
* Otherwise you wanna non equals validator, combine with {@link error}.
|
|
34
|
+
*
|
|
35
|
+
* @param title Title of error message when different
|
|
36
|
+
* @returns Currying function
|
|
37
|
+
*/
|
|
38
|
+
export const equals =
|
|
39
|
+
(title: string) =>
|
|
40
|
+
<T>(x: T) =>
|
|
41
|
+
(y: T) => {
|
|
42
|
+
const diff: string[] = json_equal_to(x, y);
|
|
43
|
+
if (diff.length)
|
|
44
|
+
throw new Error(
|
|
45
|
+
`Bug on ${title}: found different values - [${diff.join(
|
|
46
|
+
", ",
|
|
47
|
+
)}]`,
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
|
|
13
51
|
/**
|
|
14
52
|
* Test whether error occurs.
|
|
15
53
|
*
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function array_equal_to(
|
|
2
|
+
items: string[],
|
|
3
|
+
name: string,
|
|
4
|
+
x: any[],
|
|
5
|
+
y: any[],
|
|
6
|
+
): void {
|
|
7
|
+
if (x.length !== y.length) items.push(`${name}.length`);
|
|
8
|
+
x.forEach((xItem, i) => any_equal_to(items, `${name}[${i}]`, xItem, y[i]));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function object_equal_to(
|
|
12
|
+
items: string[],
|
|
13
|
+
name: string,
|
|
14
|
+
x: any,
|
|
15
|
+
y: any,
|
|
16
|
+
): boolean {
|
|
17
|
+
for (const key in x) {
|
|
18
|
+
if (key.substr(-2) === "id" || key.substr(-3) === "_at") continue;
|
|
19
|
+
any_equal_to(items, `${name}.${key}`, x[key], y[key]);
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function any_equal_to(items: string[], name: string, x: any, y: any): void {
|
|
25
|
+
if (typeof x !== typeof y) items.push(name);
|
|
26
|
+
else if (x instanceof Array)
|
|
27
|
+
if (!(y instanceof Array)) items.push(name);
|
|
28
|
+
else array_equal_to(items, name, x, y);
|
|
29
|
+
else if (x instanceof Object) object_equal_to(items, name, x, y);
|
|
30
|
+
else if (x !== y) items.push(name);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function json_equal_to<T>(x: T, y: T): string[] {
|
|
34
|
+
const ret: string[] = [];
|
|
35
|
+
any_equal_to(ret, "", x, y);
|
|
36
|
+
return ret;
|
|
37
|
+
}
|