diff --git a/soitool/main.py b/soitool/main.py deleted file mode 100644 index 94daab90f293ea5cacd4b379de9638dc2b27bdfb..0000000000000000000000000000000000000000 --- a/soitool/main.py +++ /dev/null @@ -1,63 +0,0 @@ -"""Applikasjon basert på popups. - -Bare her for å ha noe å teste mens vi setter opp repo. - -""" - -import sys - -from PySide2 import QtWidgets - - -class CoolWidget(QtWidgets.QWidget): - """Enkel widget for å ha noe å teste. - - Placeholderbeskrivelse. - - """ - - def __init__(self, text, *args, **kwargs): - super(CoolWidget, self).__init__(*args, **kwargs) - - # settings this to None is only useful for one of the testing methods - # described in test_main.py - self.dlg_input = None - - # only here to conform to pylint. see above comment - self.dlg_msg = None - - layout = QtWidgets.QHBoxLayout() - self.qlabel = QtWidgets.QLabel(text) - self.button = QtWidgets.QPushButton("Change text") - self.button.clicked.connect(self.clickfunc) - layout.addWidget(self.qlabel) - layout.addWidget(self.button) - self.setLayout(layout) - - def clickfunc(self): - """Pop-up for å endre tekst. Koblet til knapp.""" - # try-finally to set dialog to None is only useful for one of the - # testing methods described in test_main.py - try: - self.dlg_input = QtWidgets.QInputDialog(self) - text, ok = self.dlg_input.getText( - self, - "Change text", - "Please type something", - QtWidgets.QLineEdit.Normal, - ) - if ok: - self.qlabel.setText(text) - else: - self.dlg_msg = QtWidgets.QMessageBox() - self.dlg_msg.setText("Operation cancelled") - self.dlg_msg.exec_() - finally: - self.dlg_input = None - - -if __name__ == "__main__": - app = QtWidgets.QApplication(sys.argv) - WIDGET = CoolWidget("Custom text") - WIDGET.show() - app.exec_() diff --git a/test/test_main.py b/test/test_main.py deleted file mode 100644 index 3b116e47582079a8925993f2f5595a87f5b72448..0000000000000000000000000000000000000000 --- a/test/test_main.py +++ /dev/null @@ -1,106 +0,0 @@ -"""Test CoolWidget.""" - -import unittest -from datetime import datetime as datetime_, timedelta -from PySide2 import QtWidgets, QtTest, QtCore, QtGui -from soitool import main - -# references: -# * findChild: https://srinikom.github.io/pyside-docs/PySide/QtCore/QObject.html#PySide.QtCore.PySide.QtCore.QObject.findChild -# * pyside: https://doc.qt.io/qtforpython/PySide2/QtCore/QObject.html#PySide2.QtCore.PySide2.QtCore.QObject.findChild -# * allows to find child of widget based on type (and name) -# * findChild in action (C++): https://code.woboq.org/qt5/qtbase/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp.html -# * look for QInputDialog and QLineEdit -# * thread discussing singleShot: https://github.com/pytest-dev/pytest-qt/issues/256 -# * activeModalWidget: https://stackoverflow.com/questions/38596785/how-can-i-get-access-to-a-qmessagebox-by-qtest -# * testing modal dialogs: https://www.qtcentre.org/threads/31239-Testing-modal-dialogs-with-QTestLib -# * keyclick: https://programtalk.com/python-examples/PyQt4.QtTest.QTest.keyClick/ -# * isVisible: https://stackoverflow.com/questions/13850240/pyqt-how-to-check-is-qdialog-is-visible - -if isinstance(QtGui.qApp, type(None)): - app = QtWidgets.QApplication([]) -else: - app = QtGui.qApp - - -def wait(msec): - """Venter msec millisekunder. - - Bruker https://stackoverflow.com/a/34745326/3545896 - - Parameter - ----- - msec : number - msec to wait - """ - end = datetime_.now() + timedelta(milliseconds=msec) - while datetime_.now() < end: - app.processEvents() - - -class TestMain(unittest.TestCase): - """TestCase for main.""" - - def setUp(self): - """Forbereder widget for testing.""" - self.test_text1 = "A bad boy" - self.test_text2 = "Hei Anders!" - self.widget = main.CoolWidget(self.test_text1) - self.widget.show() - - def test_starts_up(self): - """Test at widget kan starte opp.""" - self.assertEqual( - self.widget.qlabel.text(), self.test_text1, - ) - self.assertTrue(self.widget.isVisible()) - - def test_change_text_ok(self): - """Test at endring av tekst funker.""" - - def change_text_and_ok(): - # in PySide2 we need to store a reference to this. If we don't the - # widget is garbage collected somehow before we get to use - # child_line_edit (a child of the active widget) - active_widget = app.activeModalWidget() - - child_line_edit = active_widget.findChild(QtWidgets.QLineEdit) - - QtTest.QTest.keyClicks(child_line_edit, self.test_text2) - QtTest.QTest.keyClick(child_line_edit, QtCore.Qt.Key_Enter) - - QtCore.QTimer.singleShot(0, change_text_and_ok) - QtTest.QTest.mouseClick(self.widget.button, QtCore.Qt.LeftButton) - - self.assertEqual( - self.widget.qlabel.text(), self.test_text2, - ) - - def test_change_text_not_ok(self): - """Test at avbrytelse av endring av tekster ikke endrer tekst.""" - - def accept_popup(): - QtTest.QTest.keyClick(app.activeModalWidget(), QtCore.Qt.Key_Enter) - - def change_text_and_not_ok(): - # in PySide2 we need to store a reference to this. If we don't the - # widget is garbage collected somehow before we get to use - # child_line_edit (a child of the active widget) - active_widget = app.activeModalWidget() - - child_line_edit = active_widget.findChild(QtWidgets.QLineEdit) - QtTest.QTest.keyClicks(child_line_edit, self.test_text2) - QtCore.QTimer.singleShot(0, accept_popup) - QtTest.QTest.keyClick(child_line_edit, QtCore.Qt.Key_Escape) - - QtCore.QTimer.singleShot(0, change_text_and_not_ok) - - QtTest.QTest.mouseClick(self.widget.button, QtCore.Qt.LeftButton) - - self.assertNotEqual( - self.widget.qlabel.text(), self.test_text2, - ) - - -if __name__ == "__main__": - unittest.main()