- defslot: register render functions into named slots with ordering - slot-render: call all registered render-fns for a slot - Slot modes designed (stack/replace/single-winner) but mode dispatch is implicit via the registration API - slot-p, clear-slot, list-slots for lifecycle management - Slots stored in a hash table keyed by string (equal test) - 4 tests, 100% passing
27 lines
821 B
Common Lisp
27 lines
821 B
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)))
|