; tests of TextLayer class

; !!! Some methods tested here are named strangely:
; text-font returns a new TextLayer




;                  setup

; Require image has no layer
(define testImage (car (pika-image-new 21 22 RGB)))

(define testFont (car (pika-context-get-font)))

; setup (not an assert )
(define
    testTextLayer
       (car (pika-text-layer-new
              testImage
              "textOfTestTextLayer" ; text
              testFont ; font
              30 ; fontsize
              UNIT-PIXEL)))


; TOTO test if font is not valid or NULL


; !!! UNIT-PIXEL PikaUnitsType is distinct from PIXELS PikaSizeType


; TODO test UNIT-POINT


; is-a TextLayer
(assert `(= (car (pika-item-id-is-text-layer ,testTextLayer))
            1))

; text layer is not in image yet
(assert `(= (car (pika-image-get-layers ,testImage))
            0))

; adding layer to image succeeds
(assert `(pika-image-insert-layer
            ,testImage
            ,testTextLayer ; layer
            0  ; parent
            0  ))  ; position within parent




;             attributes

; antialias default true
; FIXME doc says false
(assert `(= (car (pika-text-layer-get-antialias ,testTextLayer))
            1))

; base-direction default TEXT-DIRECTION-LTR
(assert `(= (car (pika-text-layer-get-base-direction ,testTextLayer))
            TEXT-DIRECTION-LTR))

; language default "C"
(assert `(string=? (car (pika-text-layer-get-language ,testTextLayer))
                    "C"))

; TODO other attributes

; TODO setters effective

;            attributes as given

; text
(assert `(string=? (car (pika-text-layer-get-text ,testTextLayer))
                        "textOfTestTextLayer"))
; font, numeric ID's equal
(assert `(= (car (pika-text-layer-get-font ,testTextLayer))
            ,testFont))
; font-size
(assert `(= (car (pika-text-layer-get-font-size ,testTextLayer))
            30))

; is no method to get fontSize unit


;              misc ops

; vectors from text succeeds
(assert `(pika-vectors-new-from-text-layer
              ,testImage
              ,testTextLayer))
; not capturing returned ID of vectors




;                  misc method

; pika-text-get-extents-font
; Yields extent of rendered text, independent of image or layer.
; Extent is (width, height, ascent, descent) in unstated units, pixels?
; Does not affect image.
(assert `(= (car (pika-text-get-extents-font
              "zed" ; text
              32    ; fontsize
              ,testFont ))
            57))
; usual result is (57 38 30 -8)



;           alternate method for creating text layer


; pika-text-font creates text layer AND inserts it into image
; setup, not assert
(define
  testTextLayer2
   (car (pika-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 )))


; error to insert layer created by pika-text-font
; TODO make the error message matching by prefix only
(assert-error `(pika-image-insert-layer
                  ,testImage
                  ,testTextLayer2
                  0  ; parent
                  0  )  ; position within parent
              "Procedure execution of pika-image-insert-layer failed on invalid input arguments: ")
              ;  "Item 'bar' (17) has already been added to an image"



; for debugging: display
(assert `(= (car (pika-display-new ,testImage))
            1))