|
| 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