UNPKG

@pie-lib/text-select

Version:

Some react components for text selection

141 lines (122 loc) 4.21 kB
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(); }); }); }); });