@digabi/exam-engine-core 22.0.5-alpha.0 → 22.0.5-editor-ee-to-em.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/EditableGradingInstruction.test.d.ts +2 -0
- package/dist/__tests__/EditableGradingInstruction.test.d.ts.map +1 -0
- package/dist/__tests__/EditableGradingInstruction.test.js +174 -0
- package/dist/__tests__/EditableGradingInstruction.test.js.map +1 -0
- package/dist/__tests__/FormatButton.test.d.ts +2 -0
- package/dist/__tests__/FormatButton.test.d.ts.map +1 -0
- package/dist/__tests__/FormatButton.test.js +94 -0
- package/dist/__tests__/FormatButton.test.js.map +1 -0
- package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
- package/dist/components/context/GradingInstructionContext.d.ts +6 -11
- package/dist/components/context/GradingInstructionContext.d.ts.map +1 -1
- package/dist/components/context/GradingInstructionContext.js.map +1 -1
- package/dist/components/grading-instructions/AnswerGradingInstruction.d.ts.map +1 -1
- package/dist/components/grading-instructions/AnswerGradingInstruction.js +4 -3
- package/dist/components/grading-instructions/AnswerGradingInstruction.js.map +1 -1
- package/dist/components/grading-instructions/GradingInstructionProvider.d.ts +1 -1
- package/dist/components/grading-instructions/GradingInstructionProvider.d.ts.map +1 -1
- package/dist/components/grading-instructions/GradingInstructionProvider.js +1 -4
- package/dist/components/grading-instructions/GradingInstructionProvider.js.map +1 -1
- package/dist/components/grading-instructions/GradingInstructions.d.ts +6 -2
- package/dist/components/grading-instructions/GradingInstructions.d.ts.map +1 -1
- package/dist/components/grading-instructions/GradingInstructions.js +2 -3
- package/dist/components/grading-instructions/GradingInstructions.js.map +1 -1
- package/dist/components/grading-instructions/editor/schemas/image-schema.d.ts +4 -0
- package/dist/components/grading-instructions/editor/schemas/image-schema.d.ts.map +1 -0
- package/dist/components/grading-instructions/editor/schemas/image-schema.js +47 -0
- package/dist/components/grading-instructions/editor/schemas/image-schema.js.map +1 -0
- package/dist/components/grading-instructions/localization.d.ts +3 -0
- package/dist/components/grading-instructions/localization.d.ts.map +1 -0
- package/dist/components/grading-instructions/localization.js +41 -0
- package/dist/components/grading-instructions/localization.js.map +1 -0
- package/dist/components/shared/Popup.js +2 -2
- package/dist/components/shared/Popup.js.map +1 -1
- package/dist/main-bundle.js +1 -1
- package/dist/main.css +1 -1
- package/package.json +2 -11
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            {"version":3,"file":"EditableGradingInstruction.test.d.ts","sourceRoot":"","sources":["../../__tests__/EditableGradingInstruction.test.tsx"],"names":[],"mappings":"AAIA,OAAO,2BAA2B,CAAA"}
         | 
| @@ -0,0 +1,174 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
            var __importDefault = (this && this.__importDefault) || function (mod) {
         | 
| 3 | 
            +
                return (mod && mod.__esModule) ? mod : { "default": mod };
         | 
| 4 | 
            +
            };
         | 
| 5 | 
            +
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 6 | 
            +
            const react_1 = require("@testing-library/react");
         | 
| 7 | 
            +
            const user_event_1 = __importDefault(require("@testing-library/user-event"));
         | 
| 8 | 
            +
            const renderEditableGradingInstruction_1 = require("./utils/renderEditableGradingInstruction");
         | 
| 9 | 
            +
            const util_1 = require("./utils/util");
         | 
| 10 | 
            +
            require("@testing-library/jest-dom");
         | 
| 11 | 
            +
            const act = react_1.act;
         | 
