• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright Joyent, Inc. and other Node contributors.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a
4// copy of this software and associated documentation files (the
5// "Software"), to deal in the Software without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Software, and to permit
8// persons to whom the Software is furnished to do so, subject to the
9// following conditions:
10//
11// The above copyright notice and this permission notice shall be included
12// in all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20// USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22'use strict';
23const common = require('../../common');
24const assert = require('assert');
25const repl = require('repl');
26const stream = require('stream');
27const path = require('path');
28let buildPath = path.join(__dirname, 'build', common.buildType, 'binding');
29// On Windows, escape backslashes in the path before passing it to REPL.
30if (common.isWindows)
31  buildPath = buildPath.replace(/\\/g, '/');
32let cb_ran = false;
33
34process.on('exit', () => {
35  assert(cb_ran);
36  console.log('ok');
37});
38
39const lines = [
40  // This line shouldn't cause an assertion error.
41  `require('${buildPath}')` +
42  // Log output to double check callback ran.
43  '.method(function(v1, v2) {' +
44  'console.log(\'cb_ran\'); return v1 === true && v2 === false; });',
45];
46
47const dInput = new stream.Readable();
48const dOutput = new stream.Writable();
49
50dInput._read = function _read() {
51  while (lines.length > 0 && this.push(lines.shift()));
52  if (lines.length === 0)
53    this.push(null);
54};
55
56dOutput._write = function _write(chunk, encoding, cb) {
57  if (chunk.toString().startsWith('cb_ran'))
58    cb_ran = true;
59  cb();
60};
61
62const options = {
63  input: dInput,
64  output: dOutput,
65  terminal: false,
66  ignoreUndefined: true,
67};
68
69// Run commands from fake REPL.
70repl.start(options);
71