| 'use strict'; |
| |
| require('../common'); |
| const fixtures = require('../common/fixtures'); |
| const fs = require('fs'); |
| const assert = require('assert'); |
| |
| const tmpdir = require('../common/tmpdir'); |
| tmpdir.refresh(); |
| |
| const streamOpts = ['open', 'close']; |
| const writeStreamOptions = [...streamOpts, 'write']; |
| const readStreamOptions = [...streamOpts, 'read']; |
| const originalFs = { fs }; |
| |
| { |
| const file = tmpdir.resolve('write-end-test0.txt'); |
| |
| writeStreamOptions.forEach((fn) => { |
| const overrideFs = Object.assign({}, originalFs.fs, { [fn]: null }); |
| if (fn === 'write') overrideFs.writev = null; |
| |
| const opts = { |
| fs: overrideFs |
| }; |
| assert.throws( |
| () => fs.createWriteStream(file, opts), { |
| code: 'ERR_INVALID_ARG_TYPE', |
| name: 'TypeError', |
| message: `The "options.fs.${fn}" property must be of type function. ` + |
| 'Received null' |
| }, |
| `createWriteStream options.fs.${fn} should throw if isn't a function` |
| ); |
| }); |
| } |
| |
| { |
| const file = tmpdir.resolve('write-end-test0.txt'); |
| const overrideFs = Object.assign({}, originalFs.fs, { writev: 'not a fn' }); |
| const opts = { |
| fs: overrideFs |
| }; |
| assert.throws( |
| () => fs.createWriteStream(file, opts), { |
| code: 'ERR_INVALID_ARG_TYPE', |
| name: 'TypeError', |
| message: 'The "options.fs.writev" property must be of type function. ' + |
| 'Received type string (\'not a fn\')' |
| }, |
| 'createWriteStream options.fs.writev should throw if isn\'t a function' |
| ); |
| } |
| |
| { |
| const file = fixtures.path('x.txt'); |
| readStreamOptions.forEach((fn) => { |
| const overrideFs = Object.assign({}, originalFs.fs, { [fn]: null }); |
| const opts = { |
| fs: overrideFs |
| }; |
| assert.throws( |
| () => fs.createReadStream(file, opts), { |
| code: 'ERR_INVALID_ARG_TYPE', |
| name: 'TypeError', |
| message: `The "options.fs.${fn}" property must be of type function. ` + |
| 'Received null' |
| }, |
| `createReadStream options.fs.${fn} should throw if isn't a function` |
| ); |
| }); |
| } |