Skip to content

Commit ae1b199

Browse files
committed
test: first qt tests! for PasteUrlDialog
1 parent ecaa454 commit ae1b199

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

test/unit/qt/test_pasteurldialog.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
from PyQt5.QtCore import Qt
2+
from PyQt5.QtWidgets import (
3+
QApplication,
4+
QDialogButtonBox as BB,
5+
QMessageBox,
6+
)
7+
from pytestqt.qtbot import QtBot
8+
import pytest
9+
10+
from jenot.qt.pastewindow import (
11+
InvalidDataError,
12+
NoDataError,
13+
PasteUrlDialog,
14+
)
15+
16+
LMB = Qt.MouseButton.LeftButton
17+
18+
19+
def test_cancel(qtbot: QtBot) -> None:
20+
d = PasteUrlDialog(None)
21+
qtbot.addWidget(d)
22+
23+
assert isinstance(d.result_data.value, NoDataError)
24+
25+
qtbot.mouseClick(d.buttonBox.button(BB.StandardButton.Cancel), LMB)
26+
assert isinstance(d.result_data.value, NoDataError)
27+
28+
29+
@pytest.mark.parametrize('url', ['http://jenkins/job/somejob/1', 'http://jenkins/job/somejob/1/console', 'http://jenkins/job/somejob/1/consoleFull'])
30+
def test_accept_valid_url(qtbot: QtBot, url: str) -> None:
31+
# clear qt clipboard in case it contains something when pytest runs
32+
QApplication.clipboard().clear()
33+
d = PasteUrlDialog(None)
34+
qtbot.addWidget(d)
35+
36+
assert d.result_data.is_failure
37+
assert isinstance(d.result_data.value, NoDataError)
38+
39+
qtbot.keyClicks(d.textEdit, url)
40+
qtbot.mouseClick(d.buttonBox.button(BB.StandardButton.Ok), LMB)
41+
42+
assert d.result_data.is_success
43+
assert isinstance(d.result_data.value, str)
44+
assert d.result_data.unwrap() == url
45+
46+
47+
def test_accept_clipboard(qtbot: QtBot) -> None:
48+
url = 'http://jenkins/job/somejob/1'
49+
QApplication.clipboard().setText(url)
50+
d = PasteUrlDialog(None)
51+
qtbot.addWidget(d)
52+
53+
assert d.result_data.is_failure
54+
assert isinstance(d.result_data.value, NoDataError)
55+
56+
qtbot.mouseClick(d.buttonBox.button(BB.StandardButton.Ok), LMB)
57+
58+
assert d.result_data.is_success
59+
assert isinstance(d.result_data.value, str)
60+
assert d.result_data.unwrap() == url
61+
# without it test freezes at exit for some time and then says
62+
# QXcbClipboard: Unable to receive an event from the clipboard manager in a reasonable time
63+
QApplication.clipboard().clear()
64+
65+
66+
@pytest.mark.parametrize(
67+
'url', [
68+
'',
69+
'abrakadabra',
70+
pytest.param('http://jenkins/1\nhttp://jenkins/2', marks=pytest.mark.xfail(reason='no multiline support'))
71+
],
72+
)
73+
def test_invalid_data(qtbot: QtBot, url: str, monkeypatch: pytest.MonkeyPatch) -> None:
74+
QApplication.clipboard().setText(url)
75+
d = PasteUrlDialog(None)
76+
qtbot.addWidget(d)
77+
78+
assert d.result_data.is_failure
79+
assert isinstance(d.result_data.value, NoDataError)
80+
81+
monkeypatch.setattr(
82+
QMessageBox, 'warning', classmethod(lambda *a, **kw: None)
83+
)
84+
qtbot.mouseClick(d.buttonBox.button(BB.StandardButton.Ok), LMB)
85+
86+
assert d.result_data.is_failure
87+
assert isinstance(d.result_data.value, InvalidDataError)
88+
# see above
89+
QApplication.clipboard().clear()

0 commit comments

Comments
 (0)