pax_global_header00006660000000000000000000000064127111436540014516gustar00rootroot0000000000000052 comment=d7e4e310c2e24e1835b5c408eec70009c9c3a1a6 std-mocks-1.0.1/000077500000000000000000000000001271114365400134215ustar00rootroot00000000000000std-mocks-1.0.1/.gitignore000077500000000000000000000000161271114365400154110ustar00rootroot00000000000000node_modules/ std-mocks-1.0.1/.travis.yml000077500000000000000000000001031271114365400155270ustar00rootroot00000000000000language: node_js node_js: - 0.10 - 0.12 - 4.0 sudo: false std-mocks-1.0.1/LICENSE000077500000000000000000000020651271114365400144340ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2014 Greg Bergé Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.std-mocks-1.0.1/README.md000077500000000000000000000031121271114365400147000ustar00rootroot00000000000000# std-mocks [![Build Status](https://travis-ci.org/neoziro/std-mocks.svg?branch=master)](https://travis-ci.org/neoziro/std-mocks) [![Dependency Status](https://david-dm.org/neoziro/std-mocks.svg?theme=shields.io)](https://david-dm.org/neoziro/std-mocks) [![devDependency Status](https://david-dm.org/neoziro/std-mocks/dev-status.svg?theme=shields.io)](https://david-dm.org/neoziro/std-mocks#info=devDependencies) Mock node stdout and stderr without pain. ## Install ``` npm install std-mocks ``` ## Usage ```js var stdMocks = require('std-mocks'); stdMocks.use(); process.stdout.write('ok'); console.log('log test\n'); stdMocks.restore(); var output = stdMocks.flush(); console.log(output.stdout); // ['ok', 'log test\n'] ``` ### stdMocks.use([options]) Start mocking std output, by default both are mocked. **Options:** ``` @param {object} [options] Options @param {boolean} [options.stdout=true] Mock stdout @param {boolean} [options.stderr=true] Mock stderr @param {boolean} [options.print=false] Also print to std ``` ### stdMocks.restore([options]) Restore std output, by default both are restored. **Options:** ``` @param {object} [options] Options @param {boolean} [options.stdout=true] Mock stdout @param {boolean} [options.stderr=true] Mock stderr ``` ### stdMocks.flush([options]) Flush collected data, by default both are collected. **Options:** ``` @param {object} [options] Options @param {boolean} [options.stdout=true] Mock stdout @param {boolean} [options.stderr=true] Mock stderr @returns {object} Object containing two array corresponding to outputs. ``` ## License MIT std-mocks-1.0.1/index.js000066400000000000000000000041341271114365400150700ustar00rootroot00000000000000var _ = require('lodash'); // Expose methods. exports.use = use; exports.restore = restore; exports.flush = flush; /** * Store original writes. */ var originalWrites = { stdout: process.stdout.write, stderr: process.stderr.write }; /** * Data. */ var cachedData = { stdout: [], stderr: [] }; /** * Start mocking std output. * * @param {object} [options] Options * @param {boolean} [options.stdout=true] Mock stdout * @param {boolean} [options.stderr=true] Mock stderr * @param {boolean} [options.print=false] Also print to std */ function use(options) { options = _.defaults(options || {}, { stdout: true, stderr: true, print: false }); if (options.stdout) wrapWrite('stdout', options.print); if (options.stderr) wrapWrite('stderr', options.print); } /** * Wrap write method. * * @param {string} std Std * @param {boolean} print Also print to std */ function wrapWrite(std, print) { process[std].write = function (data) { cachedData[std].push(data); if (print) originalWrites[std].apply(process[std], arguments); }; } /** * Restore std output. * * @param {object} [options] Options * @param {boolean} [options.stdout=true] Mock stdout * @param {boolean} [options.stderr=true] Mock stderr */ function restore(options) { options = _.defaults(options || {}, { stdout: true, stderr: true }); if (options.stdout) process.stdout.write = originalWrites.stdout; if (options.stderr) process.stderr.write = originalWrites.stderr; } /** * Flush collected data. * * @param {object} [options] Options * @param {boolean} [options.stdout=true] Mock stdout * @param {boolean} [options.stderr=true] Mock stderr * @returns {object} Object containing two array corresponding to outputs. */ function flush(options) { options = _.defaults(options || {}, { stdout: true, stderr: true }); var flushed = {}; if (options.stdout) { flushed.stdout = cachedData.stdout; cachedData.stdout = []; } if (options.stderr) { flushed.stderr = cachedData.stderr; cachedData.stderr = []; } return flushed; } std-mocks-1.0.1/package.json000066400000000000000000000007061271114365400157120ustar00rootroot00000000000000{ "name": "std-mocks", "version": "1.0.1", "description": "Mock node stdout and stderr without pain.", "main": "index.js", "scripts": { "test": "mocha" }, "repository": { "type": "git", "url": "git@github.com:neoziro/std-mocks.git" }, "author": "Bergé Greg ", "license": "MIT", "dependencies": { "lodash": "^4.11.1" }, "devDependencies": { "chai": "3.x.x", "mocha": "^2.1.0" } } std-mocks-1.0.1/test.js000066400000000000000000000023451271114365400147420ustar00rootroot00000000000000var expect = require('chai').expect; var stdMocks = require('./'); describe('Std mocks', function () { it('should mocks the two std', function () { stdMocks.use(); console.log('Test log'); console.error('Test error'); stdMocks.restore(); var data = stdMocks.flush(); expect(data).to.have.deep.property('stdout[0]', 'Test log\n'); expect(data).to.have.deep.property('stderr[0]', 'Test error\n'); }); it('should be possible to mock only stdout', function () { stdMocks.use({stderr: false}); console.log('Test log'); console.error('Test error'); stdMocks.restore(); var data = stdMocks.flush(); expect(data).to.have.deep.property('stdout[0]', 'Test log\n'); expect(data.stderr).to.be.empty; }); it('should be possible to flush only stdout', function () { stdMocks.use(); console.log('Test log'); console.error('Test error'); stdMocks.restore(); var data = stdMocks.flush({stderr: false}); expect(data).to.have.deep.property('stdout[0]', 'Test log\n'); expect(data.stderr).to.not.exists; data = stdMocks.flush({stdout: false}); expect(data).to.have.deep.property('stderr[0]', 'Test error\n'); expect(data.stdout).to.not.exists; }); });