Test if the global filter is effectively filtering out the global when
the filter returns false.

Signed-off-by: Olivier Fourdan <[email protected]>
---
 v3: split out as its own commit

 tests/display-test.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/tests/display-test.c b/tests/display-test.c
index 17956db..3679772 100644
--- a/tests/display-test.c
+++ b/tests/display-test.c
@@ -125,6 +125,7 @@ struct handler_info {
        struct wl_seat *seat;
        uint32_t bind_version;
        bool use_unversioned;
+       bool has_data_offer;
 };
 
 static void
@@ -145,6 +146,8 @@ registry_handle_globals(void *data, struct wl_registry 
*registry,
                        hi->seat = wl_registry_bind(registry, id,
                                                    &wl_seat_interface, ver);
                assert(hi->seat);
+       } else if (strcmp(intf, "wl_data_offer") == 0) {
+               hi->has_data_offer = true;
        }
 }
 
@@ -926,3 +929,58 @@ TEST(error_on_destroyed_object)
        display_resume(d);
        display_destroy(d);
 }
+
+static bool
+global_filter(const struct wl_client *client,
+                     const struct wl_global *global,
+                     void *data)
+{
+       /* Hide the wl_data_offer interface */
+       if (wl_global_get_interface(global) == &wl_data_offer_interface)
+               return false;
+
+       /* Show all the others */
+       return true;
+}
+
+static void
+bind_data_offer(struct wl_client *client, void *data,
+               uint32_t vers, uint32_t id)
+{
+       struct display *d = data;
+       struct client_info *ci;
+       struct wl_resource *res;
+
+       ci = find_client_info(d, client);
+       assert(ci);
+
+       res = wl_resource_create(client, &wl_data_offer_interface, vers, id);
+       assert(res);
+}
+
+TEST(filter)
+{
+       struct handler_info hi;
+       struct display *d;
+       struct wl_global *g1, *g2;
+
+       d = display_create();
+
+       g1 = wl_global_create(d->wl_display, &wl_seat_interface,
+                             1, d, bind_seat);
+       g2 = wl_global_create(d->wl_display, &wl_data_offer_interface,
+                             1, d, bind_data_offer);
+       wl_display_set_filter_global(d->wl_display, global_filter, NULL);
+
+       hi.has_data_offer = false;
+       client_create(d, seat_version, &hi);
+       assert(hi.seat != NULL);
+       assert(hi.has_data_offer != true);
+
+       display_run(d);
+
+       wl_global_destroy(g1);
+       wl_global_destroy(g2);
+
+       display_destroy(d);
+}
-- 
2.7.4

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to