diff options
Diffstat (limited to 'app/tests/test-save-and-export.c')
-rw-r--r-- | app/tests/test-save-and-export.c | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/app/tests/test-save-and-export.c b/app/tests/test-save-and-export.c new file mode 100644 index 0000000..180f61b --- /dev/null +++ b/app/tests/test-save-and-export.c @@ -0,0 +1,395 @@ +/* GIMP - The GNU Image Manipulation Program + * Copyright (C) 2009 Martin Nordholts <martinn@src.gnome.org> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include <stdlib.h> +#include <string.h> + +#include <gegl.h> +#include <glib/gstdio.h> +#include <gtk/gtk.h> + +#include "libgimpbase/gimpbase.h" +#include "libgimpmath/gimpmath.h" +#include "libgimpwidgets/gimpwidgets.h" + +#include "dialogs/dialogs-types.h" + +#include "core/gimp.h" +#include "core/gimpchannel.h" +#include "core/gimpcontext.h" +#include "core/gimpimage.h" +#include "core/gimplayer.h" +#include "core/gimptoolinfo.h" +#include "core/gimptooloptions.h" + +#include "plug-in/gimppluginmanager-file.h" + +#include "file/file-open.h" +#include "file/file-save.h" + +#include "widgets/gimpdialogfactory.h" +#include "widgets/gimpdock.h" +#include "widgets/gimpdockable.h" +#include "widgets/gimpdockbook.h" +#include "widgets/gimpdocked.h" +#include "widgets/gimpdockwindow.h" +#include "widgets/gimphelp-ids.h" +#include "widgets/gimpsessioninfo.h" +#include "widgets/gimptoolbox.h" +#include "widgets/gimptooloptionseditor.h" +#include "widgets/gimpuimanager.h" +#include "widgets/gimpwidgets-utils.h" + +#include "display/gimpdisplay.h" +#include "display/gimpdisplayshell.h" +#include "display/gimpdisplayshell-scale.h" +#include "display/gimpdisplayshell-transform.h" +#include "display/gimpimagewindow.h" + +#include "tests.h" + +#include "gimp-app-test-utils.h" + + +#define ADD_TEST(function) \ + g_test_add_data_func ("/gimp-save-and-export/" #function, gimp, function); + + +typedef gboolean (*GimpUiTestFunc) (GObject *object); + + +/** + * new_file_has_no_files: + * @data: + * + * Tests that the URIs are correct for a newly created image. + **/ +static void +new_file_has_no_files (gconstpointer data) +{ + Gimp *gimp = GIMP (data); + GimpImage *image = gimp_test_utils_create_image_from_dialog (gimp); + + g_assert (gimp_image_get_file (image) == NULL); + g_assert (gimp_image_get_imported_file (image) == NULL); + g_assert (gimp_image_get_exported_file (image) == NULL); +} + +/** + * opened_xcf_file_files: + * @data: + * + * Tests that GimpImage URIs are correct for an XCF file that has just + * been opened. + **/ +static void +opened_xcf_file_files (gconstpointer data) +{ + Gimp *gimp = GIMP (data); + GimpImage *image; + GFile *file; + gchar *filename; + GimpPDBStatusType status; + + filename = g_build_filename (g_getenv ("GIMP_TESTING_ABS_TOP_SRCDIR"), + "app/tests/files/gimp-2-6-file.xcf", + NULL); + file = g_file_new_for_path (filename); + g_free (filename); + + image = file_open_image (gimp, + gimp_get_user_context (gimp), + NULL /*progress*/, + file, + file, + FALSE /*as_new*/, + NULL /*file_proc*/, + GIMP_RUN_NONINTERACTIVE, + &status, + NULL /*mime_type*/, + NULL /*error*/); + + g_assert (g_file_equal (gimp_image_get_file (image), file)); + g_assert (gimp_image_get_imported_file (image) == NULL); + g_assert (gimp_image_get_exported_file (image) == NULL); + + g_object_unref (file); +} + +/** + * imported_file_files: + * @data: + * + * Tests that URIs are correct for an imported image. + **/ +static void +imported_file_files (gconstpointer data) +{ + Gimp *gimp = GIMP (data); + GimpImage *image; + GFile *file; + gchar *filename; + GimpPDBStatusType status; + + filename = g_build_filename (g_getenv ("GIMP_TESTING_ABS_TOP_SRCDIR"), + "desktop/64x64/gimp.png", + NULL); + g_assert (g_file_test (filename, G_FILE_TEST_EXISTS)); + file = g_file_new_for_path (filename); + g_free (filename); + + image = file_open_image (gimp, + gimp_get_user_context (gimp), + NULL /*progress*/, + file, + file, + FALSE /*as_new*/, + NULL /*file_proc*/, + GIMP_RUN_NONINTERACTIVE, + &status, + NULL /*mime_type*/, + NULL /*error*/); + + g_assert (gimp_image_get_file (image) == NULL); + g_assert (g_file_equal (gimp_image_get_imported_file (image), file)); + g_assert (gimp_image_get_exported_file (image) == NULL); + + g_object_unref (file); +} + +/** + * saved_imported_file_files: + * @data: + * + * Tests that the URIs are correct for an image that has been imported + * and then saved. + **/ +static void +saved_imported_file_files (gconstpointer data) +{ + Gimp *gimp = GIMP (data); + GimpImage *image; + GFile *import_file; + gchar *import_filename; + GFile *save_file; + gchar *save_filename; + GimpPDBStatusType status; + GimpPlugInProcedure *proc; + + import_filename = g_build_filename (g_getenv ("GIMP_TESTING_ABS_TOP_SRCDIR"), + "desktop/64x64/gimp.png", + NULL); + import_file = g_file_new_for_path (import_filename); + g_free (import_filename); + + save_filename = g_build_filename (g_get_tmp_dir (), "gimp-test.xcf", NULL); + save_file = g_file_new_for_path (save_filename); + g_free (save_filename); + + /* Import */ + image = file_open_image (gimp, + gimp_get_user_context (gimp), + NULL /*progress*/, + import_file, + import_file, + FALSE /*as_new*/, + NULL /*file_proc*/, + GIMP_RUN_NONINTERACTIVE, + &status, + NULL /*mime_type*/, + NULL /*error*/); + + g_object_unref (import_file); + + /* Save */ + proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager, + GIMP_FILE_PROCEDURE_GROUP_SAVE, + save_file, + NULL /*error*/); + file_save (gimp, + image, + NULL /*progress*/, + save_file, + proc, + GIMP_RUN_NONINTERACTIVE, + TRUE /*change_saved_state*/, + FALSE /*export_backward*/, + FALSE /*export_forward*/, + NULL /*error*/); + + /* Assert */ + g_assert (g_file_equal (gimp_image_get_file (image), save_file)); + g_assert (gimp_image_get_imported_file (image) == NULL); + g_assert (gimp_image_get_exported_file (image) == NULL); + + g_file_delete (save_file, NULL, NULL); + g_object_unref (save_file); +} + +/** + * exported_file_files: + * @data: + * + * Tests that the URIs for an exported, newly created file are + * correct. + **/ +static void +exported_file_files (gconstpointer data) +{ + GFile *save_file; + gchar *save_filename; + GimpPlugInProcedure *proc; + Gimp *gimp = GIMP (data); + GimpImage *image = gimp_test_utils_create_image_from_dialog (gimp); + + save_filename = g_build_filename (g_get_tmp_dir (), "gimp-test.png", NULL); + save_file = g_file_new_for_path (save_filename); + g_free (save_filename); + + proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager, + GIMP_FILE_PROCEDURE_GROUP_EXPORT, + save_file, + NULL /*error*/); + file_save (gimp, + image, + NULL /*progress*/, + save_file, + proc, + GIMP_RUN_NONINTERACTIVE, + FALSE /*change_saved_state*/, + FALSE /*export_backward*/, + TRUE /*export_forward*/, + NULL /*error*/); + + g_assert (gimp_image_get_file (image) == NULL); + g_assert (gimp_image_get_imported_file (image) == NULL); + g_assert (g_file_equal (gimp_image_get_exported_file (image), save_file)); + + g_file_delete (save_file, NULL, NULL); + g_object_unref (save_file); +} + +/** + * clear_import_file_after_export: + * @data: + * + * Tests that after a XCF file that was imported has been exported, + * the import URI is cleared. An image can not be considered both + * imported and exported at the same time. + **/ +static void +clear_import_file_after_export (gconstpointer data) +{ + Gimp *gimp = GIMP (data); + GimpImage *image; + GFile *file; + gchar *filename; + GFile *save_file; + gchar *save_filename; + GimpPlugInProcedure *proc; + GimpPDBStatusType status; + + filename = g_build_filename (g_getenv ("GIMP_TESTING_ABS_TOP_SRCDIR"), + "desktop/64x64/gimp.png", + NULL); + file = g_file_new_for_path (filename); + g_free (filename); + + image = file_open_image (gimp, + gimp_get_user_context (gimp), + NULL /*progress*/, + file, + file, + FALSE /*as_new*/, + NULL /*file_proc*/, + GIMP_RUN_NONINTERACTIVE, + &status, + NULL /*mime_type*/, + NULL /*error*/); + + g_assert (gimp_image_get_file (image) == NULL); + g_assert (g_file_equal (gimp_image_get_imported_file (image), file)); + g_assert (gimp_image_get_exported_file (image) == NULL); + + g_object_unref (file); + + save_filename = g_build_filename (g_get_tmp_dir (), "gimp-test.png", NULL); + save_file = g_file_new_for_path (save_filename); + g_free (save_filename); + + proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager, + GIMP_FILE_PROCEDURE_GROUP_EXPORT, + save_file, + NULL /*error*/); + file_save (gimp, + image, + NULL /*progress*/, + save_file, + proc, + GIMP_RUN_NONINTERACTIVE, + FALSE /*change_saved_state*/, + FALSE /*export_backward*/, + TRUE /*export_forward*/, + NULL /*error*/); + + g_assert (gimp_image_get_file (image) == NULL); + g_assert (gimp_image_get_imported_file (image) == NULL); + g_assert (g_file_equal (gimp_image_get_exported_file (image), save_file)); + + g_file_delete (save_file, NULL, NULL); + g_object_unref (save_file); +} + +int +main(int argc, + char **argv) +{ + Gimp *gimp = NULL; + gint result = -1; + + gimp_test_bail_if_no_display (); + gtk_test_init (&argc, &argv, NULL); + + gimp_test_utils_set_gimp2_directory ("GIMP_TESTING_ABS_TOP_SRCDIR", + "app/tests/gimpdir"); + gimp_test_utils_setup_menus_path (); + + /* Start up GIMP */ + gimp = gimp_init_for_gui_testing (TRUE /*show_gui*/); + gimp_test_run_mainloop_until_idle (); + + ADD_TEST (new_file_has_no_files); + ADD_TEST (opened_xcf_file_files); + ADD_TEST (imported_file_files); + ADD_TEST (saved_imported_file_files); + ADD_TEST (exported_file_files); + ADD_TEST (clear_import_file_after_export); + + /* Run the tests and return status */ + result = g_test_run (); + + /* Don't write files to the source dir */ + gimp_test_utils_set_gimp2_directory ("GIMP_TESTING_ABS_TOP_BUILDDIR", + "app/tests/gimpdir-output"); + + /* Exit properly so we don't break script-fu plug-in wire */ + gimp_exit (gimp, TRUE); + + return result; +} |