| 12 | 
            +
            describe('EditableGradingInstruction', () => {
         | 
| 13 | 
            +
                let cleanup;
         | 
| 14 | 
            +
                let onContentChangeMock;
         | 
| 15 | 
            +
                beforeEach(() => {
         | 
| 16 | 
            +
                    onContentChangeMock = jest.fn();
         | 
| 17 | 
            +
                });
         | 
| 18 | 
            +
                afterEach(() => {
         | 
| 19 | 
            +
                    if (cleanup) {
         | 
| 20 | 
            +
                        cleanup();
         | 
| 21 | 
            +
                    }
         | 
| 22 | 
            +
                    cleanup = null;
         | 
| 23 | 
            +
                });
         | 
| 24 | 
            +
                describe('table', () => {
         | 
| 25 | 
            +
                    it('Table is rendered as expected', () => {
         | 
| 26 | 
            +
                        const inputData = '<table class="e-table"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 27 | 
            +
                        const expectedOutput = '<table class="e-table"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 28 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData);
         | 
| 29 | 
            +
                        const table = result.container.querySelector('.ProseMirror');
         | 
| 30 | 
            +
                        expect(table.innerHTML).toBe(expectedOutput);
         | 
| 31 | 
            +
                    });
         | 
| 32 | 
            +
                    it('Change in table is returned as expected', async () => {
         | 
| 33 | 
            +
                        cleanup = mockCreateRange();
         | 
| 34 | 
            +
                        const inputData = '<table class="e-table"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 35 | 
            +
                        const expectedOutput = '<table class="e-table"><tbody><tr><td>bar</td></tr></tbody></table>';
         | 
| 36 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 37 | 
            +
                        await act(async () => {
         | 
| 38 | 
            +
                            (0, util_1.insertText)(await result.findByText('foo'), 'bar');
         | 
| 39 | 
            +
                        });
         | 
| 40 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledTimes(1);
         | 
| 41 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 42 | 
            +
                    });
         | 
| 43 | 
            +
                    it('Insert table adds expected table', async () => {
         | 
| 44 | 
            +
                        const inputData = '';
         | 
| 45 | 
            +
                        const expectedOutput = '<table class="e-table e-width-half"><tbody><tr><td></td><td></td></tr><tr><td></td><td></td></tr></tbody></table>';
         | 
| 46 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 47 | 
            +
                        await act(async () => {
         | 
| 48 | 
            +
                            await user_event_1.default.click(await result.findByTestId('editor-menu-add-table'));
         | 
| 49 | 
            +
                        });
         | 
| 50 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 51 | 
            +
                    });
         | 
| 52 | 
            +
                    it('Remove table removes table', async () => {
         | 
| 53 | 
            +
                        const inputData = '<table><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 54 | 
            +
                        const expectedOutput = '<p></p>';
         | 
| 55 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 56 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Poista taulukko');
         | 
| 57 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 58 | 
            +
                    });
         | 
| 59 | 
            +
                    it('Insert column adds column', async () => {
         | 
| 60 | 
            +
                        const inputData = '<table><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 61 | 
            +
                        const expectedOutput = '<table><tbody><tr><td>foo</td><td></td></tr></tbody></table>';
         | 
| 62 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 63 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Lisää sarake');
         | 
| 64 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 65 | 
            +
                    });
         | 
| 66 | 
            +
                    it('Remove column removes column', async () => {
         | 
| 67 | 
            +
                        const inputData = '<table><tbody><tr><td>foo</td><td>bar</td></tr></tbody></table>';
         | 
| 68 | 
            +
                        const expectedOutput = '<table><tbody><tr><td>bar</td></tr></tbody></table>';
         | 
| 69 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 70 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Poista sarake');
         | 
| 71 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 72 | 
            +
                    });
         | 
| 73 | 
            +
                    it('Insert row adds row', async () => {
         | 
| 74 | 
            +
                        const inputData = '<table><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 75 | 
            +
                        const expectedOutput = '<table><tbody><tr><td>foo</td></tr><tr><td></td></tr></tbody></table>';
         | 
| 76 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 77 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Lisää rivi');
         | 
| 78 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 79 | 
            +
                    });
         | 
| 80 | 
            +
                    it('Remove row removes row', async () => {
         | 
| 81 | 
            +
                        const inputData = '<table><tbody><tr><td>foo</td></tr><tr><td>bar</td></tr></tbody></table>';
         | 
| 82 | 
            +
                        const expectedOutput = '<table><tbody><tr><td>bar</td></tr></tbody></table>';
         | 
| 83 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 84 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Poista rivi');
         | 
| 85 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 86 | 
            +
                    });
         | 
| 87 | 
            +
                    it('Full width changes full width class to table', async () => {
         | 
| 88 | 
            +
                        const inputData = '<table class="e-width-half"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 89 | 
            +
                        const expectedOutput = '<table class="e-width-full"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 90 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 91 | 
            +
                        expect(result.queryByText('Puolikas leveys')).not.toBeInTheDocument();
         | 
| 92 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Täysi leveys');
         | 
| 93 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 94 | 
            +
                    });
         | 
| 95 | 
            +
                    it('Half width changes half width class to table', async () => {
         | 
| 96 | 
            +
                        const inputData = '<table class="e-width-full"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 97 | 
            +
                        const expectedOutput = '<table class="e-width-half"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 98 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 99 | 
            +
                        expect(result.queryByText('Täysi leveys')).not.toBeInTheDocument();
         | 
| 100 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Puolikas leveys');
         | 
| 101 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 102 | 
            +
                    });
         | 
| 103 | 
            +
                    it('Remove borders adds e-table--borderless class to table', async () => {
         | 
| 104 | 
            +
                        const inputData = '<table><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 105 | 
            +
                        const expectedOutput = '<table class="e-table--borderless"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 106 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 107 | 
            +
                        expect(result.queryByText('Lisää reunat')).not.toBeInTheDocument();
         | 
| 108 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Poista reunat');
         | 
| 109 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 110 | 
            +
                    });
         | 
| 111 | 
            +
                    it('Add borders removes e-table--borderless class from table', async () => {
         | 
| 112 | 
            +
                        const inputData = '<table class="e-table--borderless"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 113 | 
            +
                        const expectedOutput = '<table><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 114 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 115 | 
            +
                        expect(result.queryByText('Poista reunat')).not.toBeInTheDocument();
         | 
| 116 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Lisää reunat');
         | 
| 117 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 118 | 
            +
                    });
         | 
| 119 | 
            +
                    it('Remove zebra removes class from table', async () => {
         | 
| 120 | 
            +
                        const inputData = '<table class="e-table--zebra"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 121 | 
            +
                        const expectedOutput = '<table><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 122 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 123 | 
            +
                        expect(result.queryByText('Lisää raidat')).not.toBeInTheDocument();
         | 
| 124 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Poista raidat');
         | 
| 125 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 126 | 
            +
                    });
         | 
| 127 | 
            +
                    it('Add zebra adds e-table--zebra class to table', async () => {
         | 
| 128 | 
            +
                        const inputData = '<table><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 129 | 
            +
                        const expectedOutput = '<table class="e-table--zebra"><tbody><tr><td>foo</td></tr></tbody></table>';
         | 
| 130 | 
            +
                        const result = (0, renderEditableGradingInstruction_1.renderGradingInstruction)(inputData, onContentChangeMock);
         | 
| 131 | 
            +
                        expect(result.queryByText('Poista raidat')).not.toBeInTheDocument();
         | 
| 132 | 
            +
                        await clickTableMenuButtonWithFocusOnCell(result, 'foo', 'Lisää raidat');
         | 
| 133 | 
            +
                        expect(onContentChangeMock).toHaveBeenCalledWith(expectedOutput, '');
         | 
| 134 | 
            +
                    });
         | 
| 135 | 
            +
                });
         | 
| 136 | 
            +
            });
         | 
