• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const assert = require('assert');
4
5const { Writable } = require('stream');
6
7function expectError(w, arg, code, sync) {
8  if (sync) {
9    if (code) {
10      assert.throws(() => w.write(arg), { code });
11    } else {
12      w.write(arg);
13    }
14  } else {
15    let errorCalled = false;
16    let ticked = false;
17    w.write(arg, common.mustCall((err) => {
18      assert.strictEqual(ticked, true);
19      assert.strictEqual(errorCalled, false);
20      assert.strictEqual(err.code, code);
21    }));
22    ticked = true;
23    w.on('error', common.mustCall((err) => {
24      errorCalled = true;
25      assert.strictEqual(err.code, code);
26    }));
27  }
28}
29
30function test(autoDestroy) {
31  {
32    const w = new Writable({
33      autoDestroy,
34      _write() {}
35    });
36    w.end();
37    expectError(w, 'asd', 'ERR_STREAM_WRITE_AFTER_END');
38  }
39
40  {
41    const w = new Writable({
42      autoDestroy,
43      _write() {}
44    });
45    w.destroy();
46  }
47
48  {
49    const w = new Writable({
50      autoDestroy,
51      _write() {}
52    });
53    expectError(w, null, 'ERR_STREAM_NULL_VALUES', true);
54  }
55
56  {
57    const w = new Writable({
58      autoDestroy,
59      _write() {}
60    });
61    expectError(w, {}, 'ERR_INVALID_ARG_TYPE', true);
62  }
63}
64
65test(false);
66test(true);
67