File: test_tktooltip.py

package info (click to toggle)
python-tktooltip 3.1.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,172 kB
  • sloc: python: 416; makefile: 16
file content (93 lines) | stat: -rw-r--r-- 2,227 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import tkinter as tk
from typing import Callable

import pytest

from tktooltip import ToolTip, ToolTipStatus


@pytest.fixture()
def widget():
    widget = tk.Entry()
    widget.pack()
    widget.update()
    yield widget
    widget.destroy()


def test_tooltip(widget: tk.Widget):
    tooltip = ToolTip(
        widget,
        msg="Test Tooltip",
        delay=0.5,
        follow=False,
        refresh=0.5,
        x_offset=20,
        y_offset=20,
        parent_kwargs={"bg": "red", "padx": 2, "pady": 2},
        fg="white",
        bg="red",
        font=("Helvetica", 12),
    )

    assert tooltip.msg == "Test Tooltip"
    assert tooltip.delay == 0.5
    assert not tooltip.follow
    assert tooltip.refresh == 0.5
    assert tooltip.x_offset == 20
    assert tooltip.y_offset == 20


@pytest.mark.parametrize(
    "msg",
    [
        1,
        (["text 1", 2]),
    ],
)
def test_tooltip_exceptions(
    widget: tk.Widget,
    msg: str | list[str] | Callable[[], str | list[str]],
):
    with pytest.raises(TypeError):
        ToolTip(widget, msg=msg)  # type: ignore


def test_tooltip_follow(widget: tk.Widget):
    tooltip = ToolTip(widget, msg="Test", follow=False)
    widget.event_generate("<Enter>")
    assert not tooltip.follow


@pytest.mark.parametrize(
    "msg",
    [
        (lambda: "Callable Tooltip"),
        (lambda: ["Callable Tooltip 1", "Callable Tooltip 2"]),
        "text",
        (["text 1", "text 2"]),
    ],
)
def test_tooltip_show(
    widget: tk.Widget,
    msg: str | list[str] | Callable[[], str | list[str]],
):
    tooltip = ToolTip(widget, msg=msg)
    assert tooltip.status == ToolTipStatus.OUTSIDE
    widget.event_generate("<Enter>")
    assert tooltip.status == ToolTipStatus.INSIDE
    tooltip._show()
    assert tooltip.status == ToolTipStatus.VISIBLE
    widget.event_generate("<Leave>")
    assert tooltip.status == ToolTipStatus.OUTSIDE


def test_tooltip_destroy(widget: tk.Widget):
    tooltip = ToolTip(widget, msg="Test")
    widget.event_generate("<Enter>")
    assert tooltip.status == ToolTipStatus.INSIDE
    tooltip._show()
    assert tooltip.status == ToolTipStatus.VISIBLE
    tooltip.destroy()
    print(tooltip.bindigs)
    assert tooltip.bindigs == []