diff --git a/tests/ivi_layout-test-plugin.c b/tests/ivi_layout-test-plugin.c index a134a149..28afac9b 100644 --- a/tests/ivi_layout-test-plugin.c +++ b/tests/ivi_layout-test-plugin.c @@ -82,6 +82,7 @@ struct test_launcher { struct test_context { const struct ivi_controller_interface *controller_interface; struct wl_resource *runner_resource; + uint32_t user_flags; }; static struct test_context static_context; @@ -877,3 +878,174 @@ RUNNER_TEST(cleanup_layer) ctl->layer_destroy(ivilayer); } +static void +test_surface_properties_changed_notification_callback(struct ivi_layout_surface *ivisurf, + const struct ivi_layout_surface_properties *prop, + enum ivi_layout_notification_mask mask, + void *userdata) +{ + struct test_context *ctx = userdata; + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert_or_return(ctl->get_id_of_surface(ivisurf) == IVI_TEST_SURFACE_ID(0)); + + ctx->user_flags = 1; +} + +RUNNER_TEST(surface_properties_changed_notification) +{ + const struct ivi_controller_interface *ctl = ctx->controller_interface; + const uint32_t id_surface = IVI_TEST_SURFACE_ID(0); + struct ivi_layout_surface *ivisurf; + + ctx->user_flags = 0; + + ivisurf = ctl->get_surface_from_id(id_surface); + runner_assert(ivisurf != NULL); + + runner_assert(ctl->surface_add_notification( + ivisurf, test_surface_properties_changed_notification_callback, ctx) == IVI_SUCCEEDED); + + ctl->commit_changes(); + + runner_assert(ctx->user_flags == 0); + + runner_assert(ctl->surface_set_destination_rectangle( + ivisurf, 20, 30, 200, 300) == IVI_SUCCEEDED); + + ctl->commit_changes(); + + runner_assert(ctx->user_flags == 1); + + ctx->user_flags = 0; + runner_assert(ctl->surface_set_destination_rectangle( + ivisurf, 20, 30, 200, 300) == IVI_SUCCEEDED); + + ctl->commit_changes(); + + runner_assert(ctx->user_flags == 0); + + ctl->surface_remove_notification(ivisurf); + ctx->user_flags = 0; + runner_assert(ctl->surface_set_destination_rectangle( + ivisurf, 40, 50, 400, 500) == IVI_SUCCEEDED); + + ctl->commit_changes(); + + runner_assert(ctx->user_flags == 0); +} + +static void +test_surface_configure_notification_callback(struct ivi_layout_surface *ivisurf, + void *userdata) +{ + struct test_context *ctx = userdata; + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert_or_return(ctl->get_id_of_surface(ivisurf) == IVI_TEST_SURFACE_ID(0)); + + ctx->user_flags = 1; +} + +RUNNER_TEST(surface_configure_notification_p1) +{ + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert(IVI_SUCCEEDED == ctl->add_notification_configure_surface(test_surface_configure_notification_callback, ctx)); + ctl->commit_changes(); + + ctx->user_flags = 0; +} + +RUNNER_TEST(surface_configure_notification_p2) +{ + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert(ctx->user_flags == 1); + + ctl->remove_notification_configure_surface(test_surface_configure_notification_callback, ctx); + ctx->user_flags = 0; +} + +RUNNER_TEST(surface_configure_notification_p3) +{ + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + ctl->commit_changes(); + runner_assert(ctx->user_flags == 0); +} + +static void +test_surface_create_notification_callback(struct ivi_layout_surface *ivisurf, + void *userdata) +{ + struct test_context *ctx = userdata; + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert_or_return(ctl->get_id_of_surface(ivisurf) == IVI_TEST_SURFACE_ID(0)); + + ctx->user_flags = 1; +} + +RUNNER_TEST(surface_create_notification_p1) +{ + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert(ctl->add_notification_create_surface( + test_surface_create_notification_callback, ctx) == IVI_SUCCEEDED); + + ctx->user_flags = 0; +} + +RUNNER_TEST(surface_create_notification_p2) +{ + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert(ctx->user_flags == 1); + + ctl->remove_notification_create_surface( + test_surface_create_notification_callback, ctx); + ctx->user_flags = 0; +} + +RUNNER_TEST(surface_create_notification_p3) +{ + runner_assert(ctx->user_flags == 0); +} + +static void +test_surface_remove_notification_callback(struct ivi_layout_surface *ivisurf, + void *userdata) +{ + struct test_context *ctx = userdata; + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert_or_return(ctl->get_id_of_surface(ivisurf) == IVI_TEST_SURFACE_ID(0)); + + ctx->user_flags = 1; +} + +RUNNER_TEST(surface_remove_notification_p1) +{ + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert(ctl->add_notification_remove_surface( + test_surface_remove_notification_callback, ctx) == IVI_SUCCEEDED); + + ctx->user_flags = 0; +} + +RUNNER_TEST(surface_remove_notification_p2) +{ + const struct ivi_controller_interface *ctl = ctx->controller_interface; + + runner_assert(ctx->user_flags == 1); + + ctl->remove_notification_remove_surface(test_surface_remove_notification_callback, ctx); + ctx->user_flags = 0; +} + +RUNNER_TEST(surface_remove_notification_p3) +{ + runner_assert(ctx->user_flags == 0); +} diff --git a/tests/ivi_layout-test.c b/tests/ivi_layout-test.c index 2ac67a45..7091c9fb 100644 --- a/tests/ivi_layout-test.c +++ b/tests/ivi_layout-test.c @@ -196,6 +196,7 @@ const char * const basic_test_names[] = { "surface_destination_rectangle", "surface_source_rectangle", "surface_bad_opacity", + "surface_properties_changed_notification", }; const char * const surface_property_commit_changes_test_names[] = { @@ -387,3 +388,81 @@ TEST(commit_changes_after_render_order_set_surface_destroy) ivi_window_destroy(winds[2]); runner_destroy(runner); } + +TEST(ivi_layout_surface_configure_notification) +{ + struct client *client; + struct runner *runner; + struct ivi_window *wind; + struct wl_buffer *buffer; + + client = create_client(); + runner = client_create_runner(client); + + runner_run(runner, "surface_configure_notification_p1"); + + wind = client_create_ivi_window(client, IVI_TEST_SURFACE_ID(0)); + + buffer = create_shm_buffer(client, 200, 300, NULL); + + wl_surface_attach(wind->wl_surface, buffer, 0, 0); + wl_surface_damage(wind->wl_surface, 0, 0, 20, 30); + wl_surface_commit(wind->wl_surface); + + runner_run(runner, "surface_configure_notification_p2"); + + wl_surface_attach(wind->wl_surface, buffer, 0, 0); + wl_surface_damage(wind->wl_surface, 0, 0, 40, 50); + wl_surface_commit(wind->wl_surface); + + runner_run(runner, "surface_configure_notification_p3"); + + wl_buffer_destroy(buffer); + ivi_window_destroy(wind); + runner_destroy(runner); +} + +TEST(ivi_layout_surface_create_notification) +{ + struct client *client; + struct runner *runner; + struct ivi_window *wind; + + client = create_client(); + runner = client_create_runner(client); + + runner_run(runner, "surface_create_notification_p1"); + + wind = client_create_ivi_window(client, IVI_TEST_SURFACE_ID(0)); + + runner_run(runner, "surface_create_notification_p2"); + + ivi_window_destroy(wind); + wind = client_create_ivi_window(client, IVI_TEST_SURFACE_ID(0)); + runner_run(runner, "surface_create_notification_p3"); + + ivi_window_destroy(wind); + runner_destroy(runner); +} + +TEST(ivi_layout_surface_remove_notification) +{ + struct client *client; + struct runner *runner; + struct ivi_window *wind; + + client = create_client(); + runner = client_create_runner(client); + + wind = client_create_ivi_window(client, IVI_TEST_SURFACE_ID(0)); + runner_run(runner, "surface_remove_notification_p1"); + ivi_window_destroy(wind); + + runner_run(runner, "surface_remove_notification_p2"); + + wind = client_create_ivi_window(client, IVI_TEST_SURFACE_ID(0)); + ivi_window_destroy(wind); + runner_run(runner, "surface_remove_notification_p3"); + + runner_destroy(runner); +}