55 lines
1.9 KiB
Common 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))
|