mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 21:21:21 +00:00
testsuite: Make reftests work again
Well, the testrunner works again, the tests don't all succeed. So exclude them from CI.
This commit is contained in:
parent
42d580dc07
commit
c564a349e5
@ -30,4 +30,5 @@ xvfb-run -a -s "-screen 0 1024x768x24" \
|
||||
--print-errorlogs \
|
||||
--suite=gtk \
|
||||
--no-suite=gtk:gsk \
|
||||
--no-suite=gtk:reftest \
|
||||
--no-suite=gtk:a11y
|
||||
|
@ -8,4 +8,4 @@ subdir('gtk')
|
||||
subdir('css')
|
||||
subdir('a11y')
|
||||
subdir('tools')
|
||||
#subdir('reftests')
|
||||
subdir('reftests')
|
||||
|
@ -25,17 +25,12 @@
|
||||
#include "reftest-module.h"
|
||||
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
#include <gdk/gdkx.h>
|
||||
#include <gdk/x11/gdkx.h>
|
||||
#include <cairo-xlib.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
||||
typedef enum {
|
||||
SNAPSHOT_WINDOW,
|
||||
SNAPSHOT_DRAW
|
||||
} SnapshotMode;
|
||||
|
||||
static GtkWidget *
|
||||
builder_get_toplevel (GtkBuilder *builder)
|
||||
{
|
||||
@ -86,58 +81,19 @@ reftest_uninhibit_snapshot (void)
|
||||
}
|
||||
|
||||
static void
|
||||
check_for_draw (GdkEvent *event, gpointer data)
|
||||
{
|
||||
if (gdk_event_get_event_type (event) == GDK_EXPOSE)
|
||||
check_for_draw (GdkPaintable *paintable,
|
||||
gpointer unused)
|
||||
{
|
||||
reftest_uninhibit_snapshot ();
|
||||
gdk_event_handler_set ((GdkEventFunc) gtk_main_do_event, NULL, NULL);
|
||||
}
|
||||
|
||||
gtk_main_do_event (event);
|
||||
}
|
||||
|
||||
static void
|
||||
snapshot_window_native (GdkSurface *window,
|
||||
cairo_t *cr)
|
||||
{
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
if (GDK_IS_X11_SURFACE (window))
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
XWindowAttributes attrs;
|
||||
|
||||
if (gdk_surface_get_surface_type (window) == GDK_SURFACE_TOPLEVEL ||
|
||||
gdk_surface_get_surface_type (window) == GDK_SURFACE_TEMP)
|
||||
{
|
||||
/* give the WM/server some time to sync. They need it.
|
||||
* Also, do use popups instead of toplevels in your tests
|
||||
* whenever you can.
|
||||
*/
|
||||
gdk_display_sync (gdk_surface_get_display (window));
|
||||
g_timeout_add (500, quit_when_idle, loop);
|
||||
g_main_loop_run (loop);
|
||||
}
|
||||
|
||||
XGetWindowAttributes (gdk_x11_display_get_xdisplay (gdk_surface_get_display (window)),
|
||||
gdk_x11_surface_get_xid (window),
|
||||
&attrs);
|
||||
surface = cairo_xlib_surface_create (gdk_x11_display_get_xdisplay (gdk_surface_get_display (window)),
|
||||
gdk_x11_surface_get_xid (window),
|
||||
attrs.visual,
|
||||
attrs.width,
|
||||
attrs.height);
|
||||
|
||||
cairo_set_source_surface (cr, surface, 0, 0);
|
||||
cairo_paint (cr);
|
||||
cairo_surface_destroy (surface);
|
||||
}
|
||||
#endif
|
||||
g_signal_handlers_disconnect_by_func (paintable, check_for_draw, NULL);
|
||||
}
|
||||
|
||||
static cairo_surface_t *
|
||||
snapshot_widget (GtkWidget *widget, SnapshotMode mode)
|
||||
snapshot_widget (GtkWidget *widget)
|
||||
{
|
||||
GtkSnapshot *snapshot;
|
||||
GdkPaintable *paintable;
|
||||
GskRenderNode *node;
|
||||
cairo_surface_t *surface;
|
||||
cairo_t *cr;
|
||||
|
||||
@ -146,16 +102,13 @@ snapshot_widget (GtkWidget *widget, SnapshotMode mode)
|
||||
loop = g_main_loop_new (NULL, FALSE);
|
||||
|
||||
/* We wait until the widget is drawn for the first time.
|
||||
* We can not wait for a GtkWidget::draw event, because that might not
|
||||
* happen if the window is fully obscured by windowed child widgets.
|
||||
* Alternatively, we could wait for an expose event on widget's window.
|
||||
* Both of these are rather hairy, not sure what's best.
|
||||
*
|
||||
* We also use an inhibit mechanism, to give module functions a chance
|
||||
* to delay the snapshot.
|
||||
*/
|
||||
reftest_inhibit_snapshot ();
|
||||
gdk_event_handler_set (check_for_draw, NULL, NULL);
|
||||
paintable = gtk_widget_paintable_new (widget);
|
||||
g_signal_connect (paintable, "invalidate-contents", G_CALLBACK (check_for_draw), NULL);
|
||||
g_main_loop_run (loop);
|
||||
|
||||
surface = gdk_surface_create_similar_surface (gtk_widget_get_surface (widget),
|
||||
@ -165,17 +118,7 @@ snapshot_widget (GtkWidget *widget, SnapshotMode mode)
|
||||
|
||||
cr = cairo_create (surface);
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case SNAPSHOT_WINDOW:
|
||||
snapshot_window_native (gtk_widget_get_surface (widget), cr);
|
||||
break;
|
||||
case SNAPSHOT_DRAW:
|
||||
{
|
||||
GtkSnapshot *snapshot = gtk_snapshot_new (FALSE, "ReftestSnapshot");
|
||||
GdkPaintable *paintable = gtk_widget_paintable_new (widget);
|
||||
GskRenderNode *node;
|
||||
|
||||
snapshot = gtk_snapshot_new ();
|
||||
gdk_paintable_snapshot (paintable,
|
||||
snapshot,
|
||||
gtk_widget_get_allocated_width (widget),
|
||||
@ -183,12 +126,6 @@ snapshot_widget (GtkWidget *widget, SnapshotMode mode)
|
||||
g_object_unref (paintable);
|
||||
node = gtk_snapshot_free_to_node (snapshot);
|
||||
gsk_render_node_draw (node, cr);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
}
|
||||
|
||||
cairo_destroy (cr);
|
||||
g_main_loop_unref (loop);
|
||||
@ -305,5 +242,5 @@ reftest_snapshot_ui_file (const char *ui_file)
|
||||
|
||||
gtk_widget_show (window);
|
||||
|
||||
return snapshot_widget (window, SNAPSHOT_WINDOW);
|
||||
return snapshot_widget (window);
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ swap_child (GtkWidget *window)
|
||||
|
||||
gtk_container_remove (GTK_CONTAINER (window), gtk_bin_get_child (GTK_BIN (window)));
|
||||
|
||||
image = gtk_image_new_from_icon_name ("go-next", GTK_ICON_SIZE_BUTTON);
|
||||
image = gtk_image_new_from_icon_name ("go-next");
|
||||
gtk_widget_show (image);
|
||||
gtk_container_add (GTK_CONTAINER (window), image);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user