/* GIMP - The GNU Image Manipulation Program * Copyright (C) 2009 Martin Nordholts * * 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 . */ #include #include #include #include #include #include #include "libgimpbase/gimpbase.h" #include "libgimpmath/gimpmath.h" #include "libgimpwidgets/gimpwidgets.h" #include "dialogs/dialogs-types.h" #include "display/gimpdisplay.h" #include "display/gimpdisplayshell.h" #include "display/gimpdisplayshell-scale.h" #include "display/gimpdisplayshell-transform.h" #include "display/gimpimagewindow.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 "file/file-open.h" #include "file/file-procedure.h" #include "file/file-save.h" #include "file/file-utils.h" #include "plug-in/gimppluginmanager.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 "tests.h" #include "gimp-app-test-utils.h" #define ADD_TEST(function) \ g_test_add ("/gimp-save-and-export/" #function, \ GimpTestFixture, \ gimp, \ NULL, \ function, \ NULL); typedef gboolean (*GimpUiTestFunc) (GObject *object); typedef struct { int avoid_sizeof_zero; } GimpTestFixture; /** * new_file_has_no_uris: * @fixture: * @data: * * Tests that the URIs are correct for a newly created image. **/ static void new_file_has_no_uris (GimpTestFixture *fixture, gconstpointer data) { Gimp *gimp = GIMP (data); GimpImage *image = gimp_test_utils_create_image_from_dalog (gimp); g_assert (gimp_image_get_uri (image) == NULL); g_assert (gimp_image_get_imported_uri (image) == NULL); g_assert (gimp_image_get_exported_uri (image) == NULL); } /** * opened_xcf_file_uris: * @fixture: * @data: * * Tests that GimpImage URIs are correct for an XCF file that has just * been opened. **/ static void opened_xcf_file_uris (GimpTestFixture *fixture, gconstpointer data) { Gimp *gimp = GIMP (data); GimpImage *image; gchar *uri; gchar *filename; GimpPDBStatusType status; filename = g_build_filename (g_getenv ("GIMP_TESTING_ABS_TOP_SRCDIR"), "app/tests/files/gimp-2-6-file.xcf", NULL); uri = g_filename_to_uri (filename, NULL, NULL); image = file_open_image (gimp, gimp_get_user_context (gimp), NULL /*progress*/, uri, filename, FALSE /*as_new*/, NULL /*file_proc*/, GIMP_RUN_NONINTERACTIVE, &status, NULL /*mime_type*/, NULL /*error*/); g_assert_cmpstr (gimp_image_get_uri (image), ==, uri); g_assert (gimp_image_get_imported_uri (image) == NULL); g_assert (gimp_image_get_exported_uri (image) == NULL); /* Don't bother g_free()ing strings */ } /** * imported_file_uris: * @fixture: * @data: * * Tests that URIs are correct for an imported image. **/ static void imported_file_uris (GimpTestFixture *fixture, gconstpointer data) { Gimp *gimp = GIMP (data); GimpImage *image; gchar *uri; gchar *filename; GimpPDBStatusType status; filename = g_build_filename (g_getenv ("GIMP_TESTING_ABS_TOP_SRCDIR"), "desktop/64x64/gimp.png", NULL); uri = g_filename_to_uri (filename, NULL, NULL); image = file_open_image (gimp, gimp_get_user_context (gimp), NULL /*progress*/, uri, filename, FALSE /*as_new*/, NULL /*file_proc*/, GIMP_RUN_NONINTERACTIVE, &status, NULL /*mime_type*/, NULL /*error*/); g_assert (gimp_image_get_uri (image) == NULL); g_assert_cmpstr (gimp_image_get_imported_uri (image), ==, uri); g_assert (gimp_image_get_exported_uri (image) == NULL); } /** * saved_imported_file_uris: * @fixture: * @data: * * Tests that the URIs are correct for an image that has been imported * and then saved. **/ static void saved_imported_file_uris (GimpTestFixture *fixture, gconstpointer data) { Gimp *gimp = GIMP (data); GimpImage *image; gchar *import_uri; gchar *import_filename; gchar *save_uri; 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_uri = g_filename_to_uri (import_filename, NULL, NULL); save_filename = g_build_filename (g_get_tmp_dir (), "gimp-test.xcf", NULL); save_uri = g_filename_to_uri (save_filename, NULL, NULL); /* Import */ image = file_open_image (gimp, gimp_get_user_context (gimp), NULL /*progress*/, import_uri, import_filename, FALSE /*as_new*/, NULL /*file_proc*/, GIMP_RUN_NONINTERACTIVE, &status, NULL /*mime_type*/, NULL /*error*/); /* Save */ proc = file_procedure_find (image->gimp->plug_in_manager->save_procs, save_uri, NULL /*error*/); file_save (gimp, image, NULL /*progress*/, save_uri, proc, GIMP_RUN_NONINTERACTIVE, TRUE /*change_saved_state*/, FALSE /*export*/, NULL /*error*/); /* Assert */ g_assert_cmpstr (gimp_image_get_uri (image), ==, save_uri); g_assert (gimp_image_get_imported_uri (image) == NULL); g_assert (gimp_image_get_exported_uri (image) == NULL); g_unlink (save_filename); } /** * new_file_has_no_uris: * @fixture: * @data: * * Tests that the URIs for an exported, newly created file are * correct. **/ static void exported_file_uris (GimpTestFixture *fixture, gconstpointer data) { gchar *save_uri; gchar *save_filename; GimpPlugInProcedure *proc; Gimp *gimp = GIMP (data); GimpImage *image = gimp_test_utils_create_image_from_dalog (gimp); save_filename = g_build_filename (g_get_tmp_dir (), "gimp-test.png", NULL); save_uri = g_filename_to_uri (save_filename, NULL, NULL); proc = file_procedure_find (image->gimp->plug_in_manager->export_procs, save_uri, NULL /*error*/); file_save (gimp, image, NULL /*progress*/, save_uri, proc, GIMP_RUN_NONINTERACTIVE, FALSE /*change_saved_state*/, TRUE /*export*/, NULL /*error*/); g_assert (gimp_image_get_uri (image) == NULL); g_assert (gimp_image_get_imported_uri (image) == NULL); g_assert_cmpstr (gimp_image_get_exported_uri (image), ==, save_uri); g_unlink (save_filename); } 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_dir (); /* Start up GIMP */ gimp = gimp_init_for_gui_testing (TRUE /*show_gui*/); gimp_test_run_mainloop_until_idle (); ADD_TEST (new_file_has_no_uris); ADD_TEST (opened_xcf_file_uris); ADD_TEST (imported_file_uris); ADD_TEST (saved_imported_file_uris); ADD_TEST (exported_file_uris); /* 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; }