Files
cl-tty/tests/slot-tests.lisp

55 lines
1.9 KiB
Common Lisp

(defpackage :cl-tty-slot-test (:use :cl :cl-tty.slot :fiveam))
(in-package :cl-tty-slot-test)
(def-suite slot-suite :description "Slot system tests")
(in-suite slot-suite)
(def-test defslot-register ( )
(clear-slot :test-slot)
(defslot :test-slot :order 1 :render-fn (lambda () "hello"))
(is-true (slot-p :test-slot)))
(def-test slot-render-calls ( )
(clear-slot :test-slot)
(defslot :test-slot :order 1 :render-fn (lambda () "a"))
(defslot :test-slot :order 2 :render-fn (lambda () "b"))
(is (equal '("a" "b") (slot-render :test-slot))))
(def-test slot-render-empty ( )
(clear-slot :ghost)
(is-false (slot-render :ghost)))
(def-test clear-slot-removes ( )
(clear-slot :test-slot)
(defslot :test-slot :order 1 :render-fn (lambda () "x"))
(clear-slot :test-slot)
(is-false (slot-p :test-slot)))
(def-test defslot-nil-render-fn ( )
"defslot with nil (default) render-fn should not crash slot-render."
(clear-slot :nil-slot)
(defslot :nil-slot :order 1)
(is-true (slot-p :nil-slot))
(is (equal '(nil) (slot-render :nil-slot)))
(clear-slot :nil-slot))
(def-test defslot-duplicate-same-order ( )
"Multiple defslot calls with the same order should all register."
(clear-slot :dup-slot)
(defslot :dup-slot :order 5 :render-fn (lambda () "first"))
(defslot :dup-slot :order 5 :render-fn (lambda () "second"))
(let ((result (slot-render :dup-slot)))
(is (= 2 (length result)))
;; Entries with same order are prepended, so "second" comes first
(is (equal "second" (first result)))
(is (equal "first" (second result))))
(clear-slot :dup-slot))
(def-test slot-render-with-args ( )
"slot-render passes arguments to all registered render-fns."
(clear-slot :args-slot)
(defslot :args-slot :order 1 :render-fn (lambda (x y) (format nil "~a+~a" x y)))
(let ((result (slot-render :args-slot 3 4)))
(is (equal '("3+4") result)))
(clear-slot :args-slot))