[gimp] app/tests: Add dockrc to session regression testing



commit fca590925be74f68b0f813d1df21d2f599bc91e0
Author: Martin Nordholts <martinn src gnome org>
Date:   Sat Sep 19 12:52:09 2009 +0200

    app/tests: Add dockrc to session regression testing
    
    Add dockrc to session regression testing and do some general cleanups
    and generalizations in the test.

 app/tests/gimpdir/.gitignore        |    1 -
 app/tests/gimpdir/dockrc            |   42 ++++++++++++
 app/tests/test-session-management.c |  123 ++++++++++++++++++++++------------
 3 files changed, 121 insertions(+), 45 deletions(-)
---
diff --git a/app/tests/gimpdir/.gitignore b/app/tests/gimpdir/.gitignore
index b7d4064..a1b9727 100644
--- a/app/tests/gimpdir/.gitignore
+++ b/app/tests/gimpdir/.gitignore
@@ -1,6 +1,5 @@
 /colorrc
 /controllerrc
-/dockrc
 /menurc
 /parasiterc
 /pluginrc
diff --git a/app/tests/gimpdir/dockrc b/app/tests/gimpdir/dockrc
new file mode 100644
index 0000000..305ddee
--- /dev/null
+++ b/app/tests/gimpdir/dockrc
@@ -0,0 +1,42 @@
+# recently closed docks
+
+(GimpSessionInfo "Palettes - FG/BG - Images"
+    (position 586 116)
+    (size 200 573)
+    (open-on-exit)
+    (aux-info
+        (show-image-menu "false")
+        (follow-active-image "true"))
+    (dock
+        (book
+            (current-page 0)
+            (dockable "gimp-palette-list"
+                (tab-style preview)))
+        (book
+            (position 141)
+            (current-page 0)
+            (dockable "gimp-color-editor"
+                (tab-style preview)
+                (aux-info
+                    (current-page "GimpColorSelect"))))
+        (book
+            (position 414)
+            (current-page 0)
+            (dockable "gimp-image-list"
+                (tab-style preview)))))
+(GimpSessionInfo "Selection, Fonts"
+    (position 200 179)
+    (size 200 300)
+    (open-on-exit)
+    (aux-info
+        (show-image-menu "false")
+        (follow-active-image "true"))
+    (dock
+        (book
+            (current-page 1)
+            (dockable "gimp-selection-editor"
+                (tab-style icon))
+            (dockable "gimp-font-list"
+                (tab-style preview)))))
+
+# end of recently closed docks
diff --git a/app/tests/test-session-management.c b/app/tests/test-session-management.c
index 83d60ce..79faf0a 100644
--- a/app/tests/test-session-management.c
+++ b/app/tests/test-session-management.c
@@ -41,63 +41,79 @@ typedef struct
   int dummy;
 } GimpTestFixture;
 
+typedef struct
+{
+  gchar    *md5;
+  GTimeVal  modtime;
+} GimpTestFileState;
 
