mirror of https://github.com/GNOME/gimp.git
198 lines
5.4 KiB
Scheme
198 lines
5.4 KiB
Scheme
; Test methods of Edit module of the PDB
|
|
|
|
; This tests some of the general cases.
|
|
; See elsewhere for other cases e.g. edit-multi-layer.scm
|
|
|
|
; TODO the "Paste In Place" methods are not in the PDB?
|
|
|
|
; TODO the "Paste As" distinctions between Layer and Floating Sel
|
|
; are not in the PDB
|
|
|
|
|
|
(script-fu-use-v3)
|
|
|
|
|
|
; setup
|
|
; Load test image that already has drawable
|
|
(define testImage (testing:load-test-image-basic-v3))
|
|
|
|
; get all the root layers
|
|
; testImage has exactly one root layer.
|
|
(define testLayers (cadr (gimp-image-get-layers testImage)))
|
|
;testLayers is-a vector
|
|
|
|
(define testLayer (vector-ref testLayers 0))
|
|
|
|
; !!! Testing requires initial condition: clipboard is empty.
|
|
; But there is no programmatic way to empty the clipboard,
|
|
; or even to determine if the clipboard is empty.
|
|
; So these tests might not pass when you run this test file
|
|
; in the wrong order.
|
|
|
|
|
|
|
|
|
|
(test! "named-copy")
|
|
|
|
(define testBuffer (gimp-edit-named-copy
|
|
1
|
|
(make-vector 1 testLayer)
|
|
"testBufferName"))
|
|
; There is one named buffer
|
|
(assert `(= (length (gimp-buffers-get-list "")) 1))
|
|
|
|
|
|
|
|
(test! "paste")
|
|
|
|
; ordinary paste is to a drawable
|
|
|
|
; paste always returns a layer, even when clipboard empty
|
|
; FIXME: this is undocumented in the PDB,
|
|
; where it seems to imply that a layer is always returned.
|
|
(assert-error `(gimp-edit-paste
|
|
,testLayer
|
|
TRUE) ; paste-into
|
|
"Procedure execution of gimp-edit-paste failed" )
|
|
|
|
; paste-as-new-image returns NULL image when clipboard empty
|
|
; paste-as-new is deprecated
|
|
(assert `(= (gimp-edit-paste-as-new-image)
|
|
-1)) ; the NULL ID
|
|
; named-paste-as-new-image returns a new image
|
|
(assert `(gimp-image-id-is-valid (gimp-edit-named-paste-as-new-image "testBufferName")))
|
|
|
|
(test! "copy")
|
|
|
|
; copy when:
|
|
; - no selection
|
|
; - image has one drawable
|
|
; - one drawable is passed
|
|
; returns true and clip has one drawable
|
|
(assert `(gimp-edit-copy 1 ,testLayers))
|
|
|
|
; paste when clipboard is not empty returns a vector of length one
|
|
(assert `(= (car (gimp-edit-paste
|
|
,testLayer
|
|
TRUE)) ; paste-into
|
|
1))
|
|
; get reference to pasted layer
|
|
(define testPastedLayer (vector-ref (cadr (gimp-image-get-layers testImage))
|
|
0))
|
|
|
|
; !!! this is not what happens in the GUI, the pasted layer is NOT floating
|
|
; The pasted layer is floating
|
|
(assert `(gimp-layer-is-floating-sel ,testPastedLayer))
|
|
|
|
|
|
|
|
(test! "copy-visible")
|
|
|
|
; copy-visible takes only an image
|
|
; it puts one drawable on clip
|
|
(assert `(gimp-edit-copy-visible ,testImage))
|
|
|
|
|
|
|
|
|
|
(test! "named-paste")
|
|
|
|
; There is one named buffer
|
|
(assert `(= (length (gimp-buffers-get-list "")) 1))
|
|
|
|
; named-paste returns just the floating sel
|
|
(assert `(gimp-edit-named-paste
|
|
,testLayer
|
|
"testBufferName"
|
|
#f)) ; paste-into
|
|
|
|
|
|
(test! "paste into")
|
|
; paste when clipboard is not empty returns a vector of length one
|
|
; returns (1 #(x))
|
|
(assert `(= (car (gimp-edit-paste ,testLayer TRUE)) ; paste-into
|
|
1))
|
|
|
|
; The first pasted floating layer was anchored (merged into) first layer
|
|
; The ID of the floating sel is now invalid
|
|
(assert `(not (gimp-item-id-is-valid ,testPastedLayer)))
|
|
; Can't do this, it throws CRITICAL
|
|
;(assert-error `(gimp-layer-is-floating-sel ,testPastedLayer)
|
|
; "Procedure")
|
|
|
|
; There are now two layers
|
|
(assert `(= (car (gimp-image-get-layers ,testImage)) 2))
|
|
|
|
(define testPastedLayer2 (vector-ref (cadr (gimp-image-get-layers testImage))
|
|
0))
|
|
; the new layer is now floating.
|
|
(assert `(gimp-layer-is-floating-sel ,testPastedLayer2))
|
|
|
|
|
|
|
|
|
|
|
|
; paste specifying no destination layer is an error.
|
|
; You cannot paste into an empty image because you must pass a destination layer.
|
|
; !!! This is different from the GUI
|
|
(assert-error `(gimp-edit-paste -1 TRUE)
|
|
"Invalid value for argument 0")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(test! "edit-cut when selection")
|
|
|
|
; setup, create a selection
|
|
(assert `(gimp-selection-all ,testImage))
|
|
(assert `(not (gimp-selection-is-empty ,testImage)))
|
|
|
|
(assert `(gimp-edit-cut 1 (make-vector 1 (vector-ref ,testLayers 0))))
|
|
; There are still two layers
|
|
(assert `(= (car (gimp-image-get-layers ,testImage)) 2))
|
|
; !!! No API method is-clipboard-empty
|
|
|
|
|
|
(test! "edit-named-cut when selection")
|
|
(assert `(gimp-edit-named-cut 1 (make-vector 1 (vector-ref ,testLayers 0)) "testbufferName2"))
|
|
; There are still two layers
|
|
(assert `(= (car (gimp-image-get-layers ,testImage)) 2))
|
|
; There is two named buffer
|
|
(assert `(= (length (gimp-buffers-get-list ""))
|
|
2))
|
|
|
|
|
|
(test! "cut when no selection")
|
|
|
|
; setup, delete selection
|
|
(assert `(gimp-selection-none ,testImage))
|
|
(assert `(gimp-selection-is-empty ,testImage))
|
|
|
|
; cut when no selection cuts given layers out of image
|
|
; Cut one of two layers.
|
|
; returns #t when succeeds
|
|
(assert `(gimp-edit-cut 1 (make-vector 1 (vector-ref ,testLayers 0))))
|
|
; effective: count layers now 0
|
|
; FIXME, the count of layers should be 1, since we cut only one of 2
|
|
(assert `(= (car (gimp-image-get-layers ,testImage))
|
|
0))
|
|
|
|
|
|
|
|
; TODO test cross image paste, of different modes
|
|
|
|
|
|
; copy returns false when is a selection
|
|
; but it doesn't intersect any chosen layers
|
|
; When one layer is offset from another and bounds of layer
|
|
; do not intersect bounds of selection.
|
|
; TODO
|
|
|
|
|
|
; for debugging individual test file
|
|
(testing:show testImage)
|
|
|
|
|
|
(script-fu-use-v2) |