245 lines
6.8 KiB
Scheme
245 lines
6.8 KiB
Scheme
; test Item methods for creating and positioning in GroupLayer
|
|
|
|
; This is part 2: more tests of more arcane cases
|
|
|
|
; The test script uses v3 binding of return values
|
|
(script-fu-use-v3)
|
|
|
|
|
|
; setup
|
|
(define testImage (testing:load-test-image-basic-v3 "gimp-logo.png"))
|
|
(displayln testImage)
|
|
(define testLayer (vector-ref (gimp-image-get-layers testImage )
|
|
0))
|
|
; gimp-logo.png has only one layer
|
|
|
|
; another layer for reorder tests
|
|
(define testLayer2 (testing:layer-new testImage))
|
|
|
|
|
|
; group-new not throw
|
|
; This is setup, not an assert, because we need to capture the group's ID
|
|
; Note the ID is not wrapped in list
|
|
(define testGroup (gimp-group-layer-new testImage ""))
|
|
(define testGroup2 (gimp-group-layer-new testImage ""))
|
|
|
|
|
|
|
|
; tests
|
|
|
|
|
|
(test! "nested GroupLayer")
|
|
|
|
; group can be inserted in image
|
|
; Note parent is zero (NULL)
|
|
(assert `(gimp-image-insert-layer
|
|
,testImage
|
|
,testGroup
|
|
0 ; parent
|
|
0 )) ; position within parent
|
|
|
|
; insertion effective: image now has two root layers, a layer and empty group
|
|
(assert `(= (vector-length (gimp-image-get-layers ,testImage))
|
|
2))
|
|
|
|
; Groups can be nested
|
|
(assert `(gimp-image-insert-layer
|
|
,testImage
|
|
,testGroup2
|
|
,testGroup ; parent
|
|
0 )) ; position within parent
|
|
|
|
; insertion effective: image still has only two root layers, a layer and a group
|
|
(assert `(= (vector-length (gimp-image-get-layers ,testImage))
|
|
2))
|
|
|
|
|
|
|
|
|
|
(test! "move item between two groups")
|
|
|
|
; Initial condition:
|
|
; testLayer
|
|
; testGroup
|
|
; testGroup2
|
|
|
|
; testLayer is at the top
|
|
(assert `(= (gimp-item-get-parent ,testLayer) -1))
|
|
|
|
; move testLayer to next level
|
|
(assert `(gimp-image-reorder-item ,testImage ,testLayer ,testGroup 0))
|
|
|
|
; reorder effective: image has one root layer, a group
|
|
(assert `(= (vector-length (gimp-image-get-layers ,testImage))
|
|
1))
|
|
; effective: testLayer is parented to testGroup
|
|
(assert `(= (gimp-item-get-parent ,testLayer) ,testGroup))
|
|
|
|
; Condition:
|
|
; testGroup
|
|
; testLayer
|
|
; testGroup2
|
|
|
|
; move to a deeper group
|
|
(assert `(gimp-image-reorder-item ,testImage ,testLayer ,testGroup2 0))
|
|
|
|
; effective: testLayer is parented to testGroup2
|
|
(assert `(= (gimp-item-get-parent ,testLayer) ,testGroup2))
|
|
|
|
|
|
|
|
|
|
(test! "Error to create cycles in layer graph")
|
|
|
|
; Now group2 is in group. Error to move group into group2, i.e. parent into child
|
|
(assert-error `(gimp-image-reorder-item
|
|
,testImage
|
|
,testGroup ; moved item
|
|
,testGroup2 ; parent
|
|
0)
|
|
"Procedure execution of gimp-image-reorder-item failed on invalid input arguments:")
|
|
; suffix of err msg:
|
|
; Item 'Layer Group' (4) must not be an ancestor of 'Layer Group #1' (5)
|
|
|
|
|
|
|
|
|
|
(test! "Text layers can be reordered")
|
|
|
|
(define testFont (gimp-context-get-font))
|
|
|
|
(define testTextLayer
|
|
(gimp-text-font
|
|
testImage
|
|
-1 ; drawable. -1 means NULL means create new text layer
|
|
0 0 ; coords
|
|
"bar" ; text
|
|
1 ; border size
|
|
1 ; antialias true
|
|
31 ; fontsize
|
|
testFont ))
|
|
|
|
; text layer is already in image
|
|
|
|
; Condition:
|
|
; testTextLayer
|
|
; testGroup
|
|
; testLayer
|
|
; testGroup2
|
|
|
|
(assert `(= (vector-length (gimp-image-get-layers ,testImage))
|
|
2))
|
|
(assert `(= (gimp-image-get-item-position ,testImage ,testTextLayer)
|
|
0))
|
|
|
|
; move TextLayer to a deeper group
|
|
(assert `(gimp-image-reorder-item ,testImage ,testTextLayer ,testGroup2 0))
|
|
|
|
; effective: TextLayer parent is testGroup2
|
|
(assert `(= (gimp-item-get-parent ,testTextLayer) ,testGroup2))
|
|
|
|
|
|
|
|
|
|
|
|
; Channels and Paths are in a separate item tree
|
|
; No support for groups of Channels or Paths
|
|
|
|
|
|
(test! "Channels as Item with parent and position")
|
|
|
|
; Channels are Items but reorder-item only works with subclass Layer
|
|
; There is no such thing as a ChannelGroup
|
|
|
|
; I.E. only layers can be reordered
|
|
(define testChannel (gimp-channel-new
|
|
testImage ; image
|
|
"Test Channel" ; name
|
|
23 24 ; width, height
|
|
50.0 ; opacity
|
|
"red" )) ; compositing color
|
|
|
|
; Can insert into image
|
|
(assert `(gimp-image-insert-channel
|
|
,testImage
|
|
,testChannel
|
|
0 ; parent, moot since channel groups not supported
|
|
0)) ; position in stack
|
|
|
|
; A channel has a position in its parent
|
|
(assert `(= (gimp-image-get-item-position ,testImage ,testChannel)
|
|
0))
|
|
|
|
; A channel parent is always top level.
|
|
; The parent of a channel is not a layer.
|
|
(assert `(= (gimp-item-get-parent ,testChannel) -1))
|
|
|
|
|
|
|
|
(test! "Channels cannot be reordered into the layer tree")
|
|
|
|
; Error to parent a channel into the layer tree, into a group layer
|
|
(assert-error `(gimp-image-reorder-item
|
|
,testImage
|
|
,testChannel ; moved item
|
|
,testGroup2 ; parent
|
|
0)
|
|
"Procedure execution of gimp-image-reorder-item failed on invalid input arguments:")
|
|
; suffix of err message
|
|
; Items 'Test Channel' (6) and 'Layer Group #1' (5) cannot be used because they are not part of the same item tree
|
|
|
|
|
|
|
|
(test! "Path layers as items with parent and position.")
|
|
|
|
(define testPath (gimp-path-new
|
|
testImage
|
|
"Test Path"))
|
|
; a new Path is not in the image
|
|
(assert `(= (vector-length (gimp-image-get-paths ,testImage))
|
|
0))
|
|
|
|
; !!! Even before inserted in image, path has parent but not position!!!
|
|
|
|
; Path has parent
|
|
(assert `(= (gimp-item-get-parent ,testPath)
|
|
-1))
|
|
|
|
; Error to get position of Path not inserted in image
|
|
(assert-error `(gimp-image-get-item-position ,testImage ,testPath)
|
|
"Procedure execution of gimp-image-get-item-position failed on invalid input arguments:")
|
|
; suffix of err msg
|
|
; Item 'Test Path' (8) cannot be used because it has not been added to an image
|
|
|
|
(assert `(gimp-image-insert-path
|
|
,testImage
|
|
,testPath
|
|
0 0)) ; parent=0 position=0
|
|
|
|
; A Path's parent is always top level.
|
|
; The parent of a Path is not a layer.
|
|
(assert `(= (gimp-item-get-parent ,testPath)
|
|
-1))
|
|
|
|
; A Path has a position in its parent, after Path was inserted
|
|
(assert `(= (gimp-image-get-item-position ,testImage ,testPath)
|
|
0))
|
|
|
|
|
|
|
|
(test! "Path layers cannot be reordered into layer tree")
|
|
|
|
; Error to parent a Path into the layer tree, into a group layer
|
|
(assert-error `(gimp-image-reorder-item
|
|
,testImage
|
|
,testPath ; moved item
|
|
,testGroup2 ; parent
|
|
0)
|
|
"Procedure execution of gimp-image-reorder-item failed on invalid input arguments:")
|
|
; suffix of err msg
|
|
; Items 'Test Path' (8) and 'Layer Group #1' (5) cannot be used because they are not part of the same item tree
|
|
|
|
|
|
|
|
|
|
(script-fu-use-v2)
|