[//]: # ( )
[//]: # (This file is automatically generated by a `metapak`)
[//]: # (module. Do not change it  except between the)
[//]: # (`content:start/end` flags, your changes would)
[//]: # (be overridden.)
[//]: # ( )
# streamtest
> Streams test library

[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/nfroidure/streamtest/blob/master/LICENSE)
[![Build status](https://secure.travis-ci.org/nfroidure/streamtest.svg)](https://travis-ci.org/nfroidure/streamtest)
[![Coverage Status](https://coveralls.io/repos/nfroidure/streamtest/badge.svg?branch=master)](https://coveralls.io/r/nfroidure/streamtest?branch=master)
[![NPM version](https://badge.fury.io/js/streamtest.svg)](https://npmjs.org/package/streamtest)
[![Dependency Status](https://david-dm.org/nfroidure/streamtest.svg)](https://david-dm.org/nfroidure/streamtest)
[![devDependency Status](https://david-dm.org/nfroidure/streamtest/dev-status.svg)](https://david-dm.org/nfroidure/streamtest#info=devDependencies)
[![Package Quality](http://npm.packagequality.com/shield/streamtest.svg)](http://packagequality.com/#?package=streamtest)
[![Code Climate](https://codeclimate.com/github/nfroidure/streamtest.svg)](https://codeclimate.com/github/nfroidure/streamtest)


[//]: # (::contents:start)

`streamtest` is a set of utils to test your stream based modules accross various
 stream implementations of NodeJS.

In fact, this [repository's tests](https://github.com/nfroidure/streamtest/blob/master/tests/index.mocha.js)
 is a perfect example of its own usage ;).

## Installation

First install `streamtest` in your project:
```sh
npm install --save-dev streamtest
```

## Getting started

Then, use it:

```js
var StreamTest = require('streamtest');

describe('My Stream Lib', function() {

  // Iterating through versions
  StreamTest.versions.forEach(function(version) {

    describe('for ' + version + ' streams', function() {

      // here goes your code
      it('should work', function(done) {

        StreamTest[version].fromChunks(['a ', 'chunk', 'and', 'another'])
          .pipe(myTestedStream)
          .pipe(StreamTest[version].toText(function(err, text) {
            if(err) {
              done(err);
            }
            assert.equal(text, 'the text as i should be');
            done();
          }));

      });

    });

  });

});
```

## API

### `StreamTest.versions:Array`
List of supported versions (currently v1 and v2).

### `StreamTest[version]:Object`
Object available for each version containing the following methods.

### `StreamTest[version].fromChunks(chunks:Array, timeout:Number)`

Create a readable stream streaming `chunks` each `timeout` milliseconds and then
 end. Usefull for testing buffer based streams.

### `StreamTest[version].fromObjects(objects:Array, timeout:Number)`

Create a readable stream streaming `objects` each `timeout` milliseconds and
 then end. Usefull for testing objectMode based streams.

### `StreamTest[version].fromErroredChunks(err:Error, chunks:Array, timeout:Number)`

Create a readable stream streaming `chunks` each `timeout` milliseconds, emit
 the `err` error and then end. Usefull for testing buffer based streams.

### `StreamTest[version].fromErroredObjects(err:Error, objects:Array, timeout:Number)`

Create a readable stream streaming `objects` each `timeout` milliseconds, emit
 the `err` error and then end. Usefull for testing objectMode based streams.

### `StreamTest[version].toChunks(cb:Function)`

Create a writable stream collecting written `chunks` and calling the `cb`
 function when it finishes.

The `cb` function take in an error and an Array of chunks.

### `StreamTest[version].toObjects(cb:Function)`

Create a writable stream collecting written `chunks` and calling the `cb`
 function when it finishes.

The `cb` function take in an error and an Array of objects.

### `StreamTest[version].toText(cb:Function)`

Create a writable stream collecting written `chunks` and calling the `cb`
 function when it finishes with the whole content converted to text.

The `cb` function take in an error and a string.

## Contribute

Feel free to submit us your improvements. To do so, you must accept to publish
 your code under the MIT license.

To start contributing, first run the following to setup the development
 environment:
```sh
git clone git@github.com:nfroidure/streamtest.git
cd streamtest
npm install
```

Then, run the tests:
```sh
npm test
```

[//]: # (::contents:end)

# Authors
- [Nicolas Froidure](https://insertafter.com/en/index.html)

# License
[MIT](https://github.com/nfroidure/streamtest/blob/master/LICENSE)
