Blame gtk/tests/recentmanager.c

Packit Service fb6fa5
/* GTK - The GIMP Toolkit
Packit Service fb6fa5
 * gtkrecentmanager.c: a manager for the recently used resources
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Copyright (C) 2006 Emmanuele Bassi
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Lesser General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Lesser General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Lesser General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include <glib/gstdio.h>
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
Packit Service fb6fa5
const gchar *uri = "file:///tmp/testrecentchooser.txt";
Packit Service fb6fa5
const gchar *uri2 = "file:///tmp/testrecentchooser2.txt";
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
recent_manager_get_default (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkRecentManager *manager;
Packit Service fb6fa5
  GtkRecentManager *manager2;
Packit Service fb6fa5
Packit Service fb6fa5
  manager = gtk_recent_manager_get_default ();
Packit Service fb6fa5
  g_assert (manager != NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  manager2 = gtk_recent_manager_get_default ();
Packit Service fb6fa5
  g_assert (manager == manager2);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
recent_manager_add (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkRecentManager *manager;
Packit Service fb6fa5
  GtkRecentData *recent_data;
Packit Service fb6fa5
  gboolean res;
Packit Service fb6fa5
Packit Service fb6fa5
  manager = gtk_recent_manager_get_default ();
Packit Service fb6fa5
Packit Service fb6fa5
  recent_data = g_slice_new0 (GtkRecentData);
Packit Service fb6fa5
Packit Service fb6fa5
  /* mime type is mandatory */
Packit Service fb6fa5
  recent_data->mime_type = NULL;
Packit Service fb6fa5
  recent_data->app_name = "testrecentchooser";
Packit Service fb6fa5
  recent_data->app_exec = "testrecentchooser %u";
Packit Service fb6fa5
  if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      res = gtk_recent_manager_add_full (manager,
Packit Service fb6fa5
                                         uri,
Packit Service fb6fa5
                                         recent_data);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  g_test_trap_assert_failed ();
Packit Service fb6fa5
Packit Service fb6fa5
  /* app name is mandatory */
Packit Service fb6fa5
  recent_data->mime_type = "text/plain";
Packit Service fb6fa5
  recent_data->app_name = NULL;
Packit Service fb6fa5
  recent_data->app_exec = "testrecentchooser %u";
Packit Service fb6fa5
  if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      res = gtk_recent_manager_add_full (manager,
Packit Service fb6fa5
                                         uri,
Packit Service fb6fa5
                                         recent_data);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  g_test_trap_assert_failed ();
Packit Service fb6fa5
Packit Service fb6fa5
  /* app exec is mandatory */
Packit Service fb6fa5
  recent_data->mime_type = "text/plain";
Packit Service fb6fa5
  recent_data->app_name = "testrecentchooser";
Packit Service fb6fa5
  recent_data->app_exec = NULL;
Packit Service fb6fa5
  if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      res = gtk_recent_manager_add_full (manager,
Packit Service fb6fa5
                                         uri,
Packit Service fb6fa5
                                         recent_data);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  g_test_trap_assert_failed ();
Packit Service fb6fa5
Packit Service fb6fa5
  recent_data->mime_type = "text/plain";
Packit Service fb6fa5
  recent_data->app_name = "testrecentchooser";
Packit Service fb6fa5
  recent_data->app_exec = "testrecentchooser %u";
Packit Service fb6fa5
  res = gtk_recent_manager_add_full (manager,
Packit Service fb6fa5
                                     uri,
Packit Service fb6fa5
                                     recent_data);
Packit Service fb6fa5
  g_assert (res == TRUE);
Packit Service fb6fa5
Packit Service fb6fa5
  g_slice_free (GtkRecentData, recent_data);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
