Initial checkin of Pika from heckimp

This commit is contained in:
2023-09-25 15:35:21 -07:00
commit 891e999216
6761 changed files with 5240685 additions and 0 deletions

View File

@ -0,0 +1,54 @@
; test Image of mode grayscale methods of PDB
; !!! Note inconsistent use in PIKA of GRAY versus GRAYSCALE
; Basic grayscale tests
; setup
(define testImage (car (pika-image-new 21 22 RGB)))
; method pika-image-convert-grayscale does not error
(assert `(pika-image-convert-grayscale ,testImage))
; conversion was effective:
; basetype of grayscale is GRAY
(assert `(=
(car (pika-image-get-base-type ,testImage))
GRAY))
; conversion was effective:
; grayscale image has-a colormap
; colormap is-a vector of length zero, when image has no drawable.
; FIXME doc says num-bytes is returned, obsolete since GBytes
(assert `(=
(vector-length
(car (pika-image-get-colormap ,testImage)))
0))
; grayscale images have precision PRECISION-U8-NON-LINEAR
; FIXME annotation of PDB procedure says PIKA_PRECISION_U8
(assert `(=
(car (pika-image-get-precision ,testImage))
PRECISION-U8-NON-LINEAR ))
; TODO
; drawable of grayscale image is also grayscale
;(assert `(car (pika-drawable-is-grayscale
; ()
; ,testImage)
; convert precision of grayscale image succeeds
(assert `(pika-image-convert-precision
,testImage
PRECISION-DOUBLE-GAMMA))

View File

