Skip to content

Commit 0eb397b

Browse files
committed
test(json-pack): 💍 add automated Bencode tests
1 parent c7aa6f0 commit 0eb397b

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {Writer} from '../../../util/buffers/Writer';
2+
import {BencodeEncoder} from '../BencodeEncoder';
3+
import {BencodeDecoder} from '../BencodeDecoder';
4+
import {utf8} from '../../../util/buffers/strings';
5+
6+
const writer = new Writer(8);
7+
const encoder = new BencodeEncoder(writer);
8+
const decoder = new BencodeDecoder();
9+
10+
const documents: [value: unknown, name?: string][] = [
11+
[0],
12+
[1],
13+
[12345],
14+
[-12345],
15+
[-4444444444444444],
16+
[true],
17+
[false],
18+
[null],
19+
[undefined],
20+
[utf8``, 'empty byte string'],
21+
[utf8`hello`, '"hello" byte string'],
22+
[{}, 'empty object'],
23+
[[], 'empty array'],
24+
[[1, -2, null, true, utf8`asdf`, false, utf8``, undefined], 'array with basic values'],
25+
[[[[]]], 'triply nested arrays'],
26+
[[1, [1, [1], 1], 1], 'nested arrays with values'],
27+
[{a: {b: {c: {d: {foo: utf8`bar`}}}}}, 'nested objects'],
28+
];
29+
30+
const assertEncoder = (value: unknown) => {
31+
const encoded = encoder.encode(value);
32+
const decoded = decoder.decode(encoded);
33+
expect(decoded).toEqual(value);
34+
};
35+
36+
describe('Sample JSON documents', () => {
37+
for (const [value, name] of documents) {
38+
test(name || String(value), () => {
39+
assertEncoder(value);
40+
});
41+
}
42+
});

0 commit comments

Comments
 (0)