import React from 'react'; import { screen, render } from '@testing-library/react'; import { EditorState, ContentState } from 'draft-js'; import { PluginFunctions } from '@draft-js-plugins/editor'; import createCounterPlugin from '../../index'; jest.mock('linaria'); describe('CounterPlugin Line Counter', () => { const createEditorStateFromText = (text: string): EditorState => { const contentState = ContentState.createFromText(text); return EditorState.createWithContent(contentState); }; it('instantiates plugin with word counter and counts 5 words', () => { const counterPlugin = createCounterPlugin(); const text = 'Hello there, how are you?'; const editorState = createEditorStateFromText(text); counterPlugin.initialize!({ getEditorState: () => editorState, } as PluginFunctions); const { CustomCounter } = counterPlugin; // a function that takes a string and returns the number of words const countFunction = (str: string): number => { const wordArray = str.match(/\S+/g); // matches words according to whitespace return wordArray ? wordArray.length : 0; }; render(); expect(screen.getByText('5')).toBeInTheDocument(); }); it('instantiates plugin with number counter and counts 6 number characters', () => { const counterPlugin = createCounterPlugin(); const text = 'I am a 1337 h4x0r'; const editorState = createEditorStateFromText(text); counterPlugin.initialize!({ getEditorState: () => editorState, } as PluginFunctions); const { CustomCounter } = counterPlugin; // a function that takes a string and returns the number of number characters const countFunction = (str: string): number => { const numArray = str.match(/\d/g); // matches only number characters return numArray ? numArray.length : 0; }; render(); expect(screen.getByText('6')).toBeInTheDocument(); }); });