'use strict';

const common = require('../common');
const assert = require('assert');
const spawn = require('child_process').spawn;

let run = () => {};
function test(args, re) {
  const next = run;
  run = () => {
    const options = {encoding: 'utf8'};
    const proc = spawn(process.execPath, args.concat(['-e', '0']), options);
    let stderr = '';
    proc.stderr.setEncoding('utf8');
    proc.stderr.on('data', (data) => {
      stderr += data;
      if (re.test(stderr)) proc.kill();
    });
    proc.on('exit', common.mustCall(() => {
      assert(re.test(stderr));
      next();
    }));
  };
}

test(['--debug-brk'], /Debugger listening on (\[::\]|0\.0\.0\.0):5858/);
test(['--debug-brk=1234'], /Debugger listening on (\[::\]|0\.0\.0\.0):1234/);
test(['--debug-brk=127.0.0.1'], /Debugger listening on 127\.0\.0\.1:5858/);
test(['--debug-brk=127.0.0.1:1234'], /Debugger listening on 127\.0\.0\.1:1234/);
test(['--debug-brk=localhost'],
     /Debugger listening on (\[::\]|127\.0\.0\.1):5858/);
test(['--debug-brk=localhost:1234'],
     /Debugger listening on (\[::\]|127\.0\.0\.1):1234/);

if (common.hasIPv6) {
  test(['--debug-brk=::'], /Debug port must be in range 1024 to 65535/);
  test(['--debug-brk=::0'], /Debug port must be in range 1024 to 65535/);
  test(['--debug-brk=::1'], /Debug port must be in range 1024 to 65535/);
  test(['--debug-brk=[::]'], /Debugger listening on \[::\]:5858/);
  test(['--debug-brk=[::0]'], /Debugger listening on \[::\]:5858/);
  test(['--debug-brk=[::]:1234'], /Debugger listening on \[::\]:1234/);
  test(['--debug-brk=[::0]:1234'], /Debugger listening on \[::\]:1234/);
  test(['--debug-brk=[::ffff:127.0.0.1]:1234'],
       /Debugger listening on \[::ffff:127\.0\.0\.1\]:1234/);
}

run();  // Runs tests in reverse order.