@ -0,0 +1,128 @@
; test Image of mode indexed methods of PDB
; Now independent of image ID
; Basic indexed tests
; an empty image for testing
(define newTestImage (car (pika-image-new 21 22 RGB)))
; Load test image that already has drawable
(define testImage (testing:load-test-image "wilber.png"))
; testImage is mode RGB
(assert `(=
(car (pika-image-get-base-type ,testImage))
RGB))
; method pika-image-convert-indexed yields truthy (now yields (#t) )
(assert `(pika-image-convert-indexed
,testImage
CONVERT-DITHER-NONE
CONVERT-PALETTE-GENERATE
2 ; color count
1 ; alpha-dither. FUTURE: #t
1 ; remove-unused. FUTURE: #t
"myPalette" ; ignored
))
; method pika-image-convert-indexed works even on empty image
(assert `(pika-image-convert-indexed
,newTestImage
CONVERT-DITHER-NONE
CONVERT-PALETTE-GENERATE
25 ; color count
1 ; alpha-dither. FUTURE: #t
1 ; remove-unused. FUTURE: #t
"myPalette" ; ignored
))
; conversion was effective:
; basetype of indexed image is INDEXED
(assert `(=
(car (pika-image-get-base-type ,testImage))
INDEXED))
; conversion was effective:
; basetype of indexed image is INDEXED
(assert `(=
(car (pika-image-get-base-type ,newTestImage))
INDEXED))
; testImage has a layer named same as file "wilber.png"
; TODO Why does "Background" work but app shows "wilber.png"
; drawable of indexed image is also indexed
(assert `(= (car (pika-drawable-is-indexed
; unwrap the drawable ID
(car (pika-image-get-layer-by-name ,testImage "Background"))))
1)) ; FUTURE #t
; colormaps of indexed images
; conversion was effective:
; indexed image has-a colormap
; colormap is-a vector of length zero, when image has no drawable.
; get-colormap returns (#( <bytes of color>))
; FIXME doc says num-bytes is returned, obsolete since GBytes
(assert `(=
(vector-length
(car (pika-image-get-colormap ,newTestImage)))
0))
; colormap is-a vector of length 3*<color count given during conversion>,
; when image has a drawable.
; 3*2=6
; FIXME doc says num-bytes is returned, obsolete since GBytes
(assert `(=
(vector-length
(car (pika-image-get-colormap ,testImage)))
(* 3 2)))
; set-colormap succeeds
; This tests marshalling of GBytes to PDB
(assert `(pika-image-set-colormap ,testImage #(1 1 1 9 9 9)))
; TODO set-colormap effective
; colormap vector is same as given
(assert `(equal?
(car (pika-image-get-colormap ,testImage))
#(1 1 1 9 9 9)))
; precision of indexed images
; indexed images have precision PRECISION-U8-NON-LINEAR
; FIXME annotation of PDB procedure says PIKA_PRECISION_U8
(assert `(=
(car (pika-image-get-precision ,testImage))
PRECISION-U8-NON-LINEAR ))
; !!! This depends on ID 4 for image
; convert precision of indexed images yields error
(assert-error `(car (pika-image-convert-precision
,newTestImage
PRECISION-DOUBLE-GAMMA))
"Procedure execution of pika-image-convert-precision failed on invalid input arguments: ")
; "Image '[Untitled]' (4) must not be of type 'indexed'"

View File

@ -0,0 +1,58 @@
; test Image methods of PDB
; where methods deal with layers owned by image.
; setup
; Load test image that already has drawable
(define testImage (testing:load-test-image "wilber.png"))
; get-layers
; procedure returns (1 #(<layerID>)) ....in the REPL
; the testImage has one layer
(assert `(= (car (pika-image-get-layers ,testImage ))
1))
; get-layers returns second result a vector of ID's
; !!! use cadr to get second result
(assert `(vector? (cadr (pika-image-get-layers ,testImage ))))
; the vector also has one element
(assert `(= (vector-length (cadr (pika-image-get-layers ,testImage )))
1))
; the vector can be indexed at first element
; and is a numeric ID
(assert `(number?
(vector-ref (cadr (pika-image-get-layers ,testImage ))
0)))
; store the layer ID
(define testLayer (vector-ref (cadr (pika-image-get-layers testImage ))
0))
; FIXME seems to fail??? because name is actually "Background"
; the same layer can be got by name
; FIXME app shows layer name is "wilber.png" same as image name
(assert `(= (car (pika-image-get-layer-by-name ,testImage "Background"))
,testLayer))
; the single layer's position is zero
; pika-image-get-layer-position is deprecated
(assert `(= (car (pika-image-get-item-position ,testImage ,testLayer))
0))
; TODO pika-image-get-layer-by-tattoo
; the single layer is selected in freshly opened image
(assert `(= (car (pika-image-get-selected-layers ,testImage ))
1))
; TODO test selected layer is same layer

View File

@ -0,0 +1,148 @@
; test Image methods of PDB
; loading this file changes testing state
; Using numeric equality operator '=' on numeric ID's
; setup
; method new from fresh PIKA state returns ID 1
(define testImage (car (pika-image-new 21 22 RGB)))
; FUTURE method is_valid on new image yields #t
; method is_valid on new image yields 1 i.e. true
(assert `(=
(car (pika-image-id-is-valid ,testImage))
1))
; Ensure attributes of new image are correct
; method is_dirty on new image is true
(assert `(=
(car (pika-image-is-dirty ,testImage))
1))
; method get_width on new image yields same width given when created
(assert `(=
(car (pika-image-get-width ,testImage))
21))
; method get_height on new image yields same height given when created
(assert `(=
(car (pika-image-get-height ,testImage))
22))
; method get-base-type yields same image type given when created
(assert `(=
(car (pika-image-get-base-type ,testImage))
RGB))
; new image is known to pika
; Returns (<length> #(1))
(assert `(= (car (pika-get-images))
,testImage))
; new image has no components
; new image has zero layers
(assert `(= (car (pika-image-get-layers ,testImage))
0))
; new image has zero vectors
(assert `(= (car (pika-image-get-vectors ,testImage))
0))
; new image has no parasites
(assert `(= (length
(car (pika-image-get-parasite-list ,testImage)))
0))
; new image has-a selection
(assert `(pika-image-get-selection ,testImage))
; new image has no floating selection
(assert `(=
(car (pika-image-get-floating-sel ,testImage))
-1))
; TODO floating-sel-attached-to
; new image has unit having ID 1
(assert `(=
(car (pika-image-get-unit ,testImage))
1))
; new image has name
(assert `(string=?
(car (pika-image-get-name ,testImage))
"[Untitled]"))
; new image has empty metadata string
(assert `(string=?
(car (pika-image-get-metadata ,testImage))
""))
; has an effective color profile
(assert `(pika-image-get-effective-color-profile ,testImage))
; new image has no associated files
; GFile is string in ScriptFu
; no file, xcf file, imported file, or exported file
(assert `(string=? (car (pika-image-get-file ,testImage)) ""))
(assert `(string=? (car (pika-image-get-xcf-file ,testImage)) ""))
(assert `(string=? (car (pika-image-get-imported-file ,testImage)) ""))
(assert `(string=? (car (pika-image-get-exported-file ,testImage)) ""))
; Test delete method.
; !!! ID 1 is no longer valid
; method delete succeeds on new image
; returns 1 for true. FUTURE returns #t
(assert `(car (pika-image-delete ,testImage)))
; ensure id invalid for deleted image
; returns 0 for false. FUTURE returns #f
(assert `(=
(car (pika-image-id-is-valid ,testImage))
0))
; deleted image is not in pika
; Returns (<length> #())
; FUTURE Returns empty list `()
(assert `(=
(car (pika-get-images))
0))
; !!! This only passes when testing is from fresh Pika restart
; Test abnormal args to image-new
; Dimension zero yields error
; It does NOT yield invalid ID -1
(assert-error `(pika-image-new 0 0 RGB)
(string-append
"Procedure execution of pika-image-new failed on invalid input arguments: "
"Procedure 'pika-image-new' has been called with value '0' for argument 'width' (#1, type gint)."))
; " This value is out of range."

View File

@ -0,0 +1,83 @@
; Test various operations on image
; setup
(define testImage (car (pika-image-new 21 22 RGB)))
; transformations
; flip
(assert `(pika-image-flip ,testImage ORIENTATION-HORIZONTAL))
(assert `(pika-image-flip ,testImage ORIENTATION-VERTICAL))
; TODO rotate scale resize policy
(assert-error `(pika-image-flip ,testImage ORIENTATION-UNKNOWN)
(string-append
"Procedure execution of pika-image-flip failed on invalid input arguments: "
"Procedure 'pika-image-flip' has been called with value 'PIKA_ORIENTATION_UNKNOWN'"
" for argument 'flip-type' (#2, type PikaOrientationType). This value is out of range."))
; rotate
(assert `(pika-image-rotate ,testImage ROTATE-90))
(assert `(pika-image-rotate ,testImage ROTATE-180))
(assert `(pika-image-rotate ,testImage ROTATE-270))
; scale
; up
(assert `(pika-image-scale ,testImage 100 100))
; down to min
(assert `(pika-image-scale ,testImage 1 1))
; up to max
; Performance:
; This seems to work fast when previous scaled to 1,1
; but then seems to slow down testing
; unless we scale down afterwards.
; This seems glacial if not scaled to 1,1 prior.
(assert `(pika-image-scale ,testImage 524288 524288))
; down to min
(assert `(pika-image-scale ,testImage 1 1))
; policy ops
; 0 means non-interactive
(assert `(pika-image-policy-color-profile ,testImage 0))
(assert `(pika-image-policy-rotate ,testImage 0))
; freezing and unfreezing (avoid updates to dialogs)
; Used for performance.
(assert `(pika-image-freeze-channels ,testImage))
(assert `(pika-image-freeze-layers ,testImage))
(assert `(pika-image-freeze-vectors ,testImage))
(assert `(pika-image-thaw-channels ,testImage))
(assert `(pika-image-thaw-layers ,testImage))
(assert `(pika-image-thaw-vectors ,testImage))
; clean-all makes image not dirty
(assert `(pika-image-clean-all ,testImage))
(assert `(=
(car (pika-image-is-dirty ,testImage))
0))
; TODO test flatten is effective
; crop
; painting ops
; TODO
; heal
; erase
; smudge
; pencil
; clone
; airbrush
; cannot flatten empty image
(assert-error `(pika-image-flatten ,testImage)
"Procedure execution of pika-image-flatten failed: Cannot flatten an image without any visible layer.")

View File

@ -0,0 +1,55 @@
; test Image precision methods of PDB
; Using numeric equality operator '=' on numeric ID's
; setup
(define testImage (car (pika-image-new 21 22 RGB)))
; Basic precision tests
; method get_precision on new image yields PRECISION-U8-NON-LINEAR 150
(assert `(=
(car (pika-image-get-precision ,testImage))
PRECISION-U8-NON-LINEAR ))
; Convert precision
; method convert-precision yields true, with side effect on image
(assert `(car (pika-image-convert-precision
,testImage
PRECISION-U8-LINEAR)))
; converted image is the precision
(assert `(=
(car (pika-image-get-precision ,testImage))
PRECISION-U8-LINEAR ))
; converting to the same precision yields error message
(assert-error `(pika-image-convert-precision
,testImage
PRECISION-U8-LINEAR)
"Procedure execution of pika-image-convert-precision failed on invalid input arguments: ")
; "Image '[Untitled]' (2) must not be of precision 'u8-linear'"
; Indexed images precision tested elsewhere
; New with precision
; setup
(define testImageWithPrecision (car (pika-image-new-with-precision 21 22 RGB PRECISION-DOUBLE-GAMMA)))
; image has given precision
(assert `(=
(car (pika-image-get-precision ,testImageWithPrecision))
PRECISION-DOUBLE-GAMMA ))