@pie-lib/text-select
Version:
Some react components for text selection
141 lines (122 loc) • 4.21 kB
JSX
import { Tokenizer } from '../index';
import React from 'react';
import { shallow } from 'enzyme';
import { words, sentences, paragraphs } from '../builder';
const tokens = () => [
{
start: 0,
end: 1,
text: 'f',
},
];
const eff = () => tokens()[0];
jest.mock('../builder', () => ({
words: jest.fn().mockReturnValue([{ start: 0, end: 3, text: 'foo' }]),
sentences: jest.fn().mockReturnValue([{ start: 0, end: 3, text: 'foo' }]),
paragraphs: jest.fn().mockReturnValue([{ start: 0, end: 3, text: 'foo' }]),
}));
describe('tokenizer', () => {
describe('snapshot', () => {
it('renders', () => {
const w = shallow(<Tokenizer text="foo" classes={{}} onChange={jest.fn()} tokens={tokens()} />);
expect(w).toMatchSnapshot();
});
});
describe('logic', () => {
let w;
let onChange;
beforeEach(() => {
onChange = jest.fn();
w = shallow(<Tokenizer text="foo" classes={{}} onChange={onChange} tokens={tokens()} />);
});
describe('tokenIndex', () => {
it('returns 0', () => {
const index = w.instance().tokenIndex(eff());
expect(index).toEqual(0);
});
it('returns -1', () => {
const index = w.instance().tokenIndex({ start: 2, end: 3, text: 'f' });
expect(index).toEqual(-1);
});
});
describe('tokenClick', () => {
let i;
beforeEach(() => {
i = w.instance();
i.setCorrect = jest.fn();
i.removeToken = jest.fn();
});
it('calls removeToken if setCorrectMode == false', () => {
i.tokenClick(eff());
expect(i.setCorrect).not.toBeCalled();
expect(i.removeToken).toBeCalled();
});
it('calls setCorrect if setCorrectMode == true', () => {
i.setState({ setCorrectMode: true });
i.tokenClick(eff());
expect(i.setCorrect).toBeCalled();
expect(i.removeToken).not.toBeCalled();
});
});
describe('selectToken', () => {
it('calls onChange', () => {
w.instance().selectToken({ start: 1, end: 3, text: 'oo' }, [{ start: 0, end: 1, text: 'f' }]);
expect(onChange).toBeCalledWith([{ start: 1, end: 3, text: 'oo' }], '');
});
});
describe('buildParagraphsTokens', () => {
it('calls paragraphs', () => {
w.instance().buildTokens('paragraph', paragraphs);
expect(paragraphs).toBeCalledWith('foo');
});
});
describe('buildSentenceTokens', () => {
it('calls sentences', () => {
w.instance().buildTokens('sentence', sentences);
expect(sentences).toBeCalledWith('foo');
});
});
describe('buildWordTokens', () => {
it('calls words', () => {
w.instance().buildTokens('word', words);
expect(words).toBeCalledWith('foo');
});
});
describe('clear', () => {
it('calls onChange with an empty array', () => {
w.instance().clear();
expect(onChange).toBeCalledWith([], '');
});
});
describe('toggleCorrectMode', () => {
it('set state', () => {
w.setState({ setCorrectMode: true });
w.instance().toggleCorrectMode();
expect(w.state('setCorrectMode')).toEqual(false);
});
});
describe('setCorrect', () => {
it('calls onChange', () => {
w.instance().setCorrect({ start: 0, end: 1, text: 'f' });
expect(onChange).toBeCalledWith([{ start: 0, end: 1, text: 'f', correct: true }], '');
});
it('calls onChange w/ correct: false', () => {
w.setProps({
tokens: [{ start: 0, end: 1, text: 'f', correct: true }],
});
w.instance().setCorrect({ start: 0, end: 1, text: 'f' });
expect(onChange).toBeCalledWith([{ start: 0, end: 1, text: 'f', correct: false }], '');
});
});
describe('removeToken', () => {
it('calls onChange', () => {
w.instance().removeToken({ start: 0, end: 1, text: 'f' });
expect(onChange).toBeCalledWith([], '');
});
it('does not call onChange if it cant find the token', () => {
w.instance().removeToken({ start: 2, end: 3, text: 'a' });
expect(onChange).not.toBeCalled();
});
});
});
});