Beispiel #1
0
async def test_listbox_page_up(root):
    data = [['001', 'Hugo', '*****@*****.**'], ['002', 'Paco', '*****@*****.**'],
            ['003', 'Luis', '*****@*****.**'], ['004', 'Juan', '*****@*****.**'],
            ['005', 'Nico', '*****@*****.**'], ['006', 'Luka', '*****@*****.**'],
            ['007', 'Mark', '*****@*****.**'], ['008', 'Paul', '*****@*****.**'],
            ['009', 'Mike', '*****@*****.**'], ['010', 'Fran', '*****@*****.**'],
            ['011', 'Karl', '*****@*****.**'], ['012', 'Marx', '*****@*****.**'],
            ['013', 'Anne', '*****@*****.**'], ['014', 'Luke', '*****@*****.**']]

    connect_called = False

    def mock_connect(self):
        nonlocal connect_called
        connect_called = True
        return self

    listbox = Listbox(root, data=data, limit=4, offset=8)
    listbox.connect = MethodType(mock_connect, listbox)

    assert listbox.offset == 8

    await listbox.dispatch(Event('Keyboard', 'keydown', key='A'))
    await listbox.dispatch(Event('Keyboard', 'keydown', key=chr(339)))
    assert listbox.offset == 4
    assert connect_called is True

    await listbox.dispatch(Event('Keyboard', 'keydown', key=chr(339)))
    assert listbox.offset == 0

    await listbox.dispatch(Event('Keyboard', 'keydown', key=chr(339)))
    assert listbox.offset == 0
Beispiel #2
0
async def test_listbox_orientation(root):
    data = ['first', 'second', 'third']

    listbox = Listbox(root, data=data).render()

    assert len(listbox.children) == 3
    assert (listbox.children[0]._y_min, listbox.children[0]._x_min) == (0, 0)
    assert (listbox.children[1]._y_min, listbox.children[1]._x_min) == (6, 0)
    assert (listbox.children[2]._y_min, listbox.children[2]._x_min) == (12, 0)

    listbox = Listbox(root, data=data, orientation='horizontal').render()

    assert len(listbox.children) == 3
    assert (listbox.children[0]._y_min, listbox.children[0]._x_min) == (0, 0)
    assert (listbox.children[1]._y_min, listbox.children[1]._x_min) == (0, 30)
    assert (listbox.children[2]._y_min, listbox.children[2]._x_min) == (0, 60)
Beispiel #3
0
def test_listbox_build(root):
    data = ['first', 'second', 'third']

    listbox = Listbox(root, data=data).render()

    assert len(listbox.children) == 3
    assert all(isinstance(item, Listitem) for item in listbox.children)
Beispiel #4
0
def test_frame_instantiation_defaults(root):
    listbox = Listbox(root)
    assert listbox.data == []
    assert listbox.template is None
    assert listbox.item_styling is not None
    assert listbox.field_template is None
    assert listbox.field_styling is not None
    assert listbox.limit is None
    assert listbox.offset is None
    assert listbox.orientation == 'vertical'
    assert listbox.mode == 'compact'
Beispiel #5
0
async def test_listbox_limit_and_offset(root):
    data = [
        'first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh',
        'eighth', 'ninth', 'tenth'
    ]

    listbox = Listbox(root, data=data, limit=3, offset=3).render()

    assert len(listbox.children) == 3
    assert listbox.children[0].content == 'fourth'
    assert listbox.children[1].content == 'fifth'
    assert listbox.children[2].content == 'sixth'
Beispiel #6
0
def test_listbox_template(root):
    data = ['first', 'second', 'third']

    class CustomTemplate(Widget):
        def setup(self, **context) -> 'CustomTemplate':
            item = context.pop('item', '')
            return super().setup(**context, content=f'-- {item} --') and self

    listbox = Listbox(root, data=data, template=CustomTemplate)

    assert len(listbox.children) == 3
    assert all(isinstance(item, CustomTemplate) for item in listbox.children)
Beispiel #7
0
async def test_listbox_focus_on_click(root):
    listbox = Listbox(root)
    focus_called = False

    def mock_focus(self):
        nonlocal focus_called
        focus_called = True
        return self

    listbox.focus = MethodType(mock_focus, listbox)

    event = Event('Mouse', 'click')

    await listbox.dispatch(event)
    assert focus_called is True

    event.target = Target()
    await listbox.on_click(event)
    await asyncio.sleep(0)

    await listbox.dispatch(event)
