enthought / pyface

pyface: traits-capable windowing framework
Other
105 stars 55 forks source link

Some ModalDialogTester-using tests timing out on macOS #1170

Closed mdickinson closed 1 year ago

mdickinson commented 1 year ago

Some of the newer tests that use the ModalDialogTester are timing out on macOS. However, because of the way that the GuiTestAssistant works, they end up passing anyway. (We noticed this as a result of proposed changes to the GuiTestAssistant in #1168.)

This is visible in recent test runs - for example, the following snippet from this run with EDM packages, PySide2, macos-latest, shows test_close and test_close_show_alpha taking approximately 15 seconds each.

Tue, 11 Oct 2022 16:02:38 GMT
test_destroy (pyface.tests.test_color_dialog.TestColorDialog) ... ok
Tue, 11 Oct 2022 16:02:38 GMT
test_show_alpha (pyface.tests.test_color_dialog.TestColorDialog) ... ok
Tue, 11 Oct 2022 16:02:53 GMT
test_close (pyface.tests.test_color_dialog.TestGetColor) ... ok
Tue, 11 Oct 2022 16:03:08 GMT
test_close_show_alpha (pyface.tests.test_color_dialog.TestGetColor) ... ok
Tue, 11 Oct 2022 16:03:09 GMT
test_cancel (pyface.tests.test_confirmation_dialog.TestConfirm) ... ok
Tue, 11 Oct 2022 16:03:10 GMT
test_default_cancel (pyface.tests.test_confirmation_dialog.TestConfirm) ... ok
Tue, 11 Oct 2022 16:03:10 GMT
test_default_yes (pyface.tests.test_confirmation_dialog.TestConfirm) ... ok
Tue, 11 Oct 2022 16:03:10 GMT
test_no (pyface.tests.test_confirmation_dialog.TestConfirm) ... ok
mdickinson commented 1 year ago

This appears to have to do with the dont_quit_when_last_window_closed context manager: that's preventing control from returning to the main thread when the dialog is closed (via reject).

corranwebster commented 1 year ago

As in #1168, the tests which seem to cause the problems are the tests for the utility functions get_color and get_font which wrap the dialogs, rather than the main tests for the dialogs themselves.

corranwebster commented 1 year ago

The cause seems to be that the tests in question are using open_and_run; using open_and_wait instead resolves the problem.

corranwebster commented 1 year ago

Fixed by #1168