Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.5 KiB
41 lines
1.5 KiB
import { encode } from '../index.js'
|
|
import { assert } from 'chai'
|
|
import { Encoder } from '../pack.js'
|
|
|
|
const tests = {
|
|
string: 'interesting string',
|
|
number: 12345,
|
|
buffer: Buffer.from('hello world'),
|
|
bigint: 12345678910n,
|
|
array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
|
|
'many-strings': [],
|
|
set: new Set('abcdefghijklmnopqrstuvwxyz'.split('')),
|
|
object: { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }
|
|
}
|
|
for (let i = 0; i < 100; i++) {
|
|
tests['many-strings'].push('test-data-' + i)
|
|
}
|
|
|
|
suite('encode and decode tests with partial values', function () {
|
|
const encoder = new Encoder({ objectMode: true, structures: [], structuredClone: true })
|
|
|
|
for (const [label, testData] of Object.entries(tests)) {
|
|
test(label, () => {
|
|
const encoded = encoder.encode(testData)
|
|
assert.isTrue(Buffer.isBuffer(encoded), 'encode returns a Buffer')
|
|
assert.deepStrictEqual(encoder.decode(encoded, encoded.length, true), testData, 'full buffer decodes well')
|
|
const firstHalf = encoded.slice(0, Math.floor(encoded.length / 2))
|
|
let value
|
|
try {
|
|
value = encoder.decode(firstHalf, firstHalf.length, true)
|
|
} catch (err) {
|
|
if (err.incomplete !== true) {
|
|
assert.fail(`Should throw an error with .incomplete set to true, instead threw error <${err}>`)
|
|
} else {
|
|
return; // victory! correct outcome!
|
|
}
|
|
}
|
|
assert.fail(`Should throw an error with .incomplete set to true, instead returned value ${JSON.stringify(value)}`)
|
|
})
|
|
}
|
|
})
|
|
|