Beispiel #8
0
async def test_listbox_command(root):
    data = ['first', 'second', 'third']

    clicked_item = None

    async def on_click(event: Event) -> None:
        nonlocal clicked_item
        clicked_item = event.target

    listbox = Listbox(root, data=data, command=on_click).render()

    await listbox.children[2].dispatch(Event('Mouse', 'click', y=15, x=45))

    assert len(listbox.children) == 3
    assert clicked_item == listbox.children[2]
Beispiel #9
0
async def test_listbox_fields(root):
    data = [{
        'id': '001',
        'name': 'Hugo',
        'email': '*****@*****.**'
    }, {
        'id': '002',
        'name': 'Paco',
        'email': '*****@*****.**'
    }, {
        'id': '003',
        'name': 'Luis',
        'email': '*****@*****.**'
    }]

    listbox = Listbox(root, data=data, fields=['name', 'email']).render()

    assert len(listbox.children) == 3
    assert (listbox.children[0]._y_min, listbox.children[0]._x_min) == (0, 0)
    assert len(listbox.children[0].children) == 2
    assert (listbox.children[0].children[0]._y_min,
            listbox.children[0].children[0]._x_min) == (0, 0)
    assert (listbox.children[0].children[1]._y_min,
            listbox.children[0].children[1]._x_min) == (0, 45)

    assert (listbox.children[1]._y_min, listbox.children[1]._x_min) == (6, 0)
    assert len(listbox.children[1].children) == 2
    assert (listbox.children[1].children[0]._y_min,
            listbox.children[1].children[0]._x_min) == (6, 0)
    assert (listbox.children[1].children[1]._y_min,
            listbox.children[1].children[1]._x_min) == (6, 45)

    assert (listbox.children[2]._y_min, listbox.children[2]._x_min) == (12, 0)
    assert len(listbox.children[2].children) == 2
    assert (listbox.children[2].children[0]._y_min,
            listbox.children[2].children[0]._x_min) == (12, 0)
    assert (listbox.children[2].children[1]._y_min,
            listbox.children[2].children[1]._x_min) == (12, 45)

    class Dummy:
        def __init__(self, id: str, name: str, email: str) -> None:
            self.id = id
            self.name = name
            self.email = email

    data = [
        Dummy(id='001', name='Hugo', email='*****@*****.**'),
        Dummy(id='002', name='Paco', email='*****@*****.**'),
        Dummy(id='003', name='Luis', email='*****@*****.**')
    ]

    listbox = Listbox(root,
                      data=data,
                      fields=['name', 'email'],
                      orientation='horizontal').render()

    assert len(listbox.children) == 3
    assert (listbox.children[0]._y_min, listbox.children[0]._x_min) == (0, 0)
    assert len(listbox.children[0].children) == 2
    assert (listbox.children[0].children[0]._y_min,
            listbox.children[0].children[0]._x_min) == (0, 0)
    assert (listbox.children[0].children[1]._y_min,
            listbox.children[0].children[1]._x_min) == (9, 0)

    assert (listbox.children[1]._y_min, listbox.children[1]._x_min) == (0, 30)
    assert len(listbox.children[1].children) == 2
    assert (listbox.children[1].children[0]._y_min,
            listbox.children[1].children[0]._x_min) == (0, 30)
    assert (listbox.children[1].children[1]._y_min,
            listbox.children[1].children[1]._x_min) == (9, 30)

    assert (listbox.children[2]._y_min, listbox.children[2]._x_min) == (0, 60)
    assert len(listbox.children[2].children) == 2
    assert (listbox.children[2].children[0]._y_min,
            listbox.children[2].children[0]._x_min) == (0, 60)
    assert (listbox.children[2].children[1]._y_min,
            listbox.children[2].children[1]._x_min) == (9, 60)
Beispiel #10
0
async def test_listbox_fields_wrong_item_type(root):
    data = [['001', 'Hugo', '*****@*****.**'], ['002', 'Paco', '*****@*****.**'],
            ['003', 'Luis', '*****@*****.**']]

    with raises(ValueError):
        Listbox(root, data=data, fields=['name', 'email']).render()