#include <gtk/gtk.h>

static char *cursor_names[] = {
  /*** resize cursors that we're using for csd, from gtkwindow.c ***/
  "nw-resize",
  "n-resize",
  "ne-resize",
  "w-resize",
  "e-resize",
  "sw-resize",
  "s-resize",
  "se-resize",

  /*** resize cursors, from gtkpaned.c ***/
  "col-resize",
  "row-resize",

  /*** dnd cursors, from gtkdnd.c ***/
  "dnd-ask",
  "dnd-copy",
  "dnd-move",
  "dnd-link",
  "dnd-none",

  "none",      /* used e.g. in gtkentry.c */
  "pointer",   /* used e.g. in gtklinkbutton.c */
  "text",      /* used e.g. in gtkentry.c */
  "crosshair", /* used e.g. in gtkcolorplane.c */
  "progress",  /* used e.g. in gtkfilechooserwidget.c */
};

static void
test_cursor_existence (gconstpointer name)
{
  GdkDisplay *display;
  GdkCursor *cursor;

  display = gdk_display_get_default ();
  cursor = gdk_cursor_new_from_name (display, name);
  g_assert (cursor != NULL);
  g_object_unref (cursor);
}

int
main (int argc, char *argv[])
{
  guint i;
  char *test_name;
  char *theme;

  gtk_test_init (&argc, &argv);

  g_object_get (gtk_settings_get_default (), "gtk-cursor-theme-name", &theme, NULL);
  g_test_message ("Testing cursor theme: %s", theme);
  g_free (theme);

  for (i = 0; i < G_N_ELEMENTS (cursor_names); i++)
    {
      test_name = g_strdup_printf ("/check-cursor-names/%s", cursor_names[i]);
      g_test_add_data_func (test_name, cursor_names[i], test_cursor_existence);
      g_free (test_name);
    }

  return g_test_run();
}
