Implement a test for setting the geometry

This commit is contained in:
Jesse Talavera 2024-03-25 20:19:35 -04:00
parent c20a97ad35
commit cdf28ecd74
2 changed files with 80 additions and 3 deletions

View File

@ -241,9 +241,9 @@ add_python_test(
add_python_test(
NAME "Core sets geometry at runtime"
TEST_MODULE ""
DISABLED
) # TODO: Implement this test
TEST_MODULE basics.core_sets_geometry
CONTENT "${NDS_ROM}"
)
add_python_test(
NAME "Core registers support for achievements"

View File

@ -0,0 +1,77 @@
import itertools
from typing import cast
from libretro import Session
from libretro.api.input import JoypadState
from libretro.api.video import PillowVideoDriver
import prelude
options = {
b"melonds_number_of_screen_layouts": b"2",
b"melonds_screen_layout1": b"top-bottom",
b"melonds_screen_layout2": b"left-right",
}
def generate_input():
# Wait a little while...
yield from itertools.repeat(None, 10)
# Cycle to the next screen layout
yield JoypadState(r2=True)
yield from itertools.repeat(None)
session: Session
with prelude.session(input_state=generate_input) as session:
video = cast(PillowVideoDriver, session.video)
for i in range(10):
session.core.run()
frame1 = video.get_frame()
framebuffer1 = video.get_frame_max()
geometry1 = video.geometry
assert frame1 is not None
assert framebuffer1 is not None
assert geometry1 is not None
assert frame1.size != framebuffer1.size, \
f"Frame size should not be the same as framebuffer size ({frame1.size})"
assert frame1.width < framebuffer1.width, \
f"Frame width ({frame1.width}) shouldn't exceed framebuffer width ({framebuffer1.width})"
assert frame1.height < framebuffer1.height, \
f"Frame height ({frame1.height}) shouldn't exceed framebuffer height ({framebuffer1.height})"
assert frame1.width == geometry1.base_width, \
f"Frame width ({frame1.width}) should match geometry base width ({geometry1.base_width})"
assert frame1.height == geometry1.base_height, \
f"Frame height ({frame1.height}) should match geometry base height ({geometry1.height})"
assert framebuffer1.width == geometry1.max_width, \
f"Framebuffer width ({framebuffer1.width}) should match geometry max width ({geometry1.max_width})"
assert framebuffer1.height == geometry1.max_height, \
f"Framebuffer height ({framebuffer1.height}) should match geometry max height ({geometry1.max_height})"
for i in range(20):
session.core.run()
# Now that we've changed the screen layout, let's make sure we changed the geometry
frame2 = video.get_frame()
framebuffer2 = video.get_frame_max()
geometry2 = video.geometry
assert frame2 is not None
assert framebuffer2 is not None
assert geometry2 is not None
assert geometry1 != geometry2, f"Geometry should have changed from {geometry1} after switching screen layout"
assert framebuffer1.size == framebuffer2.size, \
f"Framebuffer size changed from {framebuffer1.size} to {framebuffer2.size}, but it shouldn't have"