Skip to content

Commit

Permalink
Improved tests
Browse files Browse the repository at this point in the history
  • Loading branch information
proneon267 committed Oct 8, 2024
1 parent c986e3d commit 5f365c6
Showing 1 changed file with 40 additions and 115 deletions.
155 changes: 40 additions & 115 deletions testbed/tests/window/test_window.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import gc
import itertools
import re
import weakref
from importlib import import_module
Expand Down Expand Up @@ -140,27 +139,30 @@ async def test_move_and_resize(main_window, main_window_probe, capsys):
finally:
main_window.content = orig_content

@pytest.fixture(scope="session")
def intermediate_states_cycle():
# Use a iterator cycling fixture to ensure each state is the initial
# intermediate state at least once and to test specific problematic
# combinations. This is to ensure full code coverage for all backends.
intermediate_states = [
@pytest.mark.parametrize(
"initial_state, final_state",
[
# Direct switch from NORMAL:
(WindowState.NORMAL, WindowState.FULLSCREEN),
(WindowState.NORMAL, WindowState.PRESENTATION),
# Direct switch from FULLSCREEN:
(WindowState.FULLSCREEN, WindowState.NORMAL),
(WindowState.FULLSCREEN, WindowState.PRESENTATION),
# Direct switch from PRESENTATION:
(WindowState.PRESENTATION, WindowState.NORMAL),
(WindowState.PRESENTATION, WindowState.FULLSCREEN),
],
)
@pytest.mark.parametrize(
"intermediate_states",
[
(
WindowState.NORMAL,
WindowState.FULLSCREEN,
WindowState.PRESENTATION,
WindowState.NORMAL,
WindowState.FULLSCREEN,
WindowState.PRESENTATION,
),
(
WindowState.FULLSCREEN,
WindowState.NORMAL,
WindowState.PRESENTATION,
WindowState.FULLSCREEN,
WindowState.PRESENTATION,
WindowState.NORMAL,
),
(
WindowState.PRESENTATION,
Expand All @@ -170,45 +172,6 @@ def intermediate_states_cycle():
WindowState.NORMAL,
WindowState.FULLSCREEN,
),
(
WindowState.NORMAL,
WindowState.PRESENTATION,
WindowState.FULLSCREEN,
WindowState.NORMAL,
WindowState.PRESENTATION,
WindowState.FULLSCREEN,
),
(
WindowState.FULLSCREEN,
WindowState.PRESENTATION,
WindowState.NORMAL,
WindowState.FULLSCREEN,
WindowState.NORMAL,
WindowState.PRESENTATION,
),
(
WindowState.PRESENTATION,
WindowState.NORMAL,
WindowState.FULLSCREEN,
WindowState.PRESENTATION,
WindowState.FULLSCREEN,
WindowState.NORMAL,
),
]
return itertools.cycle(intermediate_states)

@pytest.mark.parametrize(
"initial_state, final_state",
[
# Direct switch from NORMAL:
(WindowState.NORMAL, WindowState.FULLSCREEN),
(WindowState.NORMAL, WindowState.PRESENTATION),
# Direct switch from FULLSCREEN:
(WindowState.FULLSCREEN, WindowState.NORMAL),
(WindowState.FULLSCREEN, WindowState.PRESENTATION),
# Direct switch from PRESENTATION:
(WindowState.PRESENTATION, WindowState.NORMAL),
(WindowState.PRESENTATION, WindowState.FULLSCREEN),
],
)
async def test_window_state_change_with_intermediate_states(
Expand All @@ -217,7 +180,7 @@ async def test_window_state_change_with_intermediate_states(
final_state,
main_window,
main_window_probe,
intermediate_states_cycle,
intermediate_states,
):
"""Window state can be directly changed to another state."""
if not main_window_probe.supports_fullscreen and WindowState.FULLSCREEN in {
Expand All @@ -234,7 +197,6 @@ async def test_window_state_change_with_intermediate_states(
}
):
pytest.xfail("This backend doesn't support presentation window state.")
intermediate_states = next(intermediate_states_cycle)

# Set to initial state
main_window.state = initial_state
Expand Down Expand Up @@ -725,63 +687,6 @@ async def test_move_and_resize(second_window, second_window_probe):
assert second_window.size == (250 + extra_width, 210 + extra_height)
assert second_window_probe.content_size == (250, 210)

@pytest.fixture(scope="session")
def intermediate_states_cycle():
# Use a iterator cycling fixture to ensure each state is the initial
# intermediate state at least once and to test specific problematic
# combinations. This is to ensure full code coverage for all backends.
intermediate_states = [
(
WindowState.NORMAL,
WindowState.MINIMIZED,
WindowState.PRESENTATION,
WindowState.FULLSCREEN,
WindowState.MAXIMIZED,
WindowState.MINIMIZED,
),
(
WindowState.MINIMIZED,
WindowState.FULLSCREEN,
WindowState.PRESENTATION,
WindowState.NORMAL,
WindowState.FULLSCREEN,
WindowState.MAXIMIZED,
),
(
WindowState.MAXIMIZED,
WindowState.MINIMIZED,
WindowState.NORMAL,
WindowState.FULLSCREEN,
WindowState.MINIMIZED,
WindowState.PRESENTATION,
),
(
WindowState.FULLSCREEN,
WindowState.MAXIMIZED,
WindowState.MINIMIZED,
WindowState.PRESENTATION,
WindowState.FULLSCREEN,
WindowState.NORMAL,
),
(
WindowState.PRESENTATION,
WindowState.FULLSCREEN,
WindowState.NORMAL,
WindowState.MAXIMIZED,
WindowState.MINIMIZED,
WindowState.FULLSCREEN,
),
(
WindowState.MINIMIZED,
WindowState.FULLSCREEN,
WindowState.PRESENTATION,
WindowState.MAXIMIZED,
WindowState.MINIMIZED,
WindowState.FULLSCREEN,
),
]
return itertools.cycle(intermediate_states)

@pytest.mark.parametrize(
"initial_state, final_state",
[
Expand Down Expand Up @@ -817,6 +722,27 @@ def intermediate_states_cycle():
(WindowState.PRESENTATION, WindowState.PRESENTATION),
],
)
@pytest.mark.parametrize(
"intermediate_states",
[
(
WindowState.MINIMIZED,
WindowState.FULLSCREEN,
WindowState.PRESENTATION,
WindowState.MAXIMIZED,
WindowState.MINIMIZED,
WindowState.FULLSCREEN,
),
(
WindowState.FULLSCREEN,
WindowState.MAXIMIZED,
WindowState.MINIMIZED,
WindowState.PRESENTATION,
WindowState.FULLSCREEN,
WindowState.MINIMIZED,
),
],
)
@pytest.mark.parametrize(
"second_window_class, second_window_kwargs",
[
Expand All @@ -833,7 +759,7 @@ async def test_window_state_change_with_intermediate_states(
final_state,
second_window,
second_window_probe,
intermediate_states_cycle,
intermediate_states,
):
"""Window state can be changed to another state while passing
through intermediate states with an expected OS delay."""
Expand All @@ -844,7 +770,6 @@ async def test_window_state_change_with_intermediate_states(
pytest.xfail(
"This backend doesn't reliably support minimized window state."
)
intermediate_states = next(intermediate_states_cycle)
second_window.toolbar.add(app.cmd1)
second_window.content = toga.Box(style=Pack(background_color=CORNFLOWERBLUE))
second_window.show()
Expand Down

0 comments on commit 5f365c6

Please sign in to comment.