function HappyFakeCompiler(params) {
  assert(typeof params.id === 'string',
    "id must be assigned to a HappyFakeCompiler.");

  assert(typeof params.compilerId === 'string',
    "compilerId must be assigned to a HappyFakeCompiler.");

  assert(typeof params.send === 'function',
    "send implementation must be assigned to a HappyFakeCompiler.");

  this._id = 'FakeCompiler::' + params.id.toString() + '-' + params.compilerId.toString();
  this._compilerId = params.compilerId;
  this._sendMessageImpl = params.send;
  this._requests = {};
  this._messageId = 0;
  this.options = {};
  this.context = null;
  this.inputFileSystem = fs;
}
@param {String} params.id
@param {String} params.compilerId
@param {Function} params.send