typedef struct {
Packit Service fb6fa5
  GMainLoop *main_loop;
Packit Service fb6fa5
  gint counter;
Packit Service fb6fa5
} AddManyClosure;
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
check_bulk (GtkRecentManager *manager,
Packit Service fb6fa5
            gpointer          data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  AddManyClosure *closure = data;
Packit Service fb6fa5
Packit Service fb6fa5
  if (g_test_verbose ())
Packit Service fb6fa5
    g_print (G_STRLOC ": counter = %d\n", closure->counter);
Packit Service fb6fa5
Packit Service fb6fa5
  g_assert_cmpint (closure->counter, ==, 100);
Packit Service fb6fa5
Packit Service fb6fa5
  if (g_main_loop_is_running (closure->main_loop))
Packit Service fb6fa5
    g_main_loop_quit (closure->main_loop);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
recent_manager_add_many (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkRecentManager *manager = g_object_new (GTK_TYPE_RECENT_MANAGER,
Packit Service fb6fa5
                                            "filename", "recently-used.xbel",
Packit Service fb6fa5
                                            NULL);
Packit Service fb6fa5
  AddManyClosure *closure = g_new (AddManyClosure, 1);
Packit Service fb6fa5
  GtkRecentData *data = g_slice_new0 (GtkRecentData);
Packit Service fb6fa5
  gint i;
Packit Service fb6fa5
Packit Service fb6fa5
  closure->main_loop = g_main_loop_new (NULL, FALSE);
Packit Service fb6fa5
  closure->counter = 0;
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (manager, "changed", G_CALLBACK (check_bulk), closure);
Packit Service fb6fa5
Packit Service fb6fa5
  for (i = 0; i < 100; i++)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gchar *new_uri;
Packit Service fb6fa5
Packit Service fb6fa5
      data->mime_type = "text/plain";
Packit Service fb6fa5
      data->app_name = "testrecentchooser";
Packit Service fb6fa5
      data->app_exec = "testrecentchooser %u";
Packit Service fb6fa5
Packit Service fb6fa5
      if (g_test_verbose ())
Packit Service fb6fa5
        g_print (G_STRLOC ": adding item %d\n", i);
Packit Service fb6fa5
Packit Service fb6fa5
      new_uri = g_strdup_printf ("file:///doesnotexist-%d.txt", i);
Packit Service fb6fa5
      gtk_recent_manager_add_full (manager, new_uri, data);
Packit Service fb6fa5
      g_free (new_uri);
Packit Service fb6fa5
Packit Service fb6fa5
      closure->counter += 1;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  g_main_loop_run (closure->main_loop);
Packit Service fb6fa5
Packit Service fb6fa5
  g_main_loop_unref (closure->main_loop);
Packit Service fb6fa5
  g_slice_free (GtkRecentData, data);
Packit Service fb6fa5
  g_free (closure);
Packit Service fb6fa5
  g_object_unref (manager);
Packit Service fb6fa5
Packit Service fb6fa5
  g_assert_cmpint (g_unlink ("recently-used.xbel"), ==, 0);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
recent_manager_has_item (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkRecentManager *manager;
Packit Service fb6fa5
  gboolean res;
Packit Service fb6fa5
Packit Service fb6fa5
  manager = gtk_recent_manager_get_default ();
Packit Service fb6fa5
Packit Service fb6fa5
  res = gtk_recent_manager_has_item (manager, "file:///tmp/testrecentdoesnotexist.txt");
Packit Service fb6fa5
  g_assert (res == FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  res = gtk_recent_manager_has_item (manager, uri);
Packit Service fb6fa5
  g_assert (res == TRUE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
recent_manager_move_item (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkRecentManager *manager;
Packit Service fb6fa5
  gboolean res;
Packit Service fb6fa5
  GError *error;
Packit Service fb6fa5
Packit Service fb6fa5
  manager = gtk_recent_manager_get_default ();
Packit Service fb6fa5
Packit Service fb6fa5
  error = NULL;
Packit Service fb6fa5
  res = gtk_recent_manager_move_item (manager,
Packit Service fb6fa5
                                      "file:///tmp/testrecentdoesnotexist.txt",
Packit Service fb6fa5
                                      uri2,
Packit Service fb6fa5
                                      &error);
Packit Service fb6fa5
  g_assert (res == FALSE);
Packit Service fb6fa5
  g_assert (error != NULL);
Packit Service fb6fa5
  g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
Packit Service fb6fa5
  g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
Packit Service fb6fa5
  g_error_free (error);
Packit Service fb6fa5
Packit Service fb6fa5
  error = NULL;
Packit Service fb6fa5
  res = gtk_recent_manager_move_item (manager, uri, uri2, &error);
Packit Service fb6fa5
  g_assert (res == TRUE);
Packit Service fb6fa5
  g_assert (error == NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  res = gtk_recent_manager_has_item (manager, uri);
Packit Service fb6fa5
  g_assert (res == FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  res = gtk_recent_manager_has_item (manager, uri2);
Packit Service fb6fa5
  g_assert (res == TRUE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
recent_manager_lookup_item (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkRecentManager *manager;
Packit Service fb6fa5
  GtkRecentInfo *info;
Packit Service fb6fa5
  GError *error;
Packit Service fb6fa5
Packit Service fb6fa5
  manager = gtk_recent_manager_get_default ();
Packit Service fb6fa5
Packit Service fb6fa5
  error = NULL;
Packit Service fb6fa5
  info = gtk_recent_manager_lookup_item (manager,
Packit Service fb6fa5
                                         "file:///tmp/testrecentdoesnotexist.txt",
Packit Service fb6fa5
                                         &error);
Packit Service fb6fa5
  g_assert (info == NULL);
Packit Service fb6fa5
  g_assert (error != NULL);
Packit Service fb6fa5
  g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
Packit Service fb6fa5
  g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
Packit Service fb6fa5
  g_error_free (error);
Packit Service fb6fa5
Packit Service fb6fa5
  error = NULL;
Packit Service fb6fa5
  info = gtk_recent_manager_lookup_item (manager, uri2, &error);
Packit Service fb6fa5
  g_assert (info != NULL);
Packit Service fb6fa5
  g_assert (error == NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_assert (gtk_recent_info_has_application (info, "testrecentchooser"));
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_recent_info_unref (info);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
recent_manager_remove_item (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkRecentManager *manager;
Packit Service fb6fa5
  gboolean res;
Packit Service fb6fa5
  GError *error;
Packit Service fb6fa5
Packit Service fb6fa5
  manager = gtk_recent_manager_get_default ();
Packit Service fb6fa5
Packit Service fb6fa5
  error = NULL;
Packit Service fb6fa5
  res = gtk_recent_manager_remove_item (manager,
Packit Service fb6fa5
                                        "file:///tmp/testrecentdoesnotexist.txt",
Packit Service fb6fa5
                                        &error);
Packit Service fb6fa5
  g_assert (res == FALSE);
Packit Service fb6fa5
  g_assert (error != NULL);
Packit Service fb6fa5
  g_assert (error->domain == GTK_RECENT_MANAGER_ERROR);
Packit Service fb6fa5
  g_assert (error->code == GTK_RECENT_MANAGER_ERROR_NOT_FOUND);
Packit Service fb6fa5
  g_error_free (error);
Packit Service fb6fa5
Packit Service fb6fa5
  /* remove an item that's actually there */
Packit Service fb6fa5
  error = NULL;
Packit Service fb6fa5
  res = gtk_recent_manager_remove_item (manager, uri2, &error);
Packit Service fb6fa5
  g_assert (res == TRUE);
Packit Service fb6fa5
  g_assert (error == NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  res = gtk_recent_manager_has_item (manager, uri2);
Packit Service fb6fa5
  g_assert (res == FALSE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
recent_manager_purge (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkRecentManager *manager;
Packit Service fb6fa5
  GtkRecentData *recent_data;
Packit Service fb6fa5
  gint n;
Packit Service fb6fa5
  GError *error;
Packit Service fb6fa5
Packit Service fb6fa5
  manager = gtk_recent_manager_get_default ();
Packit Service fb6fa5
Packit Service fb6fa5
  /* purge, add 1, purge again and check that 1 item has been purged */
Packit Service fb6fa5
  error = NULL;
Packit Service fb6fa5
  n = gtk_recent_manager_purge_items (manager, &error);
Packit Service fb6fa5
  g_assert (error == NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  recent_data = g_slice_new0 (GtkRecentData);
Packit Service fb6fa5
  recent_data->mime_type = "text/plain";
Packit Service fb6fa5
  recent_data->app_name = "testrecentchooser";
Packit Service fb6fa5
  recent_data->app_exec = "testrecentchooser %u";
Packit Service fb6fa5
  gtk_recent_manager_add_full (manager, uri, recent_data);
Packit Service fb6fa5
  g_slice_free (GtkRecentData, recent_data);
Packit Service fb6fa5
Packit Service fb6fa5
  error = NULL;
Packit Service fb6fa5
  n = gtk_recent_manager_purge_items (manager, &error);
Packit Service fb6fa5
  g_assert (error == NULL);
Packit Service fb6fa5
  g_assert (n == 1);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
int
Packit Service fb6fa5
main (int    argc,
Packit Service fb6fa5
      char **argv)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gtk_test_init (&argc, &argv, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_test_add_func ("/recent-manager/get-default", recent_manager_get_default);
Packit Service fb6fa5
  g_test_add_func ("/recent-manager/add", recent_manager_add);
Packit Service fb6fa5
  g_test_add_func ("/recent-manager/add-many", recent_manager_add_many);
Packit Service fb6fa5
  g_test_add_func ("/recent-manager/has-item", recent_manager_has_item);
Packit Service fb6fa5
  g_test_add_func ("/recent-manager/move-item", recent_manager_move_item);
Packit Service fb6fa5
  g_test_add_func ("/recent-manager/lookup-item", recent_manager_lookup_item);
Packit Service fb6fa5
  g_test_add_func ("/recent-manager/remove-item", recent_manager_remove_item);
Packit Service fb6fa5
  g_test_add_func ("/recent-manager/purge", recent_manager_purge);
Packit Service fb6fa5
Packit Service fb6fa5
  return g_test_run ();
Packit Service fb6fa5
}