| 137 | 
            +
            async function clickTableMenuButtonWithFocusOnCell(result, cellText, buttonText) {
         | 
| 138 | 
            +
                await act(async () => {
         | 
| 139 | 
            +
                    await focusOnTablesCell(result, cellText);
         | 
| 140 | 
            +
                    await user_event_1.default.click(await result.findByText(buttonText));
         | 
| 141 | 
            +
                });
         | 
| 142 | 
            +
            }
         | 
| 143 | 
            +
            async function focusOnTablesCell(result, text) {
         | 
| 144 | 
            +
                // Replace cell's text with same text
         | 
| 145 | 
            +
                // Hack to get focus on cell without need to mock createRange
         | 
| 146 | 
            +
                (0, util_1.insertText)(await result.findByText(text), text);
         | 
| 147 | 
            +
            }
         | 
| 148 | 
            +
            function mockCreateRange() {
         | 
| 149 | 
            +
                const originalCreateRange = global.window.document.createRange;
         | 
| 150 | 
            +
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
         | 
| 151 | 
            +
                // @ts-expect-error
         | 
| 152 | 
            +
                global.Range = function Range() { };
         | 
| 153 | 
            +
                const createContextualFragment = (html) => {
         | 
| 154 | 
            +
                    const div = document.createElement('div');
         | 
| 155 | 
            +
                    div.innerHTML = html;
         | 
| 156 | 
            +
                    return div.children[0];
         | 
| 157 | 
            +
                };
         | 
| 158 | 
            +
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
         | 
| 159 | 
            +
                // @ts-expect-error
         | 
| 160 | 
            +
                Range.prototype.createContextualFragment = (html) => createContextualFragment(html);
         | 
| 161 | 
            +
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
         | 
| 162 | 
            +
                // @ts-expect-error
         | 
| 163 | 
            +
                global.window.document.createRange = function createRange() {
         | 
| 164 | 
            +
                    return {
         | 
| 165 | 
            +
                        setEnd: () => { },
         | 
| 166 | 
            +
                        setStart: () => { },
         | 
| 167 | 
            +
                        getBoundingClientRect: () => ({ right: 0 }),
         | 
| 168 | 
            +
                        getClientRects: () => [],
         | 
| 169 | 
            +
                        createContextualFragment
         | 
| 170 | 
            +
                    };
         | 
| 171 | 
            +
                };
         | 
| 172 | 
            +
                return () => (global.window.document.createRange = originalCreateRange);
         | 
| 173 | 
            +
            }
         | 
