diff --git a/src/lte-reader.ts b/src/lte-reader.ts index 3799798..49d4d5f 100644 --- a/src/lte-reader.ts +++ b/src/lte-reader.ts @@ -23,7 +23,7 @@ export function lteReader (source: Source): LteReader { overflow = overflow.sublist(bytes) } else if (overflow.length < bytes) { const { value: nextValue, done } = await input.next(bytes - overflow.length) - if (done === true ?? nextValue == null) { + if (done === true) { throw Object.assign( new Error(`stream ended before ${bytes - overflow.length} bytes became available`), { code: 'ERR_UNDER_READ' } diff --git a/test/lte-reader.spec.ts b/test/lte-reader.spec.ts new file mode 100644 index 0000000..830ad25 --- /dev/null +++ b/test/lte-reader.spec.ts @@ -0,0 +1,29 @@ +import { expect } from 'aegir/chai' +import { lteReader } from '../src/lte-reader.js' + +describe('lte-reader', () => { + it('should read', async () => { + const reader = lteReader([ + Uint8Array.from([0, 1, 2, 3, 4]), + Uint8Array.from([5, 6, 7, 8, 9]) + ]) + + const { value } = await reader.next(6) + + if (value == null) { + throw new Error('No value received') + } + + expect(value.subarray()).to.equalBytes(Uint8Array.from([0, 1, 2, 3, 4, 5])) + }) + + it('should reject on under-read', async () => { + const reader = lteReader([ + Uint8Array.from([0, 1, 2, 3, 4]), + Uint8Array.from([5, 6, 7, 8, 9]) + ]) + + await expect(reader.next(100)).to.eventually.be.rejected + .with.property('code', 'ERR_UNDER_READ') + }) +})