mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-22 16:26:08 +08:00
134 lines
4.2 KiB
JavaScript
134 lines
4.2 KiB
JavaScript
import React from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
import ReactTestUtils from 'react-dom/test-utils';
|
|
|
|
import { renderIntoDocument } from '../../../spec/mailspring-test-utils';
|
|
import Contenteditable from '../../../src/components/contenteditable/contenteditable';
|
|
import EmojiComposerExtension from '../lib/emoji-composer-extension';
|
|
|
|
xdescribe('EmojiComposerExtension', function emojiComposerExtension() {
|
|
beforeEach(() => {
|
|
spyOn(EmojiComposerExtension, 'onContentChanged').andCallThrough();
|
|
spyOn(EmojiComposerExtension, '_onSelectEmoji').andCallThrough();
|
|
this.component = renderIntoDocument(
|
|
<Contenteditable
|
|
html={''}
|
|
onChange={jasmine.createSpy('onChange')}
|
|
extensions={[EmojiComposerExtension]}
|
|
/>
|
|
);
|
|
this.editableNode = ReactDOM.findDOMNode(this.component).querySelector('[contenteditable]');
|
|
});
|
|
|
|
describe('when emoji trigger is typed', () => {
|
|
beforeEach(() => {
|
|
this._performEdit = newHTML => {
|
|
this.editableNode.innerHTML = newHTML.substr(0, newHTML.length - 1);
|
|
const sel = document.getSelection();
|
|
const textNode = this.editableNode.childNodes[0];
|
|
sel.setBaseAndExtent(textNode, textNode.length, textNode, textNode.length);
|
|
};
|
|
});
|
|
|
|
it('should show the emoji picker', () => {
|
|
this._performEdit('Testing! :h');
|
|
waitsFor(() => {
|
|
return (
|
|
ReactTestUtils.scryRenderedDOMComponentsWithClass(this.component, 'emoji-picker').length >
|
|
0
|
|
);
|
|
});
|
|
});
|
|
|
|
it('should be focused on the first emoji in the list', () => {
|
|
this._performEdit('Testing! :h');
|
|
waitsFor(() => {
|
|
return (
|
|
ReactTestUtils.scryRenderedDOMComponentsWithClass(this.component, 'emoji-option').length >
|
|
0
|
|
);
|
|
});
|
|
runs(() => {
|
|
expect(
|
|
ReactDOM.findDOMNode(
|
|
ReactTestUtils.findRenderedDOMComponentWithClass(this.component, 'emoji-option')
|
|
).textContent.indexOf(':haircut:') !== -1
|
|
).toBe(true);
|
|
});
|
|
});
|
|
|
|
it('should insert an emoji on enter', () => {
|
|
this._performEdit('Testing! :h');
|
|
waitsFor(() => {
|
|
return (
|
|
ReactTestUtils.scryRenderedDOMComponentsWithClass(this.component, 'emoji-picker').length >
|
|
0
|
|
);
|
|
});
|
|
runs(() => {
|
|
ReactTestUtils.Simulate.keyDown(this.editableNode, {
|
|
key: 'Enter',
|
|
keyCode: 13,
|
|
which: 13,
|
|
});
|
|
});
|
|
waitsFor(() => {
|
|
return EmojiComposerExtension._onSelectEmoji.calls.length > 0;
|
|
});
|
|
runs(() => {
|
|
expect(this.editableNode.innerHTML).toContain('emoji haircut');
|
|
});
|
|
});
|
|
|
|
it('should insert an emoji on click', () => {
|
|
this._performEdit('Testing! :h');
|
|
waitsFor(() => {
|
|
return (
|
|
ReactTestUtils.scryRenderedDOMComponentsWithClass(this.component, 'emoji-picker').length >
|
|
0
|
|
);
|
|
});
|
|
runs(() => {
|
|
const button = ReactDOM.findDOMNode(
|
|
ReactTestUtils.findRenderedDOMComponentWithClass(this.component, 'emoji-option')
|
|
);
|
|
ReactTestUtils.Simulate.mouseDown(button);
|
|
expect(EmojiComposerExtension._onSelectEmoji).toHaveBeenCalled();
|
|
});
|
|
waitsFor(() => {
|
|
return EmojiComposerExtension._onSelectEmoji.calls.length > 0;
|
|
});
|
|
runs(() => {
|
|
expect(this.editableNode.innerHTML).toContain('emoji haircut');
|
|
});
|
|
});
|
|
|
|
it('should move to the next emoji on arrow down', () => {
|
|
this._performEdit('Testing! :h');
|
|
waitsFor(() => {
|
|
return (
|
|
ReactTestUtils.scryRenderedDOMComponentsWithClass(this.component, 'emoji-option').length >
|
|
0
|
|
);
|
|
});
|
|
runs(() => {
|
|
ReactTestUtils.Simulate.keyDown(this.editableNode, {
|
|
key: 'ArrowDown',
|
|
keyCode: 40,
|
|
which: 40,
|
|
});
|
|
});
|
|
waitsFor(() => {
|
|
return EmojiComposerExtension.onContentChanged.calls.length > 1;
|
|
});
|
|
runs(() => {
|
|
expect(
|
|
ReactDOM.findDOMNode(
|
|
ReactTestUtils.findRenderedDOMComponentWithClass(this.component, 'emoji-option')
|
|
).textContent.indexOf(':hamburger:') !== -1
|
|
).toBe(true);
|
|
});
|
|
});
|
|
});
|
|
});
|