text: // Flags: --expose-internals
  'use strict';
  
  const common = require('../common');
  const assert = require('assert');
  const EventEmitter = require('events');
  const SocketListReceive = require('internal/socket_list').SocketListReceive;
  
  const key = 'test-key';
  
  // Verify that the message won't be sent when child is not connected.
  {
    const child = Object.assign(new EventEmitter(), {
      connected: false,
      _send: common.mustNotCall()
    });
  
    const list = new SocketListReceive(child, key);
    list.child.emit('internalMessage', { key, cmd: 'NODE_SOCKET_NOTIFY_CLOSE' });
    list.child.emit('internalMessage', { key, cmd: 'NODE_SOCKET_GET_COUNT' });
  }
  
  // Verify that a "NODE_SOCKET_ALL_CLOSED" message will be sent.
  {
    const child = Object.assign(new EventEmitter(), {
      connected: true,
      _send: common.mustCall((msg) => {
        assert.strictEqual(msg.cmd, 'NODE_SOCKET_ALL_CLOSED');
        assert.strictEqual(msg.key, key);
      })
    });
  
    const list = new SocketListReceive(child, key);
    list.child.emit('internalMessage', { key, cmd: 'NODE_SOCKET_NOTIFY_CLOSE' });
  }
  
  // Verify that a "NODE_SOCKET_COUNT" message will be sent.
  {
    const child = Object.assign(new EventEmitter(), {
      connected: true,
      _send: common.mustCall((msg) => {
        assert.strictEqual(msg.cmd, 'NODE_SOCKET_COUNT');
        assert.strictEqual(msg.key, key);
        assert.strictEqual(msg.count, 0);
      })
    });
  
    const list = new SocketListReceive(child, key);
    list.child.emit('internalMessage', { key, cmd: 'NODE_SOCKET_GET_COUNT' });
  }
  
  // Verify that the connections count is added and an "empty" event
  // will be emitted when all sockets in obj were closed.
  {
    const child = new EventEmitter();
    const obj = { socket: new EventEmitter() };
  
    const list = new SocketListReceive(child, key);
    assert.strictEqual(list.connections, 0);
  
    list.add(obj);
    assert.strictEqual(list.connections, 1);
  
    list.on('empty', common.mustCall((self) => assert.strictEqual(self, list)));
  
    obj.socket.emit('close');
    assert.strictEqual(list.connections, 0);
  }
  