1'use strict';
2const common = require('../common');
3const assert = require('assert');
4const path = require('path');
5const childProcess = require('child_process');
6const fs = require('fs');
7const fixtures = require('../common/fixtures');
8const tmpdir = require('../common/tmpdir');
9
10const scriptString = fixtures.path('print-chars.js');
11const scriptBuffer = fixtures.path('print-chars-from-buffer.js');
12const tmpFile = path.join(tmpdir.path, 'stdout.txt');
13
14tmpdir.refresh();
15
16function test(size, useBuffer, cb) {
17  const cmd = `"${process.argv[0]}" "${
18    useBuffer ? scriptBuffer : scriptString}" ${size} > "${tmpFile}"`;
19
20  try {
21    fs.unlinkSync(tmpFile);
22  } catch {
23    // Continue regardless of error.
24  }
25
26  console.log(`${size} chars to ${tmpFile}...`);
27
28  childProcess.exec(cmd, common.mustSucceed(() => {
29    console.log('done!');
30
31    const stat = fs.statSync(tmpFile);
32
33    console.log(`${tmpFile} has ${stat.size} bytes`);
34
35    assert.strictEqual(size, stat.size);
36    fs.unlinkSync(tmpFile);
37
38    cb();
39  }));
40}
41
42test(1024 * 1024, false, common.mustCall(function() {
43  console.log('Done printing with string');
44  test(1024 * 1024, true, common.mustCall(function() {
45    console.log('Done printing with buffer');
46  }));
47}));
48