-
Notifications
You must be signed in to change notification settings - Fork 10
/
test_qt_widgets.py
62 lines (45 loc) · 1.49 KB
/
test_qt_widgets.py
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
from PyQt6.QtWidgets import QWidget
import mobase_tests.qt_widgets as m
class PyWidget(QWidget):
def heightForWidth(self, a0: int) -> int:
return a0 * 3 + 4
class PyCustomWidget(m.CustomWidget):
def __init__(self, name: str):
super().__init__(name)
def heightForWidth(self, value: int) -> int:
return value * 6 - 5
def test_qt_widget():
# own cpp
w = m.make_widget_own_cpp("w1")
assert m.is_alive("w1")
assert m.is_owned_cpp("w1")
del w
assert m.is_alive("w1")
# own py
w = m.make_widget_own_py("w2")
assert m.is_alive("w2")
assert not m.is_owned_cpp("w2")
del w
assert not m.is_alive("w2")
# transfer to C++
w = PyWidget()
m.send_to_cpp("w3", w)
# delete the reference w - this should NOT delete the underlying object since it
# was transferred to C++
del w
assert m.is_alive("w3")
assert m.is_owned_cpp("w3")
# if the Python object is dead (BAD!), this will crash horrible
assert m.heightForWidth("w3", 4) == 4 * 3 + 4
# CustomWidget as a qholder, so the construction itself transfers the ownership
# to C++
w = PyCustomWidget("w4")
w.set_parent_cpp()
assert m.is_alive("w4")
assert m.heightForWidth("w4", 7) == 6 * 7 - 5
assert w.heightForWidth(7) == 6 * 7 - 5
# can call function not defined and not bound through the delegate
assert not w.hasHeightForWidth()
del w
assert m.is_alive("w4")
assert m.heightForWidth("w4", 7) == 6 * 7 - 5