summaryrefslogtreecommitdiff
path: root/test/manual/image-size-tests.el
blob: 159e9025ae3639d0848cfa3cdac1ebe453102980 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
;;; image-size-tests.el -- tests for image scaling

;; Copyright (C) 2017-2020 Free Software Foundation, Inc.

;; 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/>.

;; To test: Load the file and eval (image-size-tests).
;; A non-erroring result is a success.

;;; Code:

(defmacro im-should (image width height &rest props)
  `(let ((im (im-image ,image ,@props)))
     (unless (im-compare im ,width ,height)
       (error "%s %s didn't succeed; size is %s"
              ',image ',props (image-size im t)))))

(defun im-image (type &rest props)
  (let ((image-scaling-factor 1))
    (apply
     #'create-image
     (expand-file-name
      (if (eq type :w)
          "test/data/image/blank-200x100.png"
          "test/data/image/blank-100x200.png")
      source-directory)
     'imagemagick nil props)))

(defun im-compare (image width height)
  (let ((size (image-size image t)))
    (and (= (car size) width)
         (= (cdr size) height))))

(defun image-size-tests ()
  (unless (imagemagick-types)
    (error "This only makes sense if ImageMagick is installed"))
  ;; Test the image that's wider than it is tall.
  ;; Default sizes.
  (im-should :w 200 100)
  ;; Changing one dimension changes the other.
  (im-should :w 100 50 :width 100)
  (im-should :w 100 50 :height 50)
  ;; The same with :max-width etc.
  (im-should :w 100 50 :max-width 100)
  (im-should :w 100 50 :max-height 50)
  ;; :width wins over :max-width etc
  (im-should :w 300 150 :width 300 :max-width 100)
  (im-should :w 400 200 :height 200 :max-height 100)
  ;; Specifying both width and height is fine.
  (im-should :w 300 50 :width 300 :height 50)
  ;; A too-large :max-width (etc) has no effect.
  (im-should :w 200 100 :max-width 300)
  (im-should :w 200 100 :max-height 300)
  ;; Both max-width/height.
  (im-should :w 100 50 :max-width 100 :max-height 75)
  (im-should :w 50 25 :max-width 100 :max-height 25)
  ;; :width and :max-height (max-height wins).
  (im-should :w 400 200 :width 400 :max-height 200)
  (im-should :w 400 200 :width 500 :max-height 200)

  ;; Test the image that's taller than it is wide.
  (im-should :h 100 200)
  ;; Changing one dimension changes the other.
  (im-should :h 50 100 :width 50)
  (im-should :h 50 100 :height 100)
  ;; The same with :max-width etc.
  (im-should :h 50 100 :max-width 50)
  (im-should :h 50 100 :max-height 100)
  ;; :width wins over :max-width etc
  (im-should :h 300 600 :width 300 :max-width 100)
  (im-should :h 150 300 :height 300 :max-height 100)
  ;; Specifying both width and height is fine.
  (im-should :h 300 50 :width 300 :height 50)
  ;; A too-large :max-width (etc) has no effect.
  (im-should :h 100 200 :max-width 300)
  (im-should :h 100 200 :max-height 300)
  ;; Both max-width/height.
  (im-should :h 50 100 :max-width 75 :max-height 100)
  (im-should :h 25 50 :max-width 25 :max-height 100)
  ;; :height and :max-width (max-width wins).
  (im-should :h 200 400 :height 400 :max-width 200)
  (im-should :h 200 400 :height 500 :max-width 200)
  )

;;; image-size-tests.el ends here