**Do you want to request a *feature* or report a *bug*?**
Feature

**What is the current behavior?**
The current synthetic keyboard event does not support the [`KeyboardEvent.code`](https://www.w3.org/TR/uievents/#dom-keyboardevent-code) property.

**What is the expected behavior?**
The synthetic keyboard event should pass along the [`KeyboardEvent.code`](https://www.w3.org/TR/uievents/#dom-keyboardevent-code) property. This is currently in the WD of DOM Events but is part of replacing `keyCode` and `charCode` and is much more consistent and easy to use. This is currently only supported by FF and Chrome ([CanIUse](https://caniuse.com/#feat=keyboardevent-code)) so it may be a bit premature to fully integrate. However `keyCode`, `charCode` and `which` are being deprecated so this will eventually need to be added.

Edit: I spoke too quickly, CanIUse shows that FF, Chrome, Safari and Opera support it. IE, Edge and most mobile browsers do not.

describe('EventInterface', () => {
    it('is able to `preventDefault` and `stopPropagation`', () => {
      let expectedCount = 0;
      const eventHandler = event => {
        expect(event.isDefaultPrevented()).toBe(false);
        event.preventDefault();
        expect(event.isDefaultPrevented()).toBe(true);
        expect(event.isPropagationStopped()).toBe(false);
        event.stopPropagation();
        expect(event.isPropagationStopped()).toBe(true);
        expectedCount++;
      };
      const div = ReactDOM.render(
        <div
          onKeyDown={eventHandler}
          onKeyUp={eventHandler}
          onKeyPress={eventHandler}
        />,
        container,
      );
      div.dispatchEvent(
        new KeyboardEvent('keydown', {
          keyCode: 40,
          bubbles: true,
          cancelable: true,
        }),
      );
      div.dispatchEvent(
        new KeyboardEvent('keyup', {
          keyCode: 40,