tests: Add tests for scaled single pixel buffers

Now that we're validating that buffer size must be an integer multiple of
scale, add some tests to make sure it's happening.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
Derek Foreman 2025-10-10 11:20:58 -05:00
parent dc27dd7e95
commit 2abd161023

View file

@ -110,3 +110,73 @@ TEST(solid_buffer_argb_u32)
return RESULT_OK;
}
TEST(solid_buffer_argb_u32_scaled)
{
struct client *client;
struct wp_viewport *viewport;
struct wl_buffer *buffer;
client = create_client();
client->surface = create_test_surface(client);
viewport = client_create_viewport(client);
wp_viewport_set_destination(viewport, 128, 128);
buffer = wp_single_pixel_buffer_manager_v1_create_u32_rgba_buffer(client->single_pixel_manager,
0xcfffffff, /* r */
0x8fffffff, /* g */
0x4fffffff, /* b */
0xffffffff /* a */);
test_assert_ptr_not_null(buffer);
weston_test_move_surface(client->test->weston_test,
client->surface->wl_surface,
64, 64);
wl_surface_attach(client->surface->wl_surface, buffer, 0, 0);
wl_surface_damage_buffer(client->surface->wl_surface, 0, 0, 1, 1);
wl_surface_set_buffer_scale(client->surface->wl_surface, 2);
wl_surface_commit(client->surface->wl_surface);
expect_protocol_error(client, &wl_surface_interface, WL_SURFACE_ERROR_INVALID_SIZE);
wl_buffer_destroy(buffer);
wp_viewport_destroy(viewport);
client_destroy(client);
return RESULT_OK;
}
TEST(solid_buffer_argb_u32_scaled_in_second_commit)
{
struct client *client;
struct wp_viewport *viewport;
struct wl_buffer *buffer;
client = create_client();
client->surface = create_test_surface(client);
viewport = client_create_viewport(client);
wp_viewport_set_destination(viewport, 128, 128);
buffer = wp_single_pixel_buffer_manager_v1_create_u32_rgba_buffer(client->single_pixel_manager,
0xcfffffff, /* r */
0x8fffffff, /* g */
0x4fffffff, /* b */
0xffffffff /* a */);
test_assert_ptr_not_null(buffer);
weston_test_move_surface(client->test->weston_test,
client->surface->wl_surface,
64, 64);
wl_surface_attach(client->surface->wl_surface, buffer, 0, 0);
wl_surface_damage_buffer(client->surface->wl_surface, 0, 0, 1, 1);
wl_surface_commit(client->surface->wl_surface);
client_roundtrip(client);
wl_surface_set_buffer_scale(client->surface->wl_surface, 2);
wl_surface_commit(client->surface->wl_surface);
expect_protocol_error(client, &wl_surface_interface, WL_SURFACE_ERROR_INVALID_SIZE);
wl_buffer_destroy(buffer);
wp_viewport_destroy(viewport);
client_destroy(client);
return RESULT_OK;
}