| 174 | 
            +
            //# sourceMappingURL=EditableGradingInstruction.test.js.map
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            {"version":3,"file":"EditableGradingInstruction.test.js","sourceRoot":"","sources":["../../__tests__/EditableGradingInstruction.test.tsx"],"names":[],"mappings":"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"}
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            {"version":3,"file":"FormatButton.test.d.ts","sourceRoot":"","sources":["../../__tests__/FormatButton.test.tsx"],"names":[],"mappings":"AACA,OAAO,2BAA2B,CAAA"}
         | 
| @@ -0,0 +1,94 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
            var __importDefault = (this && this.__importDefault) || function (mod) {
         | 
| 3 | 
            +
                return (mod && mod.__esModule) ? mod : { "default": mod };
         | 
| 4 | 
            +
            };
         | 
| 5 | 
            +
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 6 | 
            +
            const react_1 = __importDefault(require("react"));
         | 
| 7 | 
            +
            require("@testing-library/jest-dom");
         | 
| 8 | 
            +
            const react_2 = require("@testing-library/react");
         | 
| 9 | 
            +
            const ProseMirrorWrapper_1 = __importDefault(require("./utils/ProseMirrorWrapper"));
         | 
| 10 | 
            +
            const prosemirror_1 = require("./utils/prosemirror");
         | 
