• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3require('../common');
4const fixtures = require('../common/fixtures');
5const path = require('path');
6const fs = require('fs');
7const assert = require('assert');
8
9const tmpdir = require('../common/tmpdir');
10tmpdir.refresh();
11
12const streamOpts = ['open', 'close'];
13const writeStreamOptions = [...streamOpts, 'write'];
14const readStreamOptions = [...streamOpts, 'read'];
15const originalFs = { fs };
16
17{
18  const file = path.join(tmpdir.path, 'write-end-test0.txt');
19
20  writeStreamOptions.forEach((fn) => {
21    const overrideFs = Object.assign({}, originalFs.fs, { [fn]: null });
22    if (fn === 'write') overrideFs.writev = null;
23
24    const opts = {
25      fs: overrideFs
26    };
27    assert.throws(
28      () => fs.createWriteStream(file, opts), {
29        code: 'ERR_INVALID_ARG_TYPE',
30        name: 'TypeError',
31        message: `The "options.fs.${fn}" property must be of type function. ` +
32        'Received null'
33      },
34      `createWriteStream options.fs.${fn} should throw if isn't a function`
35    );
36  });
37}
38
39{
40  const file = path.join(tmpdir.path, 'write-end-test0.txt');
41  const overrideFs = Object.assign({}, originalFs.fs, { writev: 'not a fn' });
42  const opts = {
43    fs: overrideFs
44  };
45  assert.throws(
46    () => fs.createWriteStream(file, opts), {
47      code: 'ERR_INVALID_ARG_TYPE',
48      name: 'TypeError',
49      message: 'The "options.fs.writev" property must be of type function. ' +
50        'Received type string (\'not a fn\')'
51    },
52    'createWriteStream options.fs.writev should throw if isn\'t a function'
53  );
54}
55
56{
57  const file = fixtures.path('x.txt');
58  readStreamOptions.forEach((fn) => {
59    const overrideFs = Object.assign({}, originalFs.fs, { [fn]: null });
60    const opts = {
61      fs: overrideFs
62    };
63    assert.throws(
64      () => fs.createReadStream(file, opts), {
65        code: 'ERR_INVALID_ARG_TYPE',
66        name: 'TypeError',
67        message: `The "options.fs.${fn}" property must be of type function. ` +
68        'Received null'
69      },
70      `createReadStream options.fs.${fn} should throw if isn't a function`
71    );
72  });
73}
74