@nestia/e2e 0.1.4 → 0.1.6
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/ArrayUtil.d.ts +1 -0
- package/lib/ArrayUtil.js +17 -0
- package/lib/ArrayUtil.js.map +1 -1
- package/lib/TestValidator.d.ts +7 -0
- package/lib/TestValidator.js +12 -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 +1 -1
- package/src/ArrayUtil.ts +19 -0
- package/src/TestValidator.ts +13 -0
- package/src/internal/json_equal_to.ts +37 -0
package/lib/ArrayUtil.d.ts
CHANGED
package/lib/ArrayUtil.js
CHANGED
|
@@ -213,5 +213,22 @@ var ArrayUtil;
|
|
|
213
213
|
return (_a = []).concat.apply(_a, __spreadArray([], __read(matrix), false));
|
|
214
214
|
}
|
|
215
215
|
ArrayUtil.flat = flat;
|
|
216
|
+
function subsets(array) {
|
|
217
|
+
var check = new Array(array.length).fill(false);
|
|
218
|
+
var output = [];
|
|
219
|
+
var dfs = function (depth) {
|
|
220
|
+
if (depth === check.length)
|
|
221
|
+
output.push(array.filter(function (_v, idx) { return check[idx]; }));
|
|
222
|
+
else {
|
|
223
|
+
check[depth] = true;
|
|
224
|
+
dfs(depth + 1);
|
|
225
|
+
check[depth] = false;
|
|
226
|
+
dfs(depth + 1);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
dfs(0);
|
|
230
|
+
return output;
|
|
231
|
+
}
|
|
232
|
+
ArrayUtil.subsets = subsets;
|
|
216
233
|
})(ArrayUtil = exports.ArrayUtil || (exports.ArrayUtil = {}));
|
|
217
234
|
//# sourceMappingURL=ArrayUtil.js.map
|
package/lib/ArrayUtil.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayUtil.js","sourceRoot":"","sources":["../src/ArrayUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;GAIG;AACH,IAAiB,SAAS,
|
|
1
|
+
{"version":3,"file":"ArrayUtil.js","sourceRoot":"","sources":["../src/ArrayUtil.ts"],"names":[],"mappings":"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"}
|
package/lib/TestValidator.d.ts
CHANGED
|
@@ -16,6 +16,13 @@ export declare namespace TestValidator {
|
|
|
16
16
|
* @param title Title of exception because of no error exists
|
|
17
17
|
*/
|
|
18
18
|
const error: (title: string) => (task: () => any | Promise<any>) => Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Test whether two values are equal.
|
|
21
|
+
*
|
|
22
|
+
* @param title Title of error message when different
|
|
23
|
+
* @returns Currying function
|
|
24
|
+
*/
|
|
25
|
+
const equals: (title: string) => <T>(x: T) => (y: T) => void;
|
|
19
26
|
/**
|
|
20
27
|
* Validate index API.
|
|
21
28
|
*
|
package/lib/TestValidator.js
CHANGED
|
@@ -49,6 +49,7 @@ var __values = (this && this.__values) || function(o) {
|
|
|
49
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
50
|
exports.TestValidator = void 0;
|
|
51
51
|
var ranges_1 = require("tstl/ranges");
|
|
52
|
+
var json_equal_to_1 = require("./internal/json_equal_to");
|
|
52
53
|
var RandomGenerator_1 = require("./RandomGenerator");
|
|
53
54
|
/**
|
|
54
55
|
* Test validator.
|
|
@@ -88,6 +89,17 @@ var TestValidator;
|
|
|
88
89
|
});
|
|
89
90
|
}); };
|
|
90
91
|
};
|
|
92
|
+
/**
|
|
93
|
+
* Test whether two values are equal.
|
|
94
|
+
*
|
|
95
|
+
* @param title Title of error message when different
|
|
96
|
+
* @returns Currying function
|
|
97
|
+
*/
|
|
98
|
+
TestValidator.equals = function (title) { return function (x) { return function (y) {
|
|
99
|
+
var diff = (0, json_equal_to_1.json_equal_to)(x, y);
|
|
100
|
+
if (diff.length)
|
|
101
|
+
throw new Error("Bug on ".concat(title, ": found different values - [").concat(diff.join(", "), "]"));
|
|
102
|
+
}; }; };
|
|
91
103
|
/**
|
|
92
104
|
* Validate index API.
|
|
93
105
|
*
|
package/lib/TestValidator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAwC;
|
|
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
package/src/ArrayUtil.ts
CHANGED
|
@@ -84,4 +84,23 @@ export namespace ArrayUtil {
|
|
|
84
84
|
export function flat<T>(matrix: T[][]): T[] {
|
|
85
85
|
return ([] as T[]).concat(...matrix);
|
|
86
86
|
}
|
|
87
|
+
|
|
88
|
+
export function subsets<T>(array: T[]): T[][] {
|
|
89
|
+
const check: boolean[] = new Array(array.length).fill(false);
|
|
90
|
+
const output: T[][] = [];
|
|
91
|
+
|
|
92
|
+
const dfs = (depth: number) => {
|
|
93
|
+
if (depth === check.length)
|
|
94
|
+
output.push(array.filter((_v, idx) => check[idx]));
|
|
95
|
+
else {
|
|
96
|
+
check[depth] = true;
|
|
97
|
+
dfs(depth + 1);
|
|
98
|
+
|
|
99
|
+
check[depth] = false;
|
|
100
|
+
dfs(depth + 1);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
dfs(0);
|
|
104
|
+
return output;
|
|
105
|
+
}
|
|
87
106
|
}
|
package/src/TestValidator.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { is_sorted } from "tstl/ranges";
|
|
2
|
+
import { json_equal_to } from "./internal/json_equal_to";
|
|
2
3
|
|
|
3
4
|
import { RandomGenerator } from "./RandomGenerator";
|
|
4
5
|
|
|
@@ -30,6 +31,18 @@ export namespace TestValidator {
|
|
|
30
31
|
throw new Error(`Bug on ${title}: exception must be thrown.`);
|
|
31
32
|
};
|
|
32
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Test whether two values are equal.
|
|
36
|
+
*
|
|
37
|
+
* @param title Title of error message when different
|
|
38
|
+
* @returns Currying function
|
|
39
|
+
*/
|
|
40
|
+
export const equals = (title: string) => <T>(x: T) => (y: T) => {
|
|
41
|
+
const diff: string[] = json_equal_to(x, y);
|
|
42
|
+
if (diff.length)
|
|
43
|
+
throw new Error(`Bug on ${title}: found different values - [${diff.join(", ")}]`);
|
|
44
|
+
};
|
|
45
|
+
|
|
33
46
|
/**
|
|
34
47
|
* Validate index API.
|
|
35
48
|
*
|
|
@@ -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
|
+
}
|