]> git.eshelyaron.com Git - emacs.git/commitdiff
Add tests for image.c
authorStefan Kangas <stefan@marxist.se>
Mon, 18 Oct 2021 20:35:40 +0000 (22:35 +0200)
committerStefan Kangas <stefan@marxist.se>
Mon, 18 Oct 2021 20:35:40 +0000 (22:35 +0200)
* test/src/image-tests.el: New file.

test/src/image-tests.el [new file with mode: 0644]

diff --git a/test/src/image-tests.el b/test/src/image-tests.el
new file mode 100644 (file)
index 0000000..4437d79
--- /dev/null
@@ -0,0 +1,205 @@
+;;; image-tests.el --- Tests for image.c  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
+;; Author: Stefan Kangas <stefan@marxist.se>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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.
+
+;; GNU Emacs 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 GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Most of these tests will only run in a GUI session, and not with
+;; "make check".  Run them manually in an interactive session with
+;; `M-x eval-buffer' followed by `M-x ert'.
+
+;;; Code:
+
+(require 'ert)
+
+(defmacro image-skip-unless (format)
+  `(skip-unless (and (display-images-p)
+                     (image-type-available-p ,format))))
+
+;;;; Images
+
+(defconst image-tests--files
+  `((jpeg . ,(create-image (expand-file-name
+                            "test/data/image/black.jpg"
+                            source-directory)))
+    (pbm . ,(find-image '((:file "splash.svg" :type svg))))
+    (png . ,(find-image '((:file "splash.png" :type png))))
+    (svg . ,(find-image '((:file "splash.pbm" :type pbm))))
+    (tiff . ,(create-image (expand-file-name
+                            "nextstep/GNUstep/Emacs.base/Resources/emacs.tiff"
+                            source-directory)))
+    (xbm . ,(find-image '((:file "gnus/gnus.xbm" :type xbm))))
+    (xpm . ,(find-image '((:file "splash.xpm" :type xpm))))
+    ;; TODO: gif
+    ))
+
+;;;; image-test-size
+
+(ert-deftest image-tests-image-size/jpeg ()
+  (image-skip-unless 'jpeg)
+  (pcase (image-size (cdr (assq 'jpeg image-tests--files)))
+    (`(,a . ,b)
+     (should (floatp a))
+     (should (floatp b)))))
+
+(ert-deftest image-tests-image-size/pbm ()
+  (image-skip-unless 'pbm)
+  (pcase (image-size (cdr (assq 'pbm image-tests--files)))
+    (`(,a . ,b)
+     (should (floatp a))
+     (should (floatp b)))))
+
+(ert-deftest image-tests-image-size/png ()
+  (image-skip-unless 'png)
+  (pcase (image-size (cdr (assq 'png image-tests--files)))
+    (`(,a . ,b)
+     (should (floatp a))
+     (should (floatp b)))))
+
+(ert-deftest image-tests-image-size/svg ()
+  (image-skip-unless 'svg)
+  (pcase (image-size (cdr (assq 'svg image-tests--files)))
+    (`(,a . ,b)
+     (should (floatp a))
+     (should (floatp b)))))
+
+(ert-deftest image-tests-image-size/tiff ()
+  (image-skip-unless 'tiff)
+  (pcase (image-size (cdr (assq 'tiff image-tests--files)))
+    (`(,a . ,b)
+     (should (floatp a))
+     (should (floatp b)))))
+
+(ert-deftest image-tests-image-size/xbm ()
+  (image-skip-unless 'xbm)
+  (pcase (image-size (cdr (assq 'xbm image-tests--files)))
+    (`(,a . ,b)
+     (should (floatp a))
+     (should (floatp b)))))
+
+(ert-deftest image-tests-image-size/xpm ()
+  (image-skip-unless 'xpm)
+  (pcase (image-size (cdr (assq 'xpm image-tests--files)))
+    (`(,a . ,b)
+     (should (floatp a))
+     (should (floatp b)))))
+
+(ert-deftest image-tests-image-size/error-on-invalid-spec ()
+  (skip-unless (display-images-p))
+  (should-error (image-size 'invalid-spec)))
+
+(ert-deftest image-tests-image-size/error-on-nongraphical-display ()
+  (skip-unless (not (display-images-p)))
+  (should-error (image-size 'invalid-spec)))
+
+;;;; image-mask-p
+
+(ert-deftest image-tests-image-mask-p/jpeg ()
+  (image-skip-unless 'jpeg)
+  (should-not (image-mask-p (cdr (assq 'jpeg image-tests--files)))))
+
+(ert-deftest image-tests-image-mask-p/pbm ()
+  (image-skip-unless 'pbm)
+  (should-not (image-mask-p (cdr (assq 'pbm image-tests--files)))))
+
+(ert-deftest image-tests-image-mask-p/png ()
+  (image-skip-unless 'png)
+  (should-not (image-mask-p (cdr (assq 'png image-tests--files)))))
+
+(ert-deftest image-tests-image-mask-p/svg ()
+  (image-skip-unless 'svg)
+  (should-not (image-mask-p (cdr (assq 'svg image-tests--files)))))
+
+(ert-deftest image-tests-image-mask-p/tiff ()
+  (image-skip-unless 'tiff)
+  (should-not (image-mask-p (cdr (assq 'tiff image-tests--files)))))
+
+(ert-deftest image-tests-image-mask-p/xbm ()
+  (image-skip-unless 'xbm)
+  (should-not (image-mask-p (cdr (assq 'xbm image-tests--files)))))
+
+(ert-deftest image-tests-image-mask-p/xpm ()
+  (image-skip-unless 'xpm)
+  (should-not (image-mask-p (cdr (assq 'xpm image-tests--files)))))
+
+(ert-deftest image-tests-image-mask-p/error-on-invalid-spec ()
+  (skip-unless (display-images-p))
+  (should-error (image-mask-p 'invalid-spec)))
+
+(ert-deftest image-tests-image-mask-p/error-on-nongraphical-display ()
+  (skip-unless (not (display-images-p)))
+  (should-error (image-mask-p (cdr (assq 'xpm image-tests--files)))))
+
+;;;; image-metadata
+
+;; TODO: These tests could be expanded with files that actually
+;;       contain metadata.
+
+(ert-deftest image-tests-image-metadata/jpeg ()
+  (image-skip-unless 'jpeg)
+  (should-not (image-metadata (cdr (assq 'jpeg image-tests--files)))))
+
+(ert-deftest image-tests-image-metadata/pbm ()
+  (image-skip-unless 'pbm)
+  (should-not (image-metadata (cdr (assq 'pbm image-tests--files)))))
+
+(ert-deftest image-tests-image-metadata/png ()
+  (image-skip-unless 'png)
+  (should-not (image-metadata (cdr (assq 'png image-tests--files)))))
+
+(ert-deftest image-tests-image-metadata/svg ()
+  (image-skip-unless 'svg)
+  (should-not (image-metadata (cdr (assq 'svg image-tests--files)))))
+
+(ert-deftest image-tests-image-metadata/tiff ()
+  (image-skip-unless 'tiff)
+  (should-not (image-metadata (cdr (assq 'tiff image-tests--files)))))
+
+(ert-deftest image-tests-image-metadata/xbm ()
+  (image-skip-unless 'xbm)
+  (should-not (image-metadata (cdr (assq 'xbm image-tests--files)))))
+
+(ert-deftest image-tests-image-metadata/xpm ()
+  (image-skip-unless 'xpm)
+  (should-not (image-metadata (cdr (assq 'xpm image-tests--files)))))
+
+(ert-deftest image-tests-image-metadata/nil-on-invalid-spec ()
+  (skip-unless (display-images-p))
+  (should-not (image-metadata 'invalid-spec)))
+
+(ert-deftest image-tests-image-metadata/error-on-nongraphical-display ()
+  (skip-unless (not (display-images-p)))
+  (should-error (image-metadata (cdr (assq 'xpm image-tests--files)))))
+
+;;;; ImageMagick
+
+(ert-deftest image-tests-imagemagick-types ()
+  (skip-unless (fboundp 'imagemagick-types))
+  (when (fboundp 'imagemagick-types)
+    (should (listp (imagemagick-types)))))
+
+;;;; Initialization
+
+(ert-deftest image-tests-init-image-library ()
+  (should (init-image-library 'pbm)) ; built-in
+  (should (init-image-library 'xpm)) ; built-in
+  (should-not (init-image-library 'invalid-image-type)))
+
+;;; image-tests.el ends here