glib r6699 - in trunk/gio: . tests



Author: tbzatek
Date: Thu Mar 13 16:32:31 2008
New Revision: 6699
URL: http://svn.gnome.org/viewvc/glib?rev=6699&view=rev

Log:
2008-03-13  Tomas Bzatek  <tbzatek redhat com>

        * tests/live-g-file.c:
        Include live-g-file in standard set of tests, making a temporary
        directory in source structure.

        Clean target directory before the tests (write mode only)



Modified:
   trunk/gio/ChangeLog
   trunk/gio/tests/live-g-file.c

Modified: trunk/gio/tests/live-g-file.c
==============================================================================
--- trunk/gio/tests/live-g-file.c	(original)
+++ trunk/gio/tests/live-g-file.c	Thu Mar 13 16:32:31 2008
@@ -26,6 +26,9 @@
 #include <stdlib.h>
 #include <string.h>
 
+
+#define DEFAULT_TEST_DIR		"testdir_live-g-file"
+
 #define PATTERN_FILE_SIZE	0x10000
 #define TEST_HANDLE_SPECIAL	TRUE
 
@@ -1009,10 +1012,78 @@
   g_object_unref (root);
 }
 
+
+static void
+cleanup_dir_recurse (GFile *parent, GFile *root)
+{
+  gboolean res;
+  GError *error;
+  GFileEnumerator *enumerator;
+  GFileInfo *info;
+  GFile *descend;
+  char *relative_path;
+
+  g_assert (root != NULL);
+
+  error = NULL;
+  enumerator =
+    g_file_enumerate_children (parent, "*",
+			       G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL,
+			       &error);
+  if (! enumerator)
+	  return;
+
+  error = NULL;
+  info = g_file_enumerator_next_file (enumerator, NULL, &error);
+  while ((info) && (!error))
+    {
+      descend = g_file_get_child (parent, g_file_info_get_name (info));
+      g_assert (descend != NULL);
+      relative_path = g_file_get_relative_path (root, descend);
+      g_assert (relative_path != NULL);
+
+      log ("    deleting '%s'\n", g_file_info_get_display_name (info));
+
+      if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
+    	  cleanup_dir_recurse (descend, root);
+      
+      error = NULL;
+      res = g_file_delete (descend, NULL, &error);
+      g_assert_cmpint (res, ==, TRUE);
+
+      g_object_unref (descend);
+      error = NULL;
+      info = g_file_enumerator_next_file (enumerator, NULL, &error);
+    }
+  g_assert (error == NULL);
+
+  error = NULL;
+  res = g_file_enumerator_close (enumerator, NULL, &error);
+  g_assert_cmpint (res, ==, TRUE);
+  g_assert (error == NULL);
+}
+
+static void
+prep_clean_structure (gconstpointer test_data)
+{
+  GFile *root;
+  
+  g_assert (test_data != NULL);
+  log ("\n  Cleaning target testing structure in '%s'...\n",
+       (char *) test_data);
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  
+  cleanup_dir_recurse (root, root);
+
+  g_object_unref (root);
+}
+
 int
 main (int argc, char *argv[])
 {
-  static gboolean create_struct;
+  static gboolean only_create_struct;
   static char *target_path;
   GError *error;
   GOptionContext *context;
@@ -1020,7 +1091,7 @@
   static GOptionEntry cmd_entries[] = {
     {"read-write", 'w', 0, G_OPTION_ARG_NONE, &write_test,
      "Perform write tests (incl. structure creation)", NULL},
-    {"create-struct", 'c', 0, G_OPTION_ARG_NONE, &create_struct,
+    {"create-struct", 'c', 0, G_OPTION_ARG_NONE, &only_create_struct,
      "Only create testing structure (no tests)", NULL},
     {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Be verbose", NULL},
     {"posix", 'x', 0, G_OPTION_ARG_NONE, &posix_compat,
@@ -1030,7 +1101,7 @@
 
   verbose = FALSE;
   write_test = FALSE;
-  create_struct = FALSE;
+  only_create_struct = FALSE;
   target_path = NULL;
   posix_compat = FALSE;
 
@@ -1038,6 +1109,20 @@
   g_type_init ();
   g_test_init (&argc, &argv, NULL);
 
+  /*  no extra parameters specified, assume we're executed from glib test suite  */ 
+  if (argc < 2)
+    {
+	  verbose = TRUE;
+	  write_test = TRUE;
+	  only_create_struct = FALSE;
+	  target_path = DEFAULT_TEST_DIR;
+#ifdef G_PLATFORM_WIN32
+	  posix_compat = FALSE;
+#else
+	  posix_compat = TRUE;
+#endif
+    }
+  
   /*  add trailing args  */
   error = NULL;
   context = g_option_context_new ("target_path");
@@ -1048,50 +1133,60 @@
       return g_test_run ();
     }
 
-  /*  missing mandatory arg for target dir  */
-  if (argc < 2)
+  /*  remaining arg should is the target path; we don't care of the extra args here  */ 
+  if (argc >= 2)
+    target_path = strdup (argv[1]);
+  
+  if (! target_path) 
     {
+      g_print ("error: target path was not specified\n");
       g_print (g_option_context_get_help (context, TRUE, NULL));
       return g_test_run ();
     }
-  target_path = strdup (argv[1]);
 
+  
+  /*  Write test - clean target directory first  */
+  /*    this can be also considered as a test - enumerate + delete  */ 
+  if (write_test || only_create_struct)
+    g_test_add_data_func ("/live-g-file/prep_clean_structure", target_path,
+    	  	  prep_clean_structure);
+  
   /*  Write test - create new testing structure  */
-  if (write_test || create_struct)
+  if (write_test || only_create_struct)
     g_test_add_data_func ("/live-g-file/create_structure", target_path,
 			  test_create_structure);
 
   /*  Read test - test the sample structure - expect defined attributes to be there  */
-  if (!create_struct)
+  if (!only_create_struct)
     g_test_add_data_func ("/live-g-file/test_initial_structure", target_path,
 			  test_initial_structure);
 
   /*  Read test - test traverse the structure - no special file should appear  */
-  if (!create_struct)
+  if (!only_create_struct)
     g_test_add_data_func ("/live-g-file/test_traverse_structure", target_path,
 			  test_traverse_structure);
 
   /*  Read test - enumerate  */
-  if (!create_struct)
+  if (!only_create_struct)
     g_test_add_data_func ("/live-g-file/test_enumerate", target_path,
 			  test_enumerate);
 
   /*  Read test - open (g_file_read())  */
-  if (!create_struct)
+  if (!only_create_struct)
     g_test_add_data_func ("/live-g-file/test_open", target_path, test_open);
 
   /*  Write test - create  */
-  if (write_test && (!create_struct))
+  if (write_test && (!only_create_struct))
     g_test_add_data_func ("/live-g-file/test_create", target_path,
 			  test_create);
 
   /*  Write test - copy, move  */
-  if (write_test && (!create_struct))
+  if (write_test && (!only_create_struct))
     g_test_add_data_func ("/live-g-file/test_copy_move", target_path,
 			  test_copy_move);
 
   /*  Write test - delete, trash  */
-  if (write_test && (!create_struct))
+  if (write_test && (!only_create_struct))
     g_test_add_data_func ("/live-g-file/test_delete", target_path,
 			  test_delete);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]