HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/anaconda3/Lib/site-packages/panel/tests/ui/widgets/test_codeeditor.py
import sys

import pytest

pytest.importorskip("playwright")

from playwright.sync_api import expect

from panel.tests.util import serve_component, wait_until
from panel.widgets import CodeEditor

pytestmark = pytest.mark.ui


def test_code_editor_on_keyup(page):

    editor = CodeEditor(value="print('Hello World!')", on_keyup=True)
    serve_component(page, editor)
    ace_input = page.locator(".ace_content")
    expect(ace_input).to_have_count(1)
    ace_input.click()

    page.keyboard.press("Enter")
    page.keyboard.type('print("Hello Panel!")')

    expect(page.locator(".ace_content")).to_have_text("print('Hello World!')\nprint(\"Hello Panel!\")", use_inner_text=True)
    wait_until(lambda: editor.value_input == "print('Hello World!')\nprint(\"Hello Panel!\")", page)
    assert editor.value == "print('Hello World!')\nprint(\"Hello Panel!\")"

    # clear the editor
    editor.value = ""
    expect(page.locator(".ace_content")).to_have_text("", use_inner_text=True)
    assert editor.value == ""
    assert editor.value_input == ""

    # enter Hello UI
    ace_input.click()
    page.keyboard.type('print("Hello UI!")')
    expect(page.locator(".ace_content")).to_have_text("print(\"Hello UI!\")", use_inner_text=True)

    wait_until(lambda: editor.value == "print(\"Hello UI!\")", page)


def test_code_editor_not_on_keyup(page):

    editor = CodeEditor(value="print('Hello World!')", on_keyup=False)
    serve_component(page, editor)
    ace_input = page.locator(".ace_content")
    expect(ace_input).to_have_count(1)
    ace_input.click()

    page.keyboard.press("Enter")
    page.keyboard.type('print("Hello Panel!")')

    expect(page.locator(".ace_content")).to_have_text("print('Hello World!')\nprint(\"Hello Panel!\")", use_inner_text=True)
    wait_until(lambda: editor.value_input == "print('Hello World!')\nprint(\"Hello Panel!\")")
    assert editor.value == "print('Hello World!')"

    # page click outside the editor; sync the value
    page.locator("body").click()
    assert editor.value_input == "print('Hello World!')\nprint(\"Hello Panel!\")"
    wait_until(lambda: editor.value == "print('Hello World!')\nprint(\"Hello Panel!\")")

    # clear the editor
    editor.value = ""
    expect(page.locator(".ace_content")).to_have_text("", use_inner_text=True)
    assert editor.value == ""
    assert editor.value_input == ""

    # enter Hello UI
    ace_input.click()
    page.keyboard.type('print("Hello UI!")')
    expect(page.locator(".ace_content")).to_have_text("print(\"Hello UI!\")", use_inner_text=True)
    assert editor.value == ""

    ctrl_key = 'Meta' if sys.platform == 'darwin' else 'Control'
    page.keyboard.down(ctrl_key)
    page.keyboard.press("Enter")
    page.keyboard.up(ctrl_key)

    wait_until(lambda: editor.value == "print(\"Hello UI!\")", page)