From 516035423362981c3e4406f2ef0d62fce8469485 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Thu, 5 Dec 2019 00:40:37 +0100 Subject: [PATCH] add a regression test --- packages/material-ui/src/Tooltip/Tooltip.js | 10 +++++--- .../material-ui/src/Tooltip/Tooltip.test.js | 23 +++++++++++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/material-ui/src/Tooltip/Tooltip.js b/packages/material-ui/src/Tooltip/Tooltip.js index d643b7afd7ea85..1246561c576ddc 100644 --- a/packages/material-ui/src/Tooltip/Tooltip.js +++ b/packages/material-ui/src/Tooltip/Tooltip.js @@ -334,7 +334,7 @@ const Tooltip = React.forwardRef(function Tooltip(props, ref) { } const childrenProps = children.props; - if (childrenProps.onFocus) { + if (childrenProps.onFocus && event.currentTarget === childNode) { childrenProps.onFocus(event); } }; @@ -364,13 +364,17 @@ const Tooltip = React.forwardRef(function Tooltip(props, ref) { const childrenProps = children.props; if (event.type === 'blur') { - if (childrenProps.onBlur) { + if (childrenProps.onBlur && event.currentTarget === childNode) { childrenProps.onBlur(event); } handleBlur(event); } - if (event.type === 'mouseleave' && childrenProps.onMouseLeave) { + if ( + event.type === 'mouseleave' && + childrenProps.onMouseLeave && + event.currentTarget === childNode + ) { childrenProps.onMouseLeave(event); } diff --git a/packages/material-ui/src/Tooltip/Tooltip.test.js b/packages/material-ui/src/Tooltip/Tooltip.test.js index 870e1ac9d699ea..18a80a5d0fd96f 100644 --- a/packages/material-ui/src/Tooltip/Tooltip.test.js +++ b/packages/material-ui/src/Tooltip/Tooltip.test.js @@ -1,5 +1,5 @@ import React from 'react'; -import { assert } from 'chai'; +import { assert, expect } from 'chai'; import PropTypes from 'prop-types'; import { spy, useFakeTimers } from 'sinon'; import consoleErrorMock from 'test/utils/consoleErrorMock'; @@ -227,17 +227,17 @@ describe('', () => { ); const children = container.querySelector('#testChild'); focusVisible(children); - assert.strictEqual(document.body.querySelectorAll('[role="tooltip"]').length, 0); + expect(document.body.querySelectorAll('[role="tooltip"]').length).to.equal(0); clock.tick(111); - assert.strictEqual(document.body.querySelectorAll('[role="tooltip"]').length, 1); + expect(document.body.querySelectorAll('[role="tooltip"]').length).to.equal(1); document.activeElement.blur(); clock.tick(5); clock.tick(6); - assert.strictEqual(document.body.querySelectorAll('[role="tooltip"]').length, 0); + expect(document.body.querySelectorAll('[role="tooltip"]').length).to.equal(0); focusVisible(children); // Bypass `enterDelay` wait, instant display. - assert.strictEqual(document.body.querySelectorAll('[role="tooltip"]').length, 1); + expect(document.body.querySelectorAll('[role="tooltip"]').length).to.equal(1); }); it('should take the leaveDelay into account', () => { @@ -285,6 +285,19 @@ describe('', () => { assert.strictEqual(handler.callCount, 1); }); }); + + it('should ignore event from the tooltip', () => { + const handleMouseOver = spy(); + const { getByRole, container } = render( + + + , + ); + fireEvent.mouseOver(getByRole('tooltip')); + expect(handleMouseOver.callCount).to.equal(0); + }); }); describe('disabled button warning', () => {