app: Introduce error margin in sessionrc in test cases

Introduce a few pixels of error margin in sessionrc, otherwise the
tests are too fragile, widgets have a tendency to change size a bit
and window managers have a tendency to move windows a bit.

Still needs more work, should probably do the same on book positions
too...
This commit is contained in:
Martin Nordholts
2010-06-19 23:24:23 +02:00
parent 4e78fc7279
commit 49d951d49e
5 changed files with 113 additions and 43 deletions

View File

@ -27,6 +27,8 @@
#include "menus/menus.h"
#include "widgets/gimpsessioninfo.h"
#include "base/base.h"
#include "config/gimpbaseconfig.h"
@ -81,12 +83,17 @@ gimp_status_func_dummy (const gchar *text1,
Gimp *
gimp_init_for_gui_testing (gboolean use_cpu_accel, gboolean show_gui)
{
Gimp *gimp;
GimpSessionInfoClass *klass;
Gimp *gimp;
/* from main() */
g_thread_init(NULL);
g_type_init();
/* Introduce an error margin for positions written to sessionrc */
klass = g_type_class_ref (GIMP_TYPE_SESSION_INFO);
gimp_session_info_class_set_position_accuracy (klass, 5);
/* from app_run() */
gimp = gimp_new ("Unit Tested GIMP", NULL, FALSE, TRUE, TRUE, !show_gui,
FALSE, TRUE, TRUE, FALSE);
@ -98,6 +105,8 @@ gimp_init_for_gui_testing (gboolean use_cpu_accel, gboolean show_gui)
gimp_initialize (gimp, gimp_status_func_dummy);
gimp_restore (gimp, gimp_status_func_dummy);
g_type_class_unref (klass);
return gimp;
}

View File

@ -2,8 +2,8 @@
(GimpSessionInfo "Palettes - FG/BG - Images"
(factory-entry "gimp-dock-window")
(position 586 116)
(size 200 573)
(position 585 115)
(size 200 575)
(open-on-exit)
(aux-info
(show-image-menu "false")
@ -27,7 +27,7 @@
(tab-style preview)))))
(GimpSessionInfo "Selection, Fonts"
(factory-entry "gimp-dock-window")
(position 200 179)
(position 200 180)
(size 200 300)
(open-on-exit)
(aux-info

View File

@ -7,7 +7,7 @@
(session-info "toplevel"
(factory-entry "gimp-dock-window")
(position 566 171)
(position 565 170)
(size 210 535)
(open-on-exit)
(aux-info
@ -28,8 +28,8 @@
(tab-style preview)))))
(session-info "toplevel"
(factory-entry "gimp-dock-window")
(position 141 291)
(size 406 300)
(position 140 290)
(size 405 300)
(open-on-exit)
(aux-info
(show-image-menu "false")
@ -46,7 +46,7 @@
(tab-style icon)))))
(session-info "toplevel"
(factory-entry "gimp-dock-window")
(position 795 43)
(position 795 45)
(size 200 265)
(open-on-exit)
(aux-info
@ -61,8 +61,8 @@
(tab-style preview)))))
(session-info "toplevel"
(factory-entry "gimp-dock-window")
(position 803 344)
(size 200 421)
(position 805 345)
(size 200 420)
(open-on-exit)
(aux-info
(show-image-menu "true")
@ -74,7 +74,7 @@
(tab-style automatic)
(preview-size 32)))
(book
(position 174)
(position 162)
(current-page 0)
(dockable "gimp-palette-editor"
(tab-style icon)
@ -84,14 +84,14 @@
(zoom-factor "2.80"))))))
(session-info "toplevel"
(factory-entry "gimp-file-open-dialog")
(position 392 140)
(size 902 816))
(position 390 140)
(size 900 815))
(session-info "toplevel"
(factory-entry "gimp-image-new-dialog")
(position 100 100))
(session-info "toplevel"
(factory-entry "gimp-empty-image-window")
(position 140 32)
(position 140 30)
(size 610 190))
(last-tip-shown 0)

View File