-static gboolean gimp_test_get_sessionrc_timestamp_and_md5 (gchar    **checksum,
-                                                           GTimeVal  *modtime);
+
+static gboolean  gimp_test_get_file_state_verbose (gchar             *filename,
+                                                   GimpTestFileState *filestate);
+static gboolean  gimp_test_file_state_changes     (gchar             *filename,
+                                                   GimpTestFileState *state1,
+                                                   GimpTestFileState *state2);
 
 static Gimp *gimp = NULL;
 
 
 int main(int argc, char **argv)
 {
-  gchar    *initial_md5     = NULL;
-  gchar    *final_md5       = NULL;
-  GTimeVal  initial_modtime = { 0, };
-  GTimeVal  final_modtime   = { 0, };
+  GimpTestFileState  initial_sessionrc_state = { NULL, { 0, 0 } };
+  GimpTestFileState  initial_dockrc_state    = { NULL, { 0, 0 } };
+  GimpTestFileState  final_sessionrc_state   = { NULL, { 0, 0 } };
+  GimpTestFileState  final_dockrc_state      = { NULL, { 0, 0 } };
+  gchar             *sessionrc_filename      = gimp_personal_rc_file ("sessionrc");
+  gchar             *dockrc_filename         = gimp_personal_rc_file ("dockrc");
 
   g_type_init ();
   gtk_init (&argc, &argv);
   g_test_init (&argc, &argv, NULL);
 
-  /* Remeber the timestamp and MD5 on sessionrc */
-  if (!gimp_test_get_sessionrc_timestamp_and_md5 (&initial_md5,
-                                                  &initial_modtime))
+  /* Remeber the modtimes and MD5s */
+  if (!gimp_test_get_file_state_verbose (sessionrc_filename,
+                                         &initial_sessionrc_state))
+    goto fail;
+  if (!gimp_test_get_file_state_verbose (dockrc_filename,
+                                         &initial_dockrc_state))
     goto fail;
 
-  /* Start up GIMP and let the main loop run for a while (quits after
-   * a short timeout) to let things stabilize. This includes parsing
-   * sessionrc
-   */
+  /* Start up GIMP */
   gimp = gimp_init_for_gui_testing (FALSE, TRUE);
+
+  /* Let the main loop run for a while (quits after a short timeout)
+   * to let things stabilize. This includes parsing sessionrc and
+   * dockrc
+   */
   gimp_test_run_temp_mainloop (4000);
 
-  /* Exit. This includes writing sessionrc */
+  /* Exit. This includes writing sessionrc and dockrc*/
   gimp_exit (gimp, TRUE);
 
-  /* Now get the new MD5 and modtime */
-  if (!gimp_test_get_sessionrc_timestamp_and_md5 (&final_md5,
-                                                  &final_modtime))
+  /* Now get the new modtimes and MD5s */
+  if (!gimp_test_get_file_state_verbose (sessionrc_filename,
+                                         &final_sessionrc_state))
+    goto fail;
+  if (!gimp_test_get_file_state_verbose (dockrc_filename,
+                                         &final_dockrc_state))
     goto fail;
 
   /* If things have gone our way, GIMP will have deserialized
-   * sessionrc, shown the GUI, and then serialized the new sessionrc.
-   * To make sure we have a new sessionrc we check the modtime, and to
-   * make sure that the sessionrc remains the same we compare its MD5
+   * sessionrc and dockrc, shown the GUI, and then serialized the new
+   * files. To make sure we have new files we check the modtime, and
+   * to make sure that their content remains the same we compare their
+   * MD5
    */
-  if (initial_modtime.tv_sec == final_modtime.tv_sec)
-    {
-      g_printerr ("A new sessionrc was not created\n");
-      goto fail;
-    }
-  if (strcmp (initial_md5, final_md5) != 0)
-    {
-      g_printerr ("The new sessionrc is not identical to the old one\n");
-      goto fail;
-    }
-
-  g_free (initial_md5);
-  g_free (final_md5);
+  if (!gimp_test_file_state_changes ("sessionrc",
+                                     &initial_sessionrc_state,
+                                     &final_sessionrc_state))
+    goto fail;
+  if (!gimp_test_file_state_changes ("dockrc",
+                                     &initial_dockrc_state,
+                                     &final_dockrc_state))
+    goto fail;
 
+  /* Don't bother freeing stuff, the process is short-lived */
   return 0;
 
  fail:
@@ -105,13 +121,10 @@ int main(int argc, char **argv)
 }
 
 static gboolean
-gimp_test_get_sessionrc_timestamp_and_md5 (gchar    **checksum,
-                                           GTimeVal  *modtime)
+gimp_test_get_file_state_verbose (gchar             *filename,
+                                  GimpTestFileState *filestate)
 {
-  gchar    *filename = NULL;
-  gboolean  success  = TRUE;
-
-  filename = gimp_personal_rc_file ("sessionrc");
+  gboolean success = TRUE;
 
   /* Get checksum */
   if (success)
@@ -125,9 +138,9 @@ gimp_test_get_sessionrc_timestamp_and_md5 (gchar    **checksum,
                                      NULL);
       if (success)
         {
-          *checksum = g_compute_checksum_for_string (G_CHECKSUM_MD5,
-                                                     contents,
-                                                     length);
+          filestate->md5 = g_compute_checksum_for_string (G_CHECKSUM_MD5,
+                                                          contents,
+                                                          length);
         }
 
       g_free (contents);
@@ -142,7 +155,7 @@ gimp_test_get_sessionrc_timestamp_and_md5 (gchar    **checksum,
                                            NULL, NULL);
       if (info)
         {
-          g_file_info_get_modification_time (info, modtime);
+          g_file_info_get_modification_time (info, &filestate->modtime);
           success = TRUE;
           g_object_unref (info);
         }
@@ -154,7 +167,29 @@ gimp_test_get_sessionrc_timestamp_and_md5 (gchar    **checksum,
       g_object_unref (file);
     }
 
-  g_free (filename);
+  if (! success)
+    g_printerr ("Failed to get initial file info for '%s'\n", filename);
 
   return success;
 }
+
+static gboolean
+gimp_test_file_state_changes (gchar             *filename,
+                              GimpTestFileState *state1,
+                              GimpTestFileState *state2)
+{
+  if (state1->modtime.tv_sec  == state2->modtime.tv_sec &&
+      state1->modtime.tv_usec == state2->modtime.tv_usec)
+    {
+      g_printerr ("A new '%s' was not created\n", filename);
+      return FALSE;
+    }
+
+  if (strcmp (state1->md5, state2->md5) != 0)
+    {
+      g_printerr ("'%s' was changed but should not have been\n", filename);
+      return FALSE;
+    }
+
+  return TRUE;
+}



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