; test resource methods of Context



; function to test methods on Resource
; for a valid Resource ID
(define (test-resource-methods resource)

  ; a resource is an int ID in ScriptFu
  (assert `(integer? ,resource))

  ; get-name returns a string
  (assert `(string? (car (pika-resource-get-name ,resource))))

  ; id-is-valid returns truth
  ; (1) FUTURE #t
  (assert `(car (pika-resource-id-is-valid ,resource)))

  ; pika-resource-get-identifiers succeeds
  ; it returns a triplet
  (assert `(pika-resource-get-identifiers ,resource))

  ; pika-resource-get-identifiers returns numeric for is-internal
  ; Some of the fresh pika active resource are internal, some not !!!
  (assert `(number? (car (pika-resource-get-identifiers ,resource))))

  ; name from get-identifiers is same as from pika-resource-get-name
  ; name is second field of triplet i.e. cadr
  (assert `(string=? (cadr (pika-resource-get-identifiers ,resource))
                     (car (pika-resource-get-name ,resource))))

  ; pika-resource-is-editable succeeds
  ; Returns a wrapped boolean
  (assert `(pika-resource-is-editable ,resource))

  ; The fresh pika active resources are all system resources i.e. not editable
  ; returns 0 for #f
  (assert `(= (car(pika-resource-is-editable ,resource))
              0))
)

;                  "Test Parasite") ; name
;               "Procedure execution of pika-resource-get-parasite failed")



; test context-get-resource returns active resource of given className
; Setup. Not assert.

(define testBrush    (car (pika-context-get-resource "PikaBrush")))
(define testFont     (car (pika-context-get-resource "PikaFont")))
(define testGradient (car (pika-context-get-resource "PikaGradient")))
(define testPalette  (car (pika-context-get-resource "PikaPalette")))
(define testPattern  (car (pika-context-get-resource "PikaPattern")))
; FUTURE Dynamics and other Resource subclasses


;              test methods on active resource ID's

(test-resource-methods testBrush)
(test-resource-methods testFont)
(test-resource-methods testGradient)
(test-resource-methods testPalette)
(test-resource-methods testPattern)


;             test more specific context methods return same result
;             as the general context-get-resource

; test equality of numeric IDs
(assert `(= (car(pika-context-get-brush))
            ,testBrush))
(assert `(= (car(pika-context-get-font))
            ,testFont))
(assert `(= (car(pika-context-get-gradient))
            ,testGradient))
(assert `(= (car(pika-context-get-palette))
            ,testPalette))
(assert `(= (car(pika-context-get-pattern))
            ,testPattern))


;              test resource-id-is-foo methods

; the resource IDs from setup work with the specific id-is-foo methods

(assert `(= (car(pika-resource-id-is-brush ,testBrush))
            1))
(assert `(= (car(pika-resource-id-is-font ,testFont))
            1))
(assert `(= (car(pika-resource-id-is-gradient ,testGradient))
            1))
(assert `(= (car(pika-resource-id-is-palette ,testPalette))
            1))
(assert `(= (car(pika-resource-id-is-pattern ,testPattern))
            1))


;             test errors


; invalid type name
(assert-error `(pika-context-get-resource "InvalidTypeName")
              "Procedure execution of pika-context-get-resource failed")

; invalid numeric ID
; -1 is out of range
(assert-error `(pika-resource-get-name -1)
              "Procedure execution of pika-resource-get-name failed on invalid input arguments:")
; 12345678 is in range but invalid
(assert-error `(pika-resource-get-name 12345678)
              "Procedure execution of pika-resource-get-name failed on invalid input arguments:")

