old_contents: var deepExtend = require('./utils/deepExtend');
  var each = require('./utils/each');
  
  module.exports = {
    'extendEvent': extendEvent,
    'extendEvents': extendEvents,
    'getExtendedEventBody': getExtendedEventBody
  };
  
  function extendEvent(eventCollection, eventModifier){
    if (arguments.length !== 2 || typeof eventCollection !== 'string'
      || ('object' !== typeof eventModifier && 'function' !== typeof eventModifier)) {
        handleValidationError.call(this, 'Incorrect arguments provided to #extendEvent method');
        return;
    }
    this.extensions.collections[eventCollection] = this.extensions.collections[eventCollection] || [];
    this.extensions.collections[eventCollection].push(eventModifier);
    this.emit('extendEvent', eventCollection, eventModifier);
    return this;
  }
  
  function extendEvents(eventsModifier){
    if (arguments.length !== 1 || ('object' !== typeof eventsModifier && 'function' !== typeof eventsModifier)) {
      handleValidationError.call(this, 'Incorrect arguments provided to #extendEvents method');
      return;
    }
    this.extensions.events.push(eventsModifier);
    this.emit('extendEvents', eventsModifier);
    return this;
  }
  
  function handleValidationError(message){
    var err = 'Event(s) not extended: ' + message;
    this.emit('error', err);
  }
  
  function getExtendedEventBody(result, queue){
    if (queue && queue.length > 0) {
      each(queue, function(eventModifier, i){
        var modifierResult = (typeof eventModifier === 'function') ? eventModifier() : eventModifier;
        modifierResult.aaaa = function(){ return 123; };
        deepExtend(result, modifierResult);
      });
    }
    return result;
  }
  
new_contents: var deepExtend = require('./utils/deepExtend');
  var each = require('./utils/each');
  
  module.exports = {
    'extendEvent': extendEvent,
    'extendEvents': extendEvents,
    'getExtendedEventBody': getExtendedEventBody
  };
  
  function extendEvent(eventCollection, eventModifier){
    if (arguments.length !== 2 || typeof eventCollection !== 'string'
      || ('object' !== typeof eventModifier && 'function' !== typeof eventModifier)) {
        handleValidationError.call(this, 'Incorrect arguments provided to #extendEvent method');
        return;
    }
    this.extensions.collections[eventCollection] = this.extensions.collections[eventCollection] || [];
    this.extensions.collections[eventCollection].push(eventModifier);
    this.emit('extendEvent', eventCollection, eventModifier);
    return this;
  }
  
  function extendEvents(eventsModifier){
    if (arguments.length !== 1 || ('object' !== typeof eventsModifier && 'function' !== typeof eventsModifier)) {
      handleValidationError.call(this, 'Incorrect arguments provided to #extendEvents method');
      return;
    }
    this.extensions.events.push(eventsModifier);
    this.emit('extendEvents', eventsModifier);
    return this;
  }
  
  function handleValidationError(message){
    var err = 'Event(s) not extended: ' + message;
    this.emit('error', err);
  }
  
  function getExtendedEventBody(result, queue){
    if (queue && queue.length > 0) {
      each(queue, function(eventModifier, i){
        var modifierResult = (typeof eventModifier === 'function') ? eventModifier() : eventModifier;
        deepExtend(result, modifierResult);
      });
    }
    return result;
  }
  
subject: remove mock test function from target object