from typing import Dict, List import pytest from nicegui import ui from nicegui.testing import Screen # pylint: disable=protected-access def test_codemirror(screen: Screen): ui.codemirror('Line 1\nLine 2\nLine 3') screen.open('/') screen.should_contain('Line 2') def test_supported_values(screen: Screen): values: Dict[str, List[str]] = {} @ui.page('/') def page(): editor = ui.codemirror() async def fetch(): values['languages'] = await editor.run_method('getLanguages') values['themes'] = await editor.run_method('getThemes') values['supported_themes'] = editor.supported_themes values['supported_languages'] = editor.supported_languages ui.label('Done') ui.button('Fetch', on_click=fetch) screen.open('/') screen.click('Fetch') screen.wait_for('Done') assert values['languages'] == values['supported_languages'] assert values['themes'] == values['supported_themes'] @pytest.mark.parametrize('doc, sections, inserted, expected', [ ('', [0, 1], [['A']], 'A'), ('', [0, 2], [['AB']], 'AB'), ('X', [1, 2], [['AB']], 'AB'), ('X', [1, -1], [], 'X'), ('X', [1, -1, 0, 1], [[], ['Y']], 'XY'), ('Hello', [5, -1, 0, 8], [[], [', world!']], 'Hello, world!'), ('Hello, world!', [5, -1, 7, 0, 1, -1], [], 'Hello!'), ('Hello, hello!', [2, -1, 3, 1, 4, -1, 3, 1, 1, -1], [[], ['y'], [], ['y']], 'Hey, hey!'), ('Hello, world!', [5, -1, 1, 3, 7, -1], [[], [' 🙂']], 'Hello 🙂 world!'), ('Hey! 🙂', [7, -1, 0, 4], [[], [' Ho!']], 'Hey! 🙂 Ho!'), ('Ha 🙂\nha 🙂', [3, -1, 2, 0, 4, -1, 2, 0], [[], [''], [], ['']], 'Ha \nha '), ]) def test_change_set(screen: Screen, doc: str, sections: List[int], inserted: List[List[str]], expected: str): editor = ui.codemirror(doc) screen.open('/') assert editor._apply_change_set(sections, inserted) == expected def test_encode_codepoints(): assert ui.codemirror._encode_codepoints('') == b'' assert ui.codemirror._encode_codepoints('Hello') == bytes([1, 1, 1, 1, 1]) assert ui.codemirror._encode_codepoints('🙂') == bytes([0, 1]) assert ui.codemirror._encode_codepoints('Hello 🙂') == bytes([1, 1, 1, 1, 1, 1, 0, 1]) assert ui.codemirror._encode_codepoints('😎😎😎') == bytes([0, 1, 0, 1, 0, 1])