| 11 | 
            +
            const FormatButton_1 = __importDefault(require("../src/components/grading-instructions/editor/FormatButton"));
         | 
| 12 | 
            +
            const user_event_1 = __importDefault(require("@testing-library/user-event"));
         | 
| 13 | 
            +
            const act = react_2.act;
         | 
| 14 | 
            +
            describe('FormatButton', () => {
         | 
| 15 | 
            +
                beforeAll(() => {
         | 
| 16 | 
            +
                    (0, prosemirror_1.mockCreateRange)();
         | 
| 17 | 
            +
                });
         | 
| 18 | 
            +
                afterEach(() => {
         | 
| 19 | 
            +
                    (0, react_2.cleanup)();
         | 
| 20 | 
            +
                });
         | 
| 21 | 
            +
                describe('Italics', () => {
         | 
| 22 | 
            +
                    it('Renders italics button', () => {
         | 
| 23 | 
            +
                        const props = { markName: 'em', displayName: 'Italic' };
         | 
| 24 | 
            +
                        const { button } = renderEditorWithFormatButton(props);
         | 
| 25 | 
            +
                        expect(button).toHaveTextContent(props.displayName);
         | 
| 26 | 
            +
                    });
         | 
| 27 | 
            +
                    it('Toggles button active state when clicked', async () => {
         | 
| 28 | 
            +
                        const props = { markName: 'em', displayName: 'Italic' };
         | 
| 29 | 
            +
                        const { button } = renderEditorWithFormatButton(props);
         | 
| 30 | 
            +
                        expect(button).toHaveStyle('font-weight: normal');
         | 
| 31 | 
            +
                        await user_event_1.default.click(button);
         | 
| 32 | 
            +
                        expect(button).toHaveStyle('font-weight: bold');
         | 
| 33 | 
            +
                        await user_event_1.default.click(button);
         | 
| 34 | 
            +
                        expect(button).toHaveStyle('font-weight: normal');
         | 
| 35 | 
            +
                    });
         | 
| 36 | 
            +
                    it('formats text', async () => {
         | 
| 37 | 
            +
                        const props = { markName: 'em', displayName: 'Italic' };
         | 
| 38 | 
            +
                        const { button, paragraph } = renderEditorWithFormatButton(props);
         | 
| 39 | 
            +
                        await user_event_1.default.click(button);
         | 
| 40 | 
            +
                        await act(async () => await (0, prosemirror_1.promisifiedFireEventInput)(paragraph, { target: { innerHTML: 'hello' } }));
         | 
| 41 | 
            +
                        expect((0, react_2.within)(paragraph).getByRole('emphasis')).toHaveTextContent('hello');
         | 
| 42 | 
            +
                    });
         | 
| 43 | 
            +
                    it('em tags are rendered as italic', () => {
         | 
| 44 | 
            +
                        const props = { markName: 'em', displayName: 'Italic', innerHtml: '<em>Italic text</em>' };
         | 
| 45 | 
            +
                        const { paragraph } = renderEditorWithFormatButton(props);
         | 
| 46 | 
            +
                        expect((0, react_2.within)(paragraph).getByRole('emphasis')).toHaveTextContent('Italic text');
         | 
| 47 | 
            +
                    });
         | 
| 48 | 
            +
                    it('i tags are rendered as italic', () => {
         | 
| 49 | 
            +
                        const props = { markName: 'em', displayName: 'Italic', innerHtml: '<i>Italic text</i>' };
         | 
| 50 | 
            +
                        const { paragraph } = renderEditorWithFormatButton(props);
         | 
| 51 | 
            +
                        expect((0, react_2.within)(paragraph).getByRole('emphasis')).toHaveTextContent('Italic text');
         | 
| 52 | 
            +
                    });
         | 
| 53 | 
            +
                });
         | 
| 54 | 
            +
                describe('Bold', () => {
         | 
| 55 | 
            +
                    it('Renders bold button', () => {
         | 
| 56 | 
            +
                        const props = { markName: 'strong', displayName: 'Bold' };
         | 
| 57 | 
            +
                        const { button } = renderEditorWithFormatButton(props);
         | 
| 58 | 
            +
                        expect(button).toHaveTextContent(props.displayName);
         | 
| 59 | 
            +
                    });
         | 
| 60 | 
            +
                    it('Toggles button active state when clicked', async () => {
         | 
| 61 | 
            +
                        const props = { markName: 'strong', displayName: 'Bold' };
         | 
| 62 | 
            +
                        const { button } = renderEditorWithFormatButton(props);
         | 
| 63 | 
            +
                        expect(button).toHaveStyle('font-weight: normal');
         | 
| 64 | 
            +
                        await user_event_1.default.click(button);
         | 
| 65 | 
            +
                        expect(button).toHaveStyle('font-weight: bold');
         | 
| 66 | 
            +
                        await user_event_1.default.click(button);
         | 
| 67 | 
            +
                        expect(button).toHaveStyle('font-weight: normal');
         | 
| 68 | 
            +
                    });
         | 
| 69 | 
            +
                    it('formats text', async () => {
         | 
| 70 | 
            +
                        const props = { markName: 'strong', displayName: 'Bold' };
         | 
| 71 | 
            +
                        const { button, paragraph } = renderEditorWithFormatButton(props);
         | 
| 72 | 
            +
                        await user_event_1.default.click(button);
         | 
| 73 | 
            +
                        await act(async () => await (0, prosemirror_1.promisifiedFireEventInput)(paragraph, { target: { innerHTML: 'hello' } }));
         | 
| 74 | 
            +
                        expect((0, react_2.within)(paragraph).getByRole('strong')).toHaveTextContent('hello');
         | 
| 75 | 
            +
                    });
         | 
| 76 | 
            +
                    it('b tags are rendered as bold', () => {
         | 
| 77 | 
            +
                        const props = { markName: 'strong', displayName: 'bold', innerHtml: '<b>Bold text</b>' };
         | 
| 78 | 
            +
                        const { paragraph } = renderEditorWithFormatButton(props);
         | 
| 79 | 
            +
                        expect((0, react_2.within)(paragraph).getByRole('strong')).toHaveTextContent('Bold text');
         | 
| 80 | 
            +
                    });
         | 
| 81 | 
            +
                    it('strong tags are rendered as bold', () => {
         | 
| 82 | 
            +
                        const props = { markName: 'strong', displayName: 'bold', innerHtml: '<strong>Bold text</strong>' };
         | 
| 83 | 
            +
                        const { paragraph } = renderEditorWithFormatButton(props);
         | 
| 84 | 
            +
                        expect((0, react_2.within)(paragraph).getByRole('strong')).toHaveTextContent('Bold text');
         | 
| 85 | 
            +
                    });
         | 
| 86 | 
            +
                });
         | 
| 87 | 
            +
                function renderEditorWithFormatButton(props) {
         | 
| 88 | 
            +
                    const { markName, displayName, innerHtml = '' } = props;
         | 
| 89 | 
            +
                    const { getByRole } = (0, react_2.render)(react_1.default.createElement(ProseMirrorWrapper_1.default, { innerHtml: innerHtml },
         | 
| 90 | 
            +
                        react_1.default.createElement(FormatButton_1.default, { markName: markName, displayName: displayName })));
         | 
| 91 | 
            +
                    return { button: getByRole('button'), paragraph: getByRole('paragraph') };
         | 
| 92 | 
            +
                }
         | 
| 93 | 
            +
            });
         | 
| 94 | 
            +
            //# sourceMappingURL=FormatButton.test.js.map
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            {"version":3,"file":"FormatButton.test.js","sourceRoot":"","sources":["../../__tests__/FormatButton.test.tsx"],"names":[],"mappings":"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"}
         |