@ -138,8 +138,13 @@ gimp_session_info_serialize (GimpConfig *config,
GimpConfigWriter *writer,
gpointer data)
{
GimpSessionInfo *info = GIMP_SESSION_INFO (config);
GList *iter = NULL;
GimpSessionInfo *info = GIMP_SESSION_INFO (config);
GimpSessionInfoClass *klass = GIMP_SESSION_INFO_GET_CLASS (info);
GList *iter = NULL;
gint x_to_write;
gint y_to_write;
gint w_to_write;
gint h_to_write;
if (info->p->factory_entry && info->p->factory_entry->identifier)
{
@ -148,14 +153,23 @@ gimp_session_info_serialize (GimpConfig *config,
gimp_config_writer_close (writer);
}
x_to_write = gimp_session_info_class_apply_position_accuracy (klass,
info->p->x);
y_to_write = gimp_session_info_class_apply_position_accuracy (klass,
info->p->y);
w_to_write = gimp_session_info_class_apply_position_accuracy (klass,
info->p->width);
h_to_write = gimp_session_info_class_apply_position_accuracy (klass,
info->p->height);
gimp_config_writer_open (writer, "position");
gimp_config_writer_printf (writer, "%d %d", info->p->x, info->p->y);
gimp_config_writer_printf (writer, "%d %d", x_to_write, y_to_write);
gimp_config_writer_close (writer);
if (info->p->width > 0 && info->p->height > 0)
{
gimp_config_writer_open (writer, "size");
gimp_config_writer_printf (writer, "%d %d", info->p->width, info->p->height);
gimp_config_writer_printf (writer, "%d %d", w_to_write, h_to_write);
gimp_config_writer_close (writer);
}
@ -851,3 +865,44 @@ gimp_session_info_get_height (GimpSessionInfo *info)
return info->p->height;
}
/**
* gimp_session_info_class_set_position_accuracy:
* @accuracy:
*
* When writing sessionrc, make positions and sizes a multiple of
* @accuracy. Meant to be used by test cases that does regression
* testing on session managed window positions and sizes, to allow for
* some deviations from the original setup, that the window manager
* might impose.
**/
void
gimp_session_info_class_set_position_accuracy (GimpSessionInfoClass *klass,
gint accuracy)
{
g_return_if_fail (GIMP_IS_SESSION_INFO_CLASS (klass));
klass->position_accuracy = accuracy;
}
/**
* gimp_session_info_class_apply_position_accuracy:
* @position:
*
* Rounds @position to the nearest multiple of what was set with
* gimp_session_info_class_set_position_accuracy().
*
* Returns: Result.
**/
gint
gimp_session_info_class_apply_position_accuracy (GimpSessionInfoClass *klass,
gint position)
{
gint n = klass->position_accuracy;
gint to_floor;
g_return_val_if_fail (GIMP_IS_SESSION_INFO_CLASS (klass), position);
to_floor = position + n / 2;
return to_floor - to_floor % n;
}

View File

@ -52,34 +52,40 @@ struct _GimpSessionInfo
struct _GimpSessionInfoClass
{
GimpObjectClass parent_class;
gint position_accuracy;
};
GType gimp_session_info_get_type (void) G_GNUC_CONST;
GimpSessionInfo * gimp_session_info_new (void);
void gimp_session_info_restore (GimpSessionInfo *info,
GimpDialogFactory *factory);
void gimp_session_info_apply_geometry (GimpSessionInfo *info);
void gimp_session_info_read_geometry (GimpSessionInfo *info);
void gimp_session_info_get_info (GimpSessionInfo *info);
void gimp_session_info_clear_info (GimpSessionInfo *info);
gboolean gimp_session_info_is_singleton (GimpSessionInfo *info);
gboolean gimp_session_info_is_session_managed (GimpSessionInfo *info);
gboolean gimp_session_info_get_remember_size (GimpSessionInfo *info);
gboolean gimp_session_info_get_remember_if_open (GimpSessionInfo *info);
GtkWidget * gimp_session_info_get_widget (GimpSessionInfo *info);
void gimp_session_info_set_widget (GimpSessionInfo *info,
GtkWidget *widget);
GimpDialogFactoryEntry * gimp_session_info_get_factory_entry (GimpSessionInfo *info);
void gimp_session_info_set_factory_entry (GimpSessionInfo *info,
GimpDialogFactoryEntry *entry);
gboolean gimp_session_info_get_open (GimpSessionInfo *info);
void gimp_session_info_append_book (GimpSessionInfo *info,
GimpSessionInfoBook *book);
gint gimp_session_info_get_x (GimpSessionInfo *info);
gint gimp_session_info_get_y (GimpSessionInfo *info);
gint gimp_session_info_get_width (GimpSessionInfo *info);
gint gimp_session_info_get_height (GimpSessionInfo *info);
GType gimp_session_info_get_type (void) G_GNUC_CONST;
GimpSessionInfo * gimp_session_info_new (void);
void gimp_session_info_restore (GimpSessionInfo *info,
GimpDialogFactory *factory);
void gimp_session_info_apply_geometry (GimpSessionInfo *info);
void gimp_session_info_read_geometry (GimpSessionInfo *info);
void gimp_session_info_get_info (GimpSessionInfo *info);
void gimp_session_info_clear_info (GimpSessionInfo *info);
gboolean gimp_session_info_is_singleton (GimpSessionInfo *info);
gboolean gimp_session_info_is_session_managed (GimpSessionInfo *info);
gboolean gimp_session_info_get_remember_size (GimpSessionInfo *info);
gboolean gimp_session_info_get_remember_if_open (GimpSessionInfo *info);
GtkWidget * gimp_session_info_get_widget (GimpSessionInfo *info);
void gimp_session_info_set_widget (GimpSessionInfo *info,
GtkWidget *widget);
GimpDialogFactoryEntry * gimp_session_info_get_factory_entry (GimpSessionInfo *info);
void gimp_session_info_set_factory_entry (GimpSessionInfo *info,
GimpDialogFactoryEntry *entry);
gboolean gimp_session_info_get_open (GimpSessionInfo *info);
void gimp_session_info_append_book (GimpSessionInfo *info,
GimpSessionInfoBook *book);
gint gimp_session_info_get_x (GimpSessionInfo *info);
gint gimp_session_info_get_y (GimpSessionInfo *info);
gint gimp_session_info_get_width (GimpSessionInfo *info);
gint gimp_session_info_get_height (GimpSessionInfo *info);
void gimp_session_info_class_set_position_accuracy (GimpSessionInfoClass *klass,
gint accuracy);
gint gimp_session_info_class_apply_position_accuracy (GimpSessionInfoClass *klass,
gint position);
#endif /* __GIMP_SESSION_INFO_H__ */