'use strict' const assert = require('chai').assert const spooks = require('spooks') const modulePath = '../../src/jsonstream' suite('jsonstream:', () => { let log setup(() => { log = {} }) test('require does not throw', () => { assert.doesNotThrow(() => { require(modulePath) }) }) test('require returns function', () => { assert.isFunction(require(modulePath)) }) suite('require:', () => { let Stream setup(() => { Stream = require(modulePath) }) test('Stream expects two arguments', () => { assert.lengthOf(Stream, 2) }) test('calling Stream with function argument doesNotThrow', () => { assert.doesNotThrow(() => { Stream(() => {}) }) }) test('calling Stream with object argument throws', () => { assert.throws(() => { Stream({ read: () => {} }) }) }) test('calling Stream with new returns Stream instance', () => { assert.instanceOf(new Stream(() => {}), Stream) }) test('calling Stream with new returns Readable instance', () => { assert.instanceOf(new Stream(() => {}), require('stream').Readable) }) test('calling Stream without new returns Stream instance', () => { assert.instanceOf(Stream(() => {}), Stream) }) suite('instantiate:', () => { let jsonstream setup(() => { jsonstream = new Stream(spooks.fn({ name: 'read', log: log })) }) test('jsonstream has _read method', () => { assert.isFunction(jsonstream._read) }) test('_read expects no arguments', () => { assert.lengthOf(jsonstream._read, 0) }) test('read was not called', () => { assert.strictEqual(log.counts.read, 0) }) suite('jsonstream._read:', () => { setup(() => { jsonstream._read() }) test('read was called once', () => { assert.strictEqual(log.counts.read, 1) assert.isUndefined(log.these.read[0]) }) test('read was called correctly', () => { assert.lengthOf(log.args.read[0], 0) }) }) }) }) })