ant-design/tests/shared/focusTest.js
二货机器人 407a41a142
feat: New Picker (#20023)
* init generate

* basic style

* basic panel style

* update mode panel style

* update style

* generate More picker

* default clear icon

* chore: Update separator type

* feat: Add ranged start & end className

* update range style

* Add transition effect

* support size config

* adjust range style

* chore: Auto fill time by showTime

* auto set time by format

* update disabled style

* update seperator style

* ranges style

* support extra footer style

* remove useless test case
part is not usable anymore
part is already tested in rc-picker

* init calendar

* all demos

* fix calendar basic test

* fix time-picker test case

* update snapshot

* fix tooltip test case & lint

* fix locale & style lint

* fix compile

* fix style

* fix style lint

* fix calendar style

* update rc-picker version

* adjust style

* move picker placeholder into locale file

* update snapshot

* add hover style

* update picker version

* fix icon position & style

* update picker version

* update deps for pading

* fix: align of suffix

* feat: Year & Month support range effect

* adjust range style to support up-down placement

* update rc-picker

* update range picker style

* adjust extra footer line style

* update snapshot

* fix: Locale error

* fix: style lint

* fix: add missing button style deps

* update test case

* fix firefox additional white line style issue

* rollback demo

* fix ff additional blue color

* docs: Remove placeholder in demo

* rangepicker ranges is tag now

* connect start / end background color with picker range

* update deps

* update deps for fixing blur text issue

* hide start-end demo

* range hover style update

* hover range with ranged value

* black magic of inner hover style

* hover style of range adjust

* fix css select miss hit on DatePicker

* remove one eslint rule

* fade range hovered color

* week should alway not show the cell selection

* update style of selection

* update snapshot

* fix style

* add margin back

* update rc-picker deps

* update date & time picker & form style

* fix disabled demo & update form style

* update docs about allowEmpty

* hide arrow in time range picker

* add hover & focused style

* fix lint

* fix style & update snapshot

* raise disabled selector proirity

* fix disabled today border color

* extra footer provides an bottom line

* time picker hover support transition background

* add padding style

* fix Firefox not correct calculate inline-flex

* fix style

* fix week picker missing today border color

* rm useless padding

* Force padding to 0

* test coverage

* dedup eslint rule

* adjust logic to imporve coverage

* fix render cell logic
2019-12-11 23:32:19 +08:00

121 lines
3.1 KiB
JavaScript

import React from 'react';
import { mount } from 'enzyme';
import { spyElementPrototypes } from 'rc-util/lib/test/domHook';
// eslint-disable-next-line jest/no-export
export default function focusTest(Component, refFocus = false) {
describe('focus and blur', () => {
let domSpy;
let focused = false;
let blurred = false;
beforeAll(() => {
jest.useFakeTimers();
if (refFocus) {
domSpy = spyElementPrototypes(HTMLElement, {
focus() {
focused = true;
},
blur() {
blurred = true;
},
});
}
});
let container;
beforeEach(() => {
container = document.createElement('div');
document.body.appendChild(container);
focused = false;
blurred = false;
});
afterAll(() => {
if (domSpy) {
domSpy.mockRestore();
}
jest.useRealTimers();
});
afterEach(() => {
document.body.removeChild(container);
});
if (refFocus) {
it('Ref: focus() and onFocus', () => {
const onFocus = jest.fn();
const ref = React.createRef();
const wrapper = mount(
<div>
<Component onFocus={onFocus} ref={ref} />
</div>,
);
ref.current.focus();
expect(focused).toBeTruthy();
wrapper
.find('input')
.first()
.simulate('focus');
expect(onFocus).toHaveBeenCalled();
});
it('Ref: blur() and onBlur', () => {
const onBlur = jest.fn();
const ref = React.createRef();
const wrapper = mount(
<div>
<Component onBlur={onBlur} ref={ref} />
</div>,
);
ref.current.blur();
expect(blurred).toBeTruthy();
wrapper
.find('input')
.first()
.simulate('blur');
expect(onBlur).toHaveBeenCalled();
});
it('Ref: autoFocus', () => {
const onFocus = jest.fn();
const wrapper = mount(<Component autoFocus onFocus={onFocus} />);
expect(focused).toBeTruthy();
wrapper
.find('input')
.first()
.simulate('focus');
expect(onFocus).toHaveBeenCalled();
});
} else {
it('focus() and onFocus', () => {
const handleFocus = jest.fn();
const wrapper = mount(<Component onFocus={handleFocus} />, { attachTo: container });
wrapper.instance().focus();
expect(handleFocus).toHaveBeenCalled();
});
it('blur() and onBlur', () => {
const handleBlur = jest.fn();
const wrapper = mount(<Component onBlur={handleBlur} />, { attachTo: container });
wrapper.instance().focus();
jest.runAllTimers();
wrapper.instance().blur();
jest.runAllTimers();
expect(handleBlur).toHaveBeenCalled();
});
it('autoFocus', () => {
const handleFocus = jest.fn();
mount(<Component autoFocus onFocus={handleFocus} />, { attachTo: container });
jest.runAllTimers();
expect(handleFocus).toHaveBeenCalled();
});
}
});
}