[gimp] app/tests: Add regression test for hide/show of dock windows
- From: Martin Nordholts <martinn src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app/tests: Add regression test for hide/show of dock windows
- Date: Thu, 18 Feb 2010 06:24:56 +0000 (UTC)
commit b081d9137096924f5a1662f5d58d5476ab53d22c
Author: Martin Nordholts <martinn src gnome org>
Date: Thu Feb 18 07:22:40 2010 +0100
app/tests: Add regression test for hide/show of dock windows
Add regression test for hide/show of dock windows that makes sure that
dock window positions are kept after a hide/show cycle. Also introduce
a helper function gimp_ui_find_non_toolbox_dock_window().
app/tests/test-ui.c | 139 +++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 113 insertions(+), 26 deletions(-)
---
diff --git a/app/tests/test-ui.c b/app/tests/test-ui.c
index c30d017..59470bf 100644
--- a/app/tests/test-ui.c
+++ b/app/tests/test-ui.c
@@ -15,10 +15,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <stdlib.h>
+
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include "libgimpbase/gimpbase.h"
+#include "libgimpmath/gimpmath.h"
#include "dialogs/dialogs-types.h"
@@ -45,24 +48,30 @@
#include "gimp-app-test-utils.h"
+#define GIMP_UI_POSITION_EPSILON 10
+
+
typedef struct
{
int avoid_sizeof_zero;
} GimpTestFixture;
-static void gimp_ui_tool_options_editor_updates (GimpTestFixture *fixture,
- gconstpointer data);
-static void gimp_ui_create_new_image_via_dialog (GimpTestFixture *fixture,
- gconstpointer data);
-static void gimp_ui_restore_recently_closed_dock (GimpTestFixture *fixture,
- gconstpointer data);
-static void gimp_ui_switch_to_single_window_mode (GimpTestFixture *fixture,
- gconstpointer data);
-static void gimp_ui_switch_back_to_multi_window_mode (GimpTestFixture *fixture,
- gconstpointer data);
-static GimpUIManager * gimp_ui_get_ui_manager (Gimp *gimp);
-static void gimp_ui_synthesize_delete_event (GtkWidget *widget);
+static void gimp_ui_tool_options_editor_updates (GimpTestFixture *fixture,
+ gconstpointer data);
+static void gimp_ui_create_new_image_via_dialog (GimpTestFixture *fixture,
+ gconstpointer data);
+static void gimp_ui_restore_recently_closed_dock (GimpTestFixture *fixture,
+ gconstpointer data);
+static void gimp_ui_tab_toggle_dont_change_position (GimpTestFixture *fixture,
+ gconstpointer data);
+static void gimp_ui_switch_to_single_window_mode (GimpTestFixture *fixture,
+ gconstpointer data);
+static void gimp_ui_switch_back_to_multi_window_mode (GimpTestFixture *fixture,
+ gconstpointer data);
+static GimpUIManager * gimp_ui_get_ui_manager (Gimp *gimp);
+static void gimp_ui_synthesize_delete_event (GtkWidget *widget);
+static GtkWidget * gimp_ui_find_non_toolbox_dock_window (GimpDialogFactory *dialog_factory);
int main(int argc, char **argv)
@@ -101,6 +110,12 @@ int main(int argc, char **argv)
NULL,
gimp_ui_restore_recently_closed_dock,
NULL);
+ g_test_add ("/gimp-ui/tab-toggle-dont-change-dock-window-position",
+ GimpTestFixture,
+ gimp,
+ NULL,
+ gimp_ui_tab_toggle_dont_change_position,
+ NULL);
g_test_add ("/gimp-ui/switch-to-single-window-mode",
GimpTestFixture,
gimp,
@@ -229,7 +244,6 @@ gimp_ui_restore_recently_closed_dock (GimpTestFixture *fixture,
gconstpointer data)
{
Gimp *gimp = GIMP (data);
- GList *iter = NULL;
GtkWidget *dock_window = NULL;
gint n_session_infos_before_close = -1;
gint n_session_infos_after_close = -1;
@@ -237,19 +251,7 @@ gimp_ui_restore_recently_closed_dock (GimpTestFixture *fixture,
GList *session_infos = NULL;
/* Find a non-toolbox dock window */
- for (iter = gimp_dialog_factory_get_session_infos (global_dock_factory);
- iter;
- iter = g_list_next (iter))
- {
- GtkWidget *widget = gimp_session_info_get_widget (iter->data);
-
- if (GIMP_IS_DOCK_WINDOW (widget) &&
- ! gimp_dock_window_has_toolbox (GIMP_DOCK_WINDOW (widget)))
- {
- dock_window = widget;
- break;
- }
- }
+ dock_window = gimp_ui_find_non_toolbox_dock_window (global_dock_factory);
g_assert (dock_window != NULL);
/* Count number of docks */
@@ -282,6 +284,68 @@ gimp_ui_restore_recently_closed_dock (GimpTestFixture *fixture,
n_session_infos_after_restore);
}
+/**
+ * gimp_ui_tab_toggle_dont_change_position:
+ * @fixture:
+ * @data:
+ *
+ * Makes sure that when dock windows are hidden with Tab and shown
+ * again, their positions and sizes are not changed. We don't really
+ * use Tab though, we only simulate its effect.
+ **/
+static void
+gimp_ui_tab_toggle_dont_change_position (GimpTestFixture *fixture,
+ gconstpointer data)
+{
+ GtkWidget *dock_window = NULL;
+ gint x_before_hide = -1;
+ gint y_before_hide = -1;
+ gint w_before_hide = -1;
+ gint h_before_hide = -1;
+ gint x_after_show = -1;
+ gint y_after_show = -1;
+ gint w_after_show = -1;
+ gint h_after_show = -1;
+
+ /* Find a non-toolbox dock window */
+ dock_window = gimp_ui_find_non_toolbox_dock_window (global_dock_factory);
+ g_assert (dock_window != NULL);
+ g_assert (gtk_widget_get_visible (dock_window));
+
+ /* Get the position and size */
+ gimp_test_run_mainloop_until_idle ();
+ gtk_window_get_position (GTK_WINDOW (dock_window),
+ &x_before_hide,
+ &y_before_hide);
+ gtk_window_get_size (GTK_WINDOW (dock_window),
+ &w_before_hide,
+ &h_before_hide);
+
+ /* Hide all dock windows */
+ gimp_dialog_factories_toggle ();
+ gimp_test_run_mainloop_until_idle ();
+ g_assert (! gtk_widget_get_visible (dock_window));
+
+ /* Show them again */
+ gimp_dialog_factories_toggle ();
+ gimp_test_run_mainloop_until_idle ();
+ g_assert (gtk_widget_get_visible (dock_window));
+
+ /* Get the position and size again and make sure it's the same as
+ * before
+ */
+ gtk_window_get_position (GTK_WINDOW (dock_window),
+ &x_after_show,
+ &y_after_show);
+ gtk_window_get_size (GTK_WINDOW (dock_window),
+ &w_after_show,
+ &h_after_show);
+ g_assert_cmpint ((int)abs (x_before_hide - x_after_show), <, GIMP_UI_POSITION_EPSILON);
+ g_assert_cmpint ((int)abs (y_before_hide - y_after_show), <, GIMP_UI_POSITION_EPSILON);
+ g_assert_cmpint ((int)abs (w_before_hide - w_after_show), <, GIMP_UI_POSITION_EPSILON);
+ g_assert_cmpint ((int)abs (h_before_hide - h_after_show), <, GIMP_UI_POSITION_EPSILON);
+}
+
static void
gimp_ui_switch_to_single_window_mode (GimpTestFixture *fixture,
gconstpointer data)
@@ -358,3 +422,26 @@ gimp_ui_synthesize_delete_event (GtkWidget *widget)
gtk_main_do_event (event);
gdk_event_free (event);
}
+
+static GtkWidget *
+gimp_ui_find_non_toolbox_dock_window (GimpDialogFactory *dialog_factory)
+{
+ GList *iter = NULL;
+ GtkWidget *dock_window = NULL;
+
+ for (iter = gimp_dialog_factory_get_session_infos (dialog_factory);
+ iter;
+ iter = g_list_next (iter))
+ {
+ GtkWidget *widget = gimp_session_info_get_widget (iter->data);
+
+ if (GIMP_IS_DOCK_WINDOW (widget) &&
+ ! gimp_dock_window_has_toolbox (GIMP_DOCK_WINDOW (widget)))
+ {
+ dock_window = widget;
+ break;
+ }
+ }
+
+ return dock_window;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]