@lodestar/spec-test-util 1.48.0-dev.f22c5ce63e → 1.48.0-dev.ff9749be2c
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/single.d.ts +2 -0
- package/lib/single.d.ts.map +1 -1
- package/lib/single.js +18 -4
- package/lib/single.js.map +1 -1
- package/lib/sszGeneric.d.ts +1 -1
- package/lib/sszGeneric.js +3 -3
- package/lib/sszGeneric.js.map +1 -1
- package/package.json +6 -6
- package/src/single.ts +23 -5
- package/src/sszGeneric.ts +3 -3
package/lib/single.d.ts
CHANGED
|
@@ -46,6 +46,8 @@ export interface SpecTestOptions<TestCase extends {
|
|
|
46
46
|
[K: string]: (value: any) => any;
|
|
47
47
|
};
|
|
48
48
|
shouldError?: (testCase: TestCase) => boolean;
|
|
49
|
+
/** Determine whether an input deserialization error is expected from the error and the files present in the test case. */
|
|
50
|
+
shouldErrorOnInput?: (error: Error, inputNames: Set<string>, name: string, index: number) => boolean;
|
|
49
51
|
shouldSkip?: (testCase: TestCase, name: string, index: number) => boolean;
|
|
50
52
|
expectFunc?: (testCase: TestCase, expected: any, actual: any) => void;
|
|
51
53
|
timeout?: number;
|
package/lib/single.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../src/single.ts"],"names":[],"mappings":"AAMA,oBAAY,SAAS;IACnB,GAAG,QAAQ;IACX,UAAU,eAAe;IACzB,IAAI,SAAS;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;IAC5C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;CACtD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,CAQ/F;AAED,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAC,EAAE,MAAM;IACpE;;;OAGG;IACH,UAAU,CAAC,EAAE;SAAE,CAAC,IAAI,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,iBAAiB;KAAC,CAAC;IAElF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEzE;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,QAAQ,CAAC;IAErD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,CAAC;IAEzD;;;OAGG;IAEH,eAAe,CAAC,EAAE;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;KAAC,CAAC;IAErD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAE9C,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAE1E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAEtE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,yBAAyB,CAAC,QAAQ,SAAS;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAC,EAAE,MAAM,EAC7E,IAAI,EAAE,MAAM,EACZ,qBAAqB,EAAE,MAAM,EAC7B,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAC3G,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAClD,IAAI,
|
|
1
|
+
{"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../src/single.ts"],"names":[],"mappings":"AAMA,oBAAY,SAAS;IACnB,GAAG,QAAQ;IACX,UAAU,eAAe;IACzB,IAAI,SAAS;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;IAC5C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;CACtD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,CAQ/F;AAED,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAC,EAAE,MAAM;IACpE;;;OAGG;IACH,UAAU,CAAC,EAAE;SAAE,CAAC,IAAI,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,iBAAiB;KAAC,CAAC;IAElF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAE1C;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEzE;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,QAAQ,CAAC;IAErD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,CAAC;IAEzD;;;OAGG;IAEH,eAAe,CAAC,EAAE;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;KAAC,CAAC;IAErD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;IAE9C,0HAA0H;IAC1H,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAErG,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAE1E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAEtE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,yBAAyB,CAAC,QAAQ,SAAS;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAC,EAAE,MAAM,EAC7E,IAAI,EAAE,MAAM,EACZ,qBAAqB,EAAE,MAAM,EAC7B,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAC3G,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAClD,IAAI,CAgEN;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElE"}
|
package/lib/single.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { uncompress } from "snappyjs";
|
|
4
3
|
import { describe, expect, it, vi } from "vitest";
|
|
4
|
+
import snappyWasm from "@chainsafe/snappy-wasm";
|
|
5
5
|
import { loadYaml } from "@lodestar/utils";
|
|
6
6
|
export var InputType;
|
|
7
7
|
(function (InputType) {
|
|
@@ -50,7 +50,20 @@ export function describeDirectorySpecTest(name, testCaseDirectoryPath, testFunct
|
|
|
50
50
|
const meta = fs.existsSync(metaFilePath)
|
|
51
51
|
? loadYaml(fs.readFileSync(metaFilePath, "utf8"))
|
|
52
52
|
: undefined;
|
|
53
|
-
let testCase
|
|
53
|
+
let testCase;
|
|
54
|
+
try {
|
|
55
|
+
testCase = loadInputFiles(testSubDirPath, options, meta);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
const inputNames = new Set(fs
|
|
59
|
+
.readdirSync(testSubDirPath)
|
|
60
|
+
.filter((file) => !isDirectory(path.join(testSubDirPath, file)))
|
|
61
|
+
.map((file) => path.parse(file).name));
|
|
62
|
+
if (options.shouldErrorOnInput?.(e, inputNames, testName, 0)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
throw e;
|
|
66
|
+
}
|
|
54
67
|
if (options.mapToTestCase)
|
|
55
68
|
testCase = options.mapToTestCase(testCase);
|
|
56
69
|
if (options.shouldSkip?.(testCase, testName, 0)) {
|
|
@@ -64,6 +77,7 @@ export function describeDirectorySpecTest(name, testCaseDirectoryPath, testFunct
|
|
|
64
77
|
catch (_e) {
|
|
65
78
|
return;
|
|
66
79
|
}
|
|
80
|
+
expect.unreachable("Expected test function to throw");
|
|
67
81
|
}
|
|
68
82
|
else {
|
|
69
83
|
const result = await testFunction(testCase, name, testSubDirname);
|
|
@@ -108,7 +122,7 @@ function loadInputFiles(directory, options, meta) {
|
|
|
108
122
|
testCase[`${inputName}_raw`] = fs.readFileSync(file);
|
|
109
123
|
break;
|
|
110
124
|
case InputType.SSZ_SNAPPY:
|
|
111
|
-
testCase[`${inputName}_raw`] =
|
|
125
|
+
testCase[`${inputName}_raw`] = snappyWasm.decompress(fs.readFileSync(file));
|
|
112
126
|
break;
|
|
113
127
|
}
|
|
114
128
|
if (!options.inputProcessing)
|
|
@@ -141,7 +155,7 @@ function deserializeInputFile(file, inputName, inputType, options, meta) {
|
|
|
141
155
|
throw Error("sszTypes is not defined");
|
|
142
156
|
let data = fs.readFileSync(file);
|
|
143
157
|
if (inputType === InputType.SSZ_SNAPPY) {
|
|
144
|
-
data =
|
|
158
|
+
data = snappyWasm.decompress(data);
|
|
145
159
|
}
|
|
146
160
|
let sszType;
|
|
147
161
|
for (const key of Object.keys(sszTypes)) {
|
package/lib/single.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single.js","sourceRoot":"","sources":["../src/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"single.js","sourceRoot":"","sources":["../src/single.ts"],"names":[],"mappings":"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"}
|
package/lib/sszGeneric.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare function parseSszValidTestcase(dirpath: string, metaFilename: str
|
|
|
14
14
|
* Docs: https://github.com/ethereum/consensus-specs/blob/v1.6.1/tests/formats/ssz_generic/README.md
|
|
15
15
|
*/
|
|
16
16
|
export declare function parseSszGenericInvalidTestcase(dirpath: string): {
|
|
17
|
-
serialized:
|
|
17
|
+
serialized: Uint8Array<ArrayBufferLike>;
|
|
18
18
|
};
|
|
19
19
|
export declare function readYamlNumbersAsStrings(yamlStr: string): unknown;
|
|
20
20
|
//# sourceMappingURL=sszGeneric.d.ts.map
|
package/lib/sszGeneric.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import
|
|
3
|
+
import snappyWasm from "@chainsafe/snappy-wasm";
|
|
4
4
|
import { loadYaml } from "@lodestar/utils";
|
|
5
5
|
export function parseSszValidTestcase(dirpath, metaFilename) {
|
|
6
6
|
// The root is stored in meta.yml as:
|
|
@@ -11,7 +11,7 @@ export function parseSszValidTestcase(dirpath, metaFilename) {
|
|
|
11
11
|
throw Error(`meta.root not a string: ${meta.root}\n${metaStr}`);
|
|
12
12
|
}
|
|
13
13
|
// The serialized value is stored in serialized.ssz_snappy
|
|
14
|
-
const serialized =
|
|
14
|
+
const serialized = snappyWasm.decompress(fs.readFileSync(path.join(dirpath, "serialized.ssz_snappy")));
|
|
15
15
|
// The value is stored in value.yml
|
|
16
16
|
const yamlPath = path.join(dirpath, "value.yaml");
|
|
17
17
|
const yamlStrNumbersAsNumbers = fs.readFileSync(yamlPath, "utf8");
|
|
@@ -34,7 +34,7 @@ export function parseSszValidTestcase(dirpath, metaFilename) {
|
|
|
34
34
|
*/
|
|
35
35
|
export function parseSszGenericInvalidTestcase(dirpath) {
|
|
36
36
|
// The serialized value is stored in serialized.ssz_snappy
|
|
37
|
-
const serialized =
|
|
37
|
+
const serialized = snappyWasm.decompress(fs.readFileSync(path.join(dirpath, "serialized.ssz_snappy")));
|
|
38
38
|
return {
|
|
39
39
|
serialized,
|
|
40
40
|
};
|
package/lib/sszGeneric.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sszGeneric.js","sourceRoot":"","sources":["../src/sszGeneric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"sszGeneric.js","sourceRoot":"","sources":["../src/sszGeneric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAQzC,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,YAAoB;IACzE,qCAAqC;IACrC,qBAAqB;IACrB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAmB,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,KAAK,CAAC,2BAA2B,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,0DAA0D;IAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAEvG,mCAAmC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,uBAAuB,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IAEpE,8EAA8E;IAE9E,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAAe;IAC5D,0DAA0D;IAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAEvG,OAAO;QACL,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodestar/spec-test-util",
|
|
3
|
-
"version": "1.48.0-dev.
|
|
3
|
+
"version": "1.48.0-dev.ff9749be2c",
|
|
4
4
|
"description": "Spec test suite generator from yaml test files",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -59,15 +59,15 @@
|
|
|
59
59
|
"blockchain"
|
|
60
60
|
],
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@
|
|
62
|
+
"@chainsafe/snappy-wasm": "^0.5.2",
|
|
63
|
+
"@lodestar/utils": "^1.48.0-dev.ff9749be2c",
|
|
63
64
|
"rimraf": "^4.4.1",
|
|
64
|
-
"snappyjs": "^0.7.0",
|
|
65
65
|
"vitest": "catalog:"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
|
-
"@chainsafe/ssz": "^1.
|
|
69
|
-
"@lodestar/types": "^1.48.0-dev.
|
|
68
|
+
"@chainsafe/ssz": "^1.8.0",
|
|
69
|
+
"@lodestar/types": "^1.48.0-dev.ff9749be2c",
|
|
70
70
|
"vitest": "catalog:"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "bb8a252f7ae741ea6943becf36aeeea93b08e36d"
|
|
73
73
|
}
|
package/src/single.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import {uncompress} from "snappyjs";
|
|
4
3
|
import {describe, expect, it, vi} from "vitest";
|
|
4
|
+
import snappyWasm from "@chainsafe/snappy-wasm";
|
|
5
5
|
import {loadYaml} from "@lodestar/utils";
|
|
6
6
|
|
|
7
7
|
export enum InputType {
|
|
@@ -66,6 +66,9 @@ export interface SpecTestOptions<TestCase extends {meta?: any}, Result> {
|
|
|
66
66
|
|
|
67
67
|
shouldError?: (testCase: TestCase) => boolean;
|
|
68
68
|
|
|
69
|
+
/** Determine whether an input deserialization error is expected from the error and the files present in the test case. */
|
|
70
|
+
shouldErrorOnInput?: (error: Error, inputNames: Set<string>, name: string, index: number) => boolean;
|
|
71
|
+
|
|
69
72
|
shouldSkip?: (testCase: TestCase, name: string, index: number) => boolean;
|
|
70
73
|
|
|
71
74
|
expectFunc?: (testCase: TestCase, expected: any, actual: any) => void;
|
|
@@ -115,7 +118,21 @@ export function describeDirectorySpecTest<TestCase extends {meta?: any}, Result>
|
|
|
115
118
|
? loadYaml(fs.readFileSync(metaFilePath, "utf8"))
|
|
116
119
|
: undefined;
|
|
117
120
|
|
|
118
|
-
let testCase
|
|
121
|
+
let testCase: TestCase;
|
|
122
|
+
try {
|
|
123
|
+
testCase = loadInputFiles(testSubDirPath, options, meta);
|
|
124
|
+
} catch (e) {
|
|
125
|
+
const inputNames = new Set(
|
|
126
|
+
fs
|
|
127
|
+
.readdirSync(testSubDirPath)
|
|
128
|
+
.filter((file) => !isDirectory(path.join(testSubDirPath, file)))
|
|
129
|
+
.map((file) => path.parse(file).name)
|
|
130
|
+
);
|
|
131
|
+
if (options.shouldErrorOnInput?.(e as Error, inputNames, testName, 0)) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
throw e;
|
|
135
|
+
}
|
|
119
136
|
if (options.mapToTestCase) testCase = options.mapToTestCase(testCase);
|
|
120
137
|
if (options.shouldSkip?.(testCase, testName, 0)) {
|
|
121
138
|
context.skip();
|
|
@@ -128,6 +145,7 @@ export function describeDirectorySpecTest<TestCase extends {meta?: any}, Result>
|
|
|
128
145
|
} catch (_e) {
|
|
129
146
|
return;
|
|
130
147
|
}
|
|
148
|
+
expect.unreachable("Expected test function to throw");
|
|
131
149
|
} else {
|
|
132
150
|
const result = await testFunction(testCase, name, testSubDirname);
|
|
133
151
|
if (!options.getExpected) throw Error("getExpected is not defined");
|
|
@@ -174,7 +192,7 @@ function loadInputFiles<TestCase extends {meta?: any}, Result>(
|
|
|
174
192
|
testCase[`${inputName}_raw`] = fs.readFileSync(file);
|
|
175
193
|
break;
|
|
176
194
|
case InputType.SSZ_SNAPPY:
|
|
177
|
-
testCase[`${inputName}_raw`] =
|
|
195
|
+
testCase[`${inputName}_raw`] = snappyWasm.decompress(fs.readFileSync(file));
|
|
178
196
|
break;
|
|
179
197
|
}
|
|
180
198
|
if (!options.inputProcessing) throw Error("inputProcessing is not defined");
|
|
@@ -214,9 +232,9 @@ function deserializeInputFile<TestCase extends {meta?: any}, Result>(
|
|
|
214
232
|
if (inputType === InputType.SSZ || inputType === InputType.SSZ_SNAPPY) {
|
|
215
233
|
const sszTypes = options.getSszTypes ? options.getSszTypes(meta) : options.sszTypes;
|
|
216
234
|
if (!sszTypes) throw Error("sszTypes is not defined");
|
|
217
|
-
let data = fs.readFileSync(file);
|
|
235
|
+
let data: Uint8Array = fs.readFileSync(file);
|
|
218
236
|
if (inputType === InputType.SSZ_SNAPPY) {
|
|
219
|
-
data =
|
|
237
|
+
data = snappyWasm.decompress(data);
|
|
220
238
|
}
|
|
221
239
|
|
|
222
240
|
let sszType: SszTypeGeneric | undefined;
|
package/src/sszGeneric.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import
|
|
3
|
+
import snappyWasm from "@chainsafe/snappy-wasm";
|
|
4
4
|
import {loadYaml} from "@lodestar/utils";
|
|
5
5
|
|
|
6
6
|
export type ValidTestCaseData = {
|
|
@@ -19,7 +19,7 @@ export function parseSszValidTestcase(dirpath: string, metaFilename: string): Va
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
// The serialized value is stored in serialized.ssz_snappy
|
|
22
|
-
const serialized =
|
|
22
|
+
const serialized = snappyWasm.decompress(fs.readFileSync(path.join(dirpath, "serialized.ssz_snappy")));
|
|
23
23
|
|
|
24
24
|
// The value is stored in value.yml
|
|
25
25
|
const yamlPath = path.join(dirpath, "value.yaml");
|
|
@@ -46,7 +46,7 @@ export function parseSszValidTestcase(dirpath: string, metaFilename: string): Va
|
|
|
46
46
|
*/
|
|
47
47
|
export function parseSszGenericInvalidTestcase(dirpath: string) {
|
|
48
48
|
// The serialized value is stored in serialized.ssz_snappy
|
|
49
|
-
const serialized =
|
|
49
|
+
const serialized = snappyWasm.decompress(fs.readFileSync(path.join(dirpath, "serialized.ssz_snappy")));
|
|
50
50
|
|
|
51
51
|
return {
|
|
52
52
|
serialized,
|