Skip to content

Commit

Permalink
[enzyme-adapter-utils] [new] mapNativeEventNames, propFromEvent: …
Browse files Browse the repository at this point in the history
…add support for pointer events
  • Loading branch information
ljharb committed Jul 21, 2018
1 parent 9b06f58 commit 9afb37f
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 7 deletions.
17 changes: 15 additions & 2 deletions packages/enzyme-adapter-utils/src/Utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export { createMountWrapper, createRenderWrapper };

export function mapNativeEventNames(event, {
animation = false, // should be true for React 15+
pointerEvents = false, // should be true for React 16.4+
} = {}) {
const nativeToReactEventMap = {
compositionend: 'compositionEnd',
Expand Down Expand Up @@ -50,15 +51,27 @@ export function mapNativeEventNames(event, {
animationiteration: 'animationIteration',
animationend: 'animationEnd',
}),
...(pointerEvents && {
pointerdown: 'pointerDown',
pointermove: 'pointerMove',
pointerup: 'pointerUp',
pointercancel: 'pointerCancel',
gotpointercapture: 'gotPointerCapture',
lostpointercapture: 'lostPointerCapture',
pointerenter: 'pointerEnter',
pointerleave: 'pointerLeave',
pointerover: 'pointerOver',
pointerout: 'pointerOut',
}),
};

return nativeToReactEventMap[event] || event;
}

// 'click' => 'onClick'
// 'mouseEnter' => 'onMouseEnter'
export function propFromEvent(event) {
const nativeEvent = mapNativeEventNames(event);
export function propFromEvent(event, eventOptions = {}) {
const nativeEvent = mapNativeEventNames(event, eventOptions);
return `on${nativeEvent[0].toUpperCase()}${nativeEvent.slice(1)}`;
}

Expand Down
30 changes: 25 additions & 5 deletions packages/enzyme-test-suite/test/Utils-spec.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -441,11 +441,26 @@ describe('Utils', () => {
});

describe('propFromEvent', () => {
const fn = propFromEvent;

it('should work', () => {
expect(fn('click')).to.equal('onClick');
expect(fn('mouseEnter')).to.equal('onMouseEnter');
expect(propFromEvent('click')).to.equal('onClick');
expect(propFromEvent('mouseEnter')).to.equal('onMouseEnter');
});

describe('conditionally supported events', () => {
it('ignores unsupported events', () => {
const result = propFromEvent('animationIteration');
expect(result).to.equal('onAnimationIteration');
});

it('transforms animation events when supported', () => {
const result = propFromEvent('animationIteration', { animation: true });
expect(result).to.equal('onAnimationIteration');
});

it('transforms pointer events when supported', () => {
const result = propFromEvent('pointerOver', { pointerEvents: true });
expect(result).to.equal('onPointerOver');
});
});
});

Expand Down Expand Up @@ -478,10 +493,15 @@ describe('Utils', () => {
expect(result).to.equal('animationiteration');
});

it('transforms events when supported', () => {
it('transforms animation events when supported', () => {
const result = mapNativeEventNames('animationiteration', { animation: true });
expect(result).to.equal('animationIteration');
});

it('transforms pointer events when supported', () => {
const result = mapNativeEventNames('pointerover', { pointerEvents: true });
expect(result).to.equal('pointerOver');
});
});
});

Expand Down

0 comments on commit 9afb37f

Please sign in to comment.