docs: function makeSimulator(eventType) {
    return function (domComponentOrNode, eventData) {
      var node;
      !!React.isValidElement(domComponentOrNode) ? "development" !== 'production' ? invariant(false, 'TestUtils.Simulate expects a component instance and not a ReactElement.TestUtils.Simulate will not work if you are using shallow rendering.') : _prodInvariant('14') : void 0;
      if (ReactTestUtils.isDOMComponent(domComponentOrNode)) {
        node = findDOMNode(domComponentOrNode);
      } else if (domComponentOrNode.tagName) {
        node = domComponentOrNode;
      }
  
      var dispatchConfig = EventPluginRegistry.eventNameDispatchConfigs[eventType];
  
      var fakeNativeEvent = new Event();
      fakeNativeEvent.target = node;
      fakeNativeEvent.type = eventType.toLowerCase();
  
      // We don't use SyntheticEvent.getPooled in order to not have to worry about
      // properly destroying any properties assigned from `eventData` upon release
      var event = new SyntheticEvent(dispatchConfig, ReactDOMComponentTree.getInstanceFromNode(node), fakeNativeEvent, node);
      // Since we aren't using pooling, always persist the event. This will make
      // sure it's marked and won't warn when setting additional properties.
      event.persist();
      _assign(event, eventData);
  
      if (dispatchConfig.phasedRegistrationNames) {
        EventPropagators.accumulateTwoPhaseDispatches(event);
      } else {
        EventPropagators.accumulateDirectDispatches(event);
      }
  
      ReactUpdates.batchedUpdates(function () {
        EventPluginHub.enqueueEvents(event);
        EventPluginHub.processEventQueue(true);
      });
    };
  }