chore: migrate conditional bindings for Emacs 31
This commit is contained in:
parent
f0674b348c
commit
af01b71e3f
@ -62,7 +62,7 @@
|
||||
|
||||
(defun etaf-compiler--compile-property (form programs)
|
||||
"Compile property FORM, returning `(DESCRIPTOR . PROGRAMS)'."
|
||||
(if-let ((literal (etaf-compiler--literal form)))
|
||||
(if-let* ((literal (etaf-compiler--literal form)))
|
||||
(cons (list :kind 'static :value (cdr literal)) programs)
|
||||
(let ((index (length programs)))
|
||||
(cons (list :kind 'hole :index index)
|
||||
@ -137,7 +137,7 @@
|
||||
|
||||
(defun etaf-compiler--compile (form)
|
||||
"Compile FORM into `(BLUEPRINT PROGRAM-CODE...)', or return nil."
|
||||
(when-let ((compiled (etaf-compiler--compile-block form '(0) nil)))
|
||||
(when-let* ((compiled (etaf-compiler--compile-block form '(0) nil)))
|
||||
(let* ((root (car compiled))
|
||||
(programs (cadr compiled))
|
||||
(id (secure-hash 'sha256 (prin1-to-string form)))
|
||||
|
||||
@ -333,14 +333,14 @@ load. INITIAL-RESULT and AUTO-LOAD are mutually exclusive."
|
||||
(maphash
|
||||
(lambda (identity _present)
|
||||
(unless (gethash identity new-set)
|
||||
(when-let ((selected-ref
|
||||
(when-let* ((selected-ref
|
||||
(gethash identity selected-refs)))
|
||||
(setf (etaf-value selected-ref) nil))))
|
||||
old-set)
|
||||
(maphash
|
||||
(lambda (identity _present)
|
||||
(unless (gethash identity old-set)
|
||||
(when-let ((selected-ref
|
||||
(when-let* ((selected-ref
|
||||
(gethash identity selected-refs)))
|
||||
(setf (etaf-value selected-ref) t))))
|
||||
new-set)))))
|
||||
@ -362,7 +362,7 @@ load. INITIAL-RESULT and AUTO-LOAD are mutually exclusive."
|
||||
(etaf-on-scope-dispose
|
||||
(lambda ()
|
||||
(clrhash (etaf-data--controller-selected-refs controller))
|
||||
(when-let ((dispose (etaf-data--source-function
|
||||
(when-let* ((dispose (etaf-data--source-function
|
||||
source :dispose nil)))
|
||||
(funcall dispose))))))
|
||||
(when auto-load
|
||||
|
||||
@ -131,7 +131,7 @@ the position."
|
||||
start end (<= start position) (< position end))
|
||||
(push (list host-ref start (- end start)) candidates)))))
|
||||
(setq candidates (sort candidates #'etaf--activation-candidate-before-p))
|
||||
(if-let ((candidate (car candidates)))
|
||||
(if-let* ((candidate (car candidates)))
|
||||
(etaf-dispatch-event runtime (car candidate) 'press)
|
||||
(unless quiet
|
||||
(user-error "No interactive ETAF Host at point")))))
|
||||
@ -234,7 +234,7 @@ When called interactively without arguments, focus the first visible Host."
|
||||
(let ((buffer (window-buffer window)))
|
||||
(when (buffer-live-p buffer)
|
||||
(with-current-buffer buffer
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer)))
|
||||
(goto-char position)
|
||||
(etaf--activation-at-position runtime position t))))))))
|
||||
|
||||
|
||||
@ -387,7 +387,7 @@ When called interactively, suggest a timestamped `.eld' file in
|
||||
(interactive)
|
||||
;; Keep correlation IDs monotonic even if an active operation clears history.
|
||||
(setq etaf-performance--record-ring nil)
|
||||
(when-let ((panel (get-buffer "*ETAF Performance*")))
|
||||
(when-let* ((panel (get-buffer "*ETAF Performance*")))
|
||||
(with-current-buffer panel
|
||||
(when (derived-mode-p 'etaf-performance-panel-mode)
|
||||
(tabulated-list-revert))))
|
||||
@ -698,7 +698,7 @@ KIND, LABEL, optional RUNTIME, and optional BUFFER are evaluated once."
|
||||
|
||||
(defun etaf-performance--uninstall-function (function)
|
||||
"Remove recorder advice installed on FUNCTION."
|
||||
(when-let ((entry (assq function etaf-performance--installed-advices)))
|
||||
(when-let* ((entry (assq function etaf-performance--installed-advices)))
|
||||
(advice-remove function (cdr entry))
|
||||
(setq etaf-performance--installed-advices
|
||||
(delq entry etaf-performance--installed-advices))))
|
||||
@ -785,7 +785,7 @@ package defining FUNCTION is loaded. Return FUNCTION."
|
||||
|
||||
(defun etaf-performance--format-report (operation)
|
||||
"Return compact public backend metadata for OPERATION."
|
||||
(if-let ((report (plist-get (etaf-performance-operation-metadata operation)
|
||||
(if-let* ((report (plist-get (etaf-performance-operation-metadata operation)
|
||||
:ebox)))
|
||||
(format "%s/%s d:%s o:%s tp:%s/%s/%s%s"
|
||||
(or (plist-get report :strategy) "-")
|
||||
|
||||
@ -142,7 +142,7 @@ Runtime, watchers run synchronously.")
|
||||
((etaf-effect-active-p subscriber)
|
||||
(unless (gethash subscriber etaf--dispatch-effect-set)
|
||||
(puthash subscriber t etaf--dispatch-effect-set)
|
||||
(if-let ((scheduler (etaf-effect-scheduler subscriber)))
|
||||
(if-let* ((scheduler (etaf-effect-scheduler subscriber)))
|
||||
(funcall scheduler subscriber)
|
||||
(etaf-reactive-effect-run subscriber))))))
|
||||
subscribers)))
|
||||
@ -210,7 +210,7 @@ Runtime, watchers run synchronously.")
|
||||
(when (and (etaf-effect-p effect) (etaf-effect-active-p effect))
|
||||
(setf (etaf-effect-active-p effect) nil)
|
||||
(etaf--clear-effect-deps effect)
|
||||
(when-let ((cleanup (etaf-effect-on-stop effect)))
|
||||
(when-let* ((cleanup (etaf-effect-on-stop effect)))
|
||||
(setf (etaf-effect-on-stop effect) nil)
|
||||
(funcall cleanup)))
|
||||
effect)
|
||||
@ -422,7 +422,7 @@ diagnostics. Return a stop function."
|
||||
(when cleanup
|
||||
(funcall cleanup)
|
||||
(setq cleanup nil))
|
||||
(when-let ((result (funcall callback new-value previous)))
|
||||
(when-let* ((result (funcall callback new-value previous)))
|
||||
(when (functionp result)
|
||||
(setq cleanup result)))))))))
|
||||
(setq effect
|
||||
@ -451,7 +451,7 @@ effect. If FUNCTION returns a function, it cleans up the previous run."
|
||||
(lambda ()
|
||||
(when (etaf-effect-active-p effect)
|
||||
(when cleanup (funcall cleanup) (setq cleanup nil))
|
||||
(when-let ((result (etaf-reactive-effect-run effect)))
|
||||
(when-let* ((result (etaf-reactive-effect-run effect)))
|
||||
(when (functionp result) (setq cleanup result))))))
|
||||
(setq effect
|
||||
(etaf-reactive-effect-create
|
||||
@ -519,7 +519,7 @@ effect. If FUNCTION returns a function, it cleans up the previous run."
|
||||
(setf (etaf-effect-scope-effects scope) nil
|
||||
(etaf-effect-scope-children scope) nil
|
||||
(etaf-effect-scope-cleanups scope) nil)
|
||||
(when-let ((parent (etaf-effect-scope-parent scope)))
|
||||
(when-let* ((parent (etaf-effect-scope-parent scope)))
|
||||
(setf (etaf-effect-scope-children parent)
|
||||
(delq scope (etaf-effect-scope-children parent))))
|
||||
(nreverse errors))))
|
||||
|
||||
@ -63,7 +63,7 @@
|
||||
|
||||
(defun etaf--resource-run-cleanup (resource)
|
||||
"Run RESOURCE's current cleanup once."
|
||||
(when-let ((cleanup (etaf-resource-cleanup resource)))
|
||||
(when-let* ((cleanup (etaf-resource-cleanup resource)))
|
||||
(setf (etaf-resource-cleanup resource) nil)
|
||||
(funcall cleanup)))
|
||||
|
||||
|
||||
@ -343,7 +343,7 @@ the sequential `etaf--pvec-put' contract."
|
||||
(unless (hash-table-p updates)
|
||||
(error "ETAF Theme paint update requires an active candidate"))
|
||||
(if (eq property :border)
|
||||
(if-let ((parts (etaf--theme-border-paint-parts resolved)))
|
||||
(if-let* ((parts (etaf--theme-border-paint-parts resolved)))
|
||||
(let* ((shape (car parts))
|
||||
(color (cadr parts))
|
||||
(spec (etaf--theme-paint-face-spec
|
||||
@ -423,7 +423,7 @@ the sequential `etaf--pvec-put' contract."
|
||||
(etaf--contribution-index-host-removals index)
|
||||
(etaf--contribution-index-semantic-removals index)))
|
||||
(setq index nil)
|
||||
(if-let ((entry (assoc key
|
||||
(if-let* ((entry (assoc key
|
||||
(etaf--contribution-index-values index slot))))
|
||||
(setq found entry)
|
||||
(setq index (etaf--contribution-index-base index)))))
|
||||
@ -482,7 +482,7 @@ the sequential `etaf--pvec-put' contract."
|
||||
generation 'context-consumers))
|
||||
(let ((provider-id (caar entry)))
|
||||
(dolist (effect-id (cdr entry))
|
||||
(when-let ((effect (etaf--generation-effect generation effect-id)))
|
||||
(when-let* ((effect (etaf--generation-effect generation effect-id)))
|
||||
(let ((consumer-id (etaf--generation-effect-semantic-id effect)))
|
||||
(unless (= provider-id consumer-id)
|
||||
(cl-pushnew consumer-id
|
||||
@ -668,7 +668,7 @@ FULL-P means candidate tables describe the complete mounted tree."
|
||||
|
||||
(defun etaf-runtime-generation (runtime)
|
||||
"Return RUNTIME's committed generation id."
|
||||
(if-let ((generation (etaf-runtime-current-generation runtime)))
|
||||
(if-let* ((generation (etaf-runtime-current-generation runtime)))
|
||||
(etaf-generation-generation-id generation)
|
||||
0))
|
||||
|
||||
@ -702,12 +702,12 @@ FULL-P means candidate tables describe the complete mounted tree."
|
||||
|
||||
(defun etaf--generation-semantic (generation identity)
|
||||
"Return IDENTITY semantic node from GENERATION."
|
||||
(when-let ((id (gethash identity (etaf-generation-identity-index generation))))
|
||||
(when-let* ((id (gethash identity (etaf-generation-identity-index generation))))
|
||||
(etaf--pvec-get (etaf-generation-semantic-nodes generation) id)))
|
||||
|
||||
(defun etaf--generation-effect-semantic (generation effect-id)
|
||||
"Return EFFECT-ID semantic node from GENERATION."
|
||||
(when-let ((effect (etaf--pvec-get
|
||||
(when-let* ((effect (etaf--pvec-get
|
||||
(etaf-generation-effect-map generation) effect-id)))
|
||||
(etaf--pvec-get (etaf-generation-semantic-nodes generation)
|
||||
(etaf--generation-effect-semantic-id effect))))
|
||||
@ -1012,7 +1012,7 @@ effect-to-source edges. It is intentionally immutable and suitable as an
|
||||
|
||||
(defun etaf--runtime-route-scheduler (route source)
|
||||
"Route dirty SOURCE through opaque ROUTE to its current generation."
|
||||
(when-let ((runtime
|
||||
(when-let* ((runtime
|
||||
(gethash (etaf-runtime-route-mount-epoch route)
|
||||
etaf--runtime-route-registry)))
|
||||
(when (etaf-runtime-mounted-p runtime)
|
||||
@ -1144,7 +1144,7 @@ when the requested boundary is no longer mounted."
|
||||
(defun etaf--runtime-component-env-signature (runtime component-id)
|
||||
"Return COMPONENT-ID's candidate or committed input signature in RUNTIME."
|
||||
(when component-id
|
||||
(or (when-let ((env (gethash component-id
|
||||
(or (when-let* ((env (gethash component-id
|
||||
(etaf-runtime-candidate-component-envs runtime))))
|
||||
(list (copy-tree (plist-get env :props))
|
||||
(copy-tree (plist-get env :slots))))
|
||||
@ -1366,7 +1366,7 @@ receive an independent Host effect."
|
||||
(defun etaf--runtime-finish-semantic-host
|
||||
(runtime semantic-id &optional content content-parts)
|
||||
"Seal SEMANTIC-ID Host child order from RUNTIME candidate graph."
|
||||
(when-let ((record (gethash semantic-id
|
||||
(when-let* ((record (gethash semantic-id
|
||||
(etaf-runtime-candidate-graph-nodes runtime))))
|
||||
(setf (etaf--semantic-host-child-ids record)
|
||||
(copy-sequence
|
||||
@ -1515,7 +1515,7 @@ need to know how Behavior attributes are merged."
|
||||
(old-key (gethash identity old-resources))
|
||||
(candidate-key (gethash identity candidate-resources)))
|
||||
(unless (and candidate (eq candidate old))
|
||||
(when-let ((cleanup (cdr old)))
|
||||
(when-let* ((cleanup (cdr old)))
|
||||
(etaf--runtime-run-contained-cleanup
|
||||
runtime 'behavior-remove identity cleanup))
|
||||
(when old-key
|
||||
@ -1534,7 +1534,7 @@ need to know how Behavior attributes are merged."
|
||||
|
||||
(defun etaf--runtime-rollback-behaviors (runtime)
|
||||
"Dispose Behavior installers created by a failed RUNTIME candidate."
|
||||
(when-let ((candidate (etaf-runtime-candidate-behaviors runtime)))
|
||||
(when-let* ((candidate (etaf-runtime-candidate-behaviors runtime)))
|
||||
(dolist (entry (reverse
|
||||
(sort (let (entries)
|
||||
(maphash (lambda (key value)
|
||||
@ -1558,7 +1558,7 @@ need to know how Behavior attributes are merged."
|
||||
(etaf-runtime-behavior-resource-keys runtime))))
|
||||
(same-state (eq state old-state)))
|
||||
(unless same-state
|
||||
(when-let ((cleanup (cdr state)))
|
||||
(when-let* ((cleanup (cdr state)))
|
||||
(etaf--runtime-run-contained-cleanup
|
||||
runtime 'behavior-rollback identity cleanup))
|
||||
(when (and candidate-key (not (equal candidate-key old-key)))
|
||||
@ -1811,7 +1811,7 @@ need to know how Behavior attributes are merged."
|
||||
(etaf-runtime-candidate-graph-children runtime))
|
||||
(remhash range-id (etaf-runtime-candidate-graph-children runtime))
|
||||
(dolist (child-id children)
|
||||
(when-let ((child
|
||||
(when-let* ((child
|
||||
(gethash child-id
|
||||
(etaf-runtime-candidate-graph-nodes runtime))))
|
||||
(let ((copy (copy-sequence child)))
|
||||
@ -1886,7 +1886,7 @@ need to know how Behavior attributes are merged."
|
||||
'component-output effect-id)
|
||||
:item-host-ids child-ids :item-identity-index item-index)))
|
||||
(dolist (child-id child-ids)
|
||||
(when-let ((child (gethash child-id
|
||||
(when-let* ((child (gethash child-id
|
||||
(etaf-runtime-candidate-graph-nodes runtime))))
|
||||
(let ((copy (copy-sequence child)))
|
||||
(cond ((etaf--semantic-host-p copy)
|
||||
@ -1901,7 +1901,7 @@ need to know how Behavior attributes are merged."
|
||||
(puthash child-id copy
|
||||
(etaf-runtime-candidate-graph-nodes runtime)))))
|
||||
(dolist (item-id all-item-ids)
|
||||
(when-let ((item (gethash item-id
|
||||
(when-let* ((item (gethash item-id
|
||||
(etaf-runtime-candidate-graph-nodes runtime))))
|
||||
(when (etaf--semantic-host-p item)
|
||||
(puthash (etaf--semantic-host-identity item) item-id item-index))))
|
||||
@ -1931,7 +1931,7 @@ need to know how Behavior attributes are merged."
|
||||
(puthash effect-id nodes
|
||||
(etaf-runtime-candidate-range-artifacts runtime))
|
||||
(dolist (child-id child-ids)
|
||||
(when-let ((child (gethash child-id
|
||||
(when-let* ((child (gethash child-id
|
||||
(etaf-runtime-candidate-graph-nodes runtime))))
|
||||
(let ((nested
|
||||
(cond
|
||||
@ -2038,13 +2038,13 @@ need to know how Behavior attributes are merged."
|
||||
;; subtree. Preserve the artifact root's contribution entry so
|
||||
;; a stable interactive child (for example a Button Component)
|
||||
;; remains dispatchable without traversing unrelated descendants.
|
||||
(when-let ((host-ref (plist-get artifact :host-ref)))
|
||||
(when-let ((handlers
|
||||
(when-let* ((host-ref (plist-get artifact :host-ref)))
|
||||
(when-let* ((handlers
|
||||
(etaf--generation-index-lookup
|
||||
old-generation 'handlers host-ref)))
|
||||
(puthash host-ref (copy-tree handlers)
|
||||
(etaf-runtime-candidate-handlers runtime)))
|
||||
(when-let ((host-props
|
||||
(when-let* ((host-props
|
||||
(etaf--generation-index-lookup
|
||||
old-generation 'host-props host-ref)))
|
||||
(puthash host-ref (copy-tree host-props)
|
||||
@ -2309,12 +2309,12 @@ need to know how Behavior attributes are merged."
|
||||
(when (and (etaf--semantic-host-p semantic)
|
||||
(etaf--semantic-host-host-ref semantic))
|
||||
(let ((host-ref (etaf--semantic-host-host-ref semantic)))
|
||||
(when-let ((handlers
|
||||
(when-let* ((handlers
|
||||
(etaf--generation-index-lookup
|
||||
generation 'handlers host-ref)))
|
||||
(puthash host-ref (copy-tree handlers)
|
||||
(etaf-runtime-candidate-handlers runtime)))
|
||||
(when-let ((props
|
||||
(when-let* ((props
|
||||
(etaf--generation-index-lookup
|
||||
generation 'host-props host-ref)))
|
||||
(puthash host-ref (copy-tree props)
|
||||
@ -2377,7 +2377,7 @@ need to know how Behavior attributes are merged."
|
||||
(puthash semantic-id (copy-sequence children)
|
||||
(etaf-runtime-candidate-graph-children runtime))
|
||||
(dolist (child-id children)
|
||||
(when-let ((child (etaf--pvec-get
|
||||
(when-let* ((child (etaf--pvec-get
|
||||
(etaf-generation-semantic-nodes generation) child-id)))
|
||||
(etaf--runtime-carry-committed-subtree runtime generation child)))))
|
||||
|
||||
@ -2543,7 +2543,7 @@ need to know how Behavior attributes are merged."
|
||||
(signal 'etaf-runtime-error
|
||||
(list "raw-ebox :value must return one public Ebox node")))
|
||||
(setq node (copy-tree node))
|
||||
(when-let ((key-thunk (etaf--raw-ebox-key-thunk raw)))
|
||||
(when-let* ((key-thunk (etaf--raw-ebox-key-thunk raw)))
|
||||
(let ((key (funcall key-thunk)))
|
||||
(etaf--validate-key key)
|
||||
(setq node (plist-put node :key key)))))
|
||||
@ -2827,7 +2827,7 @@ The candidate uses resolved VALUE, DEPS, and NODES."
|
||||
|
||||
(defun etaf--runtime-keyed-range-snapshot (expr)
|
||||
"Return EXPR's validated keyed Range snapshot, or nil."
|
||||
(when-let ((snapshot-function (etaf--expr-range-snapshot expr)))
|
||||
(when-let* ((snapshot-function (etaf--expr-range-snapshot expr)))
|
||||
(let ((key-function (etaf--expr-range-key expr))
|
||||
(item-function (etaf--expr-range-item expr))
|
||||
(snapshot (funcall snapshot-function)))
|
||||
@ -2991,7 +2991,7 @@ The candidate uses resolved VALUE, DEPS, and NODES."
|
||||
(etaf-runtime-candidate-inline-host-ids runtime)
|
||||
:test #'eql)
|
||||
(etaf--runtime-invalidate-semantic-ancestors runtime host-id)
|
||||
(when-let ((component
|
||||
(when-let* ((component
|
||||
(etaf--pvec-get
|
||||
(etaf-generation-semantic-nodes generation)
|
||||
(etaf--semantic-inline-range-component-id old))))
|
||||
@ -3270,7 +3270,7 @@ Generation, including its effects and Host contributions."
|
||||
;; node itself remains attached and is overwritten in place.
|
||||
(maphash
|
||||
(lambda (semantic-id semantic)
|
||||
(when-let ((old (etaf--pvec-get
|
||||
(when-let* ((old (etaf--pvec-get
|
||||
(etaf-generation-semantic-nodes base) semantic-id)))
|
||||
(when (and (etaf--semantic-host-p old)
|
||||
(etaf--semantic-host-p semantic)
|
||||
@ -3332,7 +3332,7 @@ Generation, including its effects and Host contributions."
|
||||
new-effects metrics)))))))
|
||||
(remove-effect
|
||||
(effect-id)
|
||||
(when-let ((old-effect
|
||||
(when-let* ((old-effect
|
||||
(and effect-map
|
||||
(etaf--pvec-get effect-map effect-id metrics
|
||||
'effect))))
|
||||
@ -3440,7 +3440,7 @@ Generation, including its effects and Host contributions."
|
||||
(dolist (effect-id (etaf-runtime-candidate-removed-effect-ids runtime))
|
||||
(remove-effect effect-id))
|
||||
(dolist (semantic-id (etaf-runtime-candidate-removed-semantic-ids runtime))
|
||||
(when-let ((old-node (and base
|
||||
(when-let* ((old-node (and base
|
||||
(etaf--pvec-get
|
||||
(etaf-generation-semantic-nodes base)
|
||||
semantic-id))))
|
||||
@ -3576,7 +3576,7 @@ Generation, including its effects and Host contributions."
|
||||
|
||||
(defun etaf--runtime-complete-generation (runtime old generation)
|
||||
"Complete RUNTIME from OLD through GENERATION and prune obsolete routes."
|
||||
(when-let ((focus-ref (etaf-runtime-focus-ref runtime)))
|
||||
(when-let* ((focus-ref (etaf-runtime-focus-ref runtime)))
|
||||
(let ((props (etaf--generation-index-lookup
|
||||
generation 'host-props focus-ref)))
|
||||
(unless (and (numberp (plist-get props :tab-index))
|
||||
@ -3585,7 +3585,7 @@ Generation, including its effects and Host contributions."
|
||||
(setf (etaf-runtime-focus-ref runtime) nil))))
|
||||
(maphash
|
||||
(lambda (_identity semantic)
|
||||
(when-let ((instance
|
||||
(when-let* ((instance
|
||||
(gethash (etaf--semantic-component-resource-key semantic)
|
||||
(etaf-runtime-resource-registry runtime))))
|
||||
(setf (etaf--component-instance-context instance)
|
||||
@ -3671,7 +3671,7 @@ Generation, including its effects and Host contributions."
|
||||
(etaf-runtime-candidate-behavior-resource-keys runtime)))
|
||||
(maphash
|
||||
(lambda (effect-id artifact)
|
||||
(when-let ((semantic
|
||||
(when-let* ((semantic
|
||||
(etaf--generation-effect-semantic
|
||||
generation effect-id)))
|
||||
(let ((key (etaf--semantic-component-artifact-key semantic)))
|
||||
@ -3681,7 +3681,7 @@ Generation, including its effects and Host contributions."
|
||||
(etaf-runtime-candidate-artifacts runtime))
|
||||
(maphash
|
||||
(lambda (effect-id artifact)
|
||||
(when-let ((range
|
||||
(when-let* ((range
|
||||
(etaf--generation-effect-semantic
|
||||
generation effect-id)))
|
||||
(let ((key (etaf--semantic-backend-range-artifact-key range)))
|
||||
@ -3728,7 +3728,7 @@ Generation, including its effects and Host contributions."
|
||||
(old (etaf--generation-participant-old participant))
|
||||
(candidate (etaf--generation-participant-candidate participant))
|
||||
paint-updates)
|
||||
(when-let ((table
|
||||
(when-let* ((table
|
||||
(etaf-runtime-candidate-theme-paint-updates runtime)))
|
||||
(maphash (lambda (slot spec)
|
||||
(push (cons slot (copy-tree spec)) paint-updates))
|
||||
@ -3743,7 +3743,7 @@ Generation, including its effects and Host contributions."
|
||||
(setf (etaf--generation-participant-state participant) 'published
|
||||
success t))
|
||||
(unless success
|
||||
(when-let ((paint-journal
|
||||
(when-let* ((paint-journal
|
||||
(etaf--generation-participant-paint-journal participant)))
|
||||
(tp-paint-slot-rollback-updates paint-journal)
|
||||
(setf (etaf--generation-participant-paint-journal participant) nil))
|
||||
@ -3752,7 +3752,7 @@ Generation, including its effects and Host contributions."
|
||||
|
||||
(defun etaf--runtime-participant-rollback (participant)
|
||||
"Rollback PARTICIPANT generation exactly and idempotently."
|
||||
(when-let ((paint-journal
|
||||
(when-let* ((paint-journal
|
||||
(etaf--generation-participant-paint-journal participant)))
|
||||
(tp-paint-slot-rollback-updates paint-journal)
|
||||
(setf (etaf--generation-participant-paint-journal participant) nil))
|
||||
@ -3838,7 +3838,7 @@ Generation, including its effects and Host contributions."
|
||||
generation (etaf--semantic-component-child-ids semantic)))
|
||||
found)
|
||||
(dolist (semantic-id descendants)
|
||||
(when-let ((slot-range
|
||||
(when-let* ((slot-range
|
||||
(let ((node (etaf--pvec-get
|
||||
(etaf-generation-semantic-nodes generation)
|
||||
semantic-id)))
|
||||
@ -3922,7 +3922,7 @@ Generation, including its effects and Host contributions."
|
||||
(etaf--resolve-property-value
|
||||
(etaf--host-property-binding-expression
|
||||
binding)))))))
|
||||
(if-let ((component-id
|
||||
(if-let* ((component-id
|
||||
(etaf--semantic-host-component-id base)))
|
||||
(etaf--runtime-call-with-component-env
|
||||
runtime component-id evaluate)
|
||||
@ -4518,7 +4518,7 @@ Generation, including its effects and Host contributions."
|
||||
:test #'eql)
|
||||
(etaf--runtime-invalidate-semantic-ancestors
|
||||
runtime (etaf--semantic-inline-range-parent-id inline))
|
||||
(when-let ((component
|
||||
(when-let* ((component
|
||||
(etaf--pvec-get
|
||||
(etaf-generation-semantic-nodes
|
||||
(etaf-runtime-current-generation runtime))
|
||||
@ -4607,7 +4607,7 @@ Generation, including its effects and Host contributions."
|
||||
(or (gethash (etaf--semantic-component-identity record)
|
||||
(etaf-runtime-candidate-semantic-nodes runtime))
|
||||
record))))
|
||||
(when-let ((key (etaf--semantic-component-artifact-key record)))
|
||||
(when-let* ((key (etaf--semantic-component-artifact-key record)))
|
||||
(push key
|
||||
(etaf-runtime-candidate-invalidated-artifact-keys runtime)))
|
||||
(setf (etaf--semantic-component-artifact-key candidate) nil)
|
||||
@ -5190,10 +5190,10 @@ backend anchor proof failed; ordinary root turns keep their artifact reuse."
|
||||
(pop tail)
|
||||
(unless (memq key '(:viewport-width :viewport-height))
|
||||
(error "Unknown ETAF mount option: %S" key)))))
|
||||
(when-let ((width (plist-get options :viewport-width)))
|
||||
(when-let* ((width (plist-get options :viewport-width)))
|
||||
(unless (and (numberp width) (> width 0))
|
||||
(error "ETAF mount :viewport-width must be positive: %S" width)))
|
||||
(when-let ((height (plist-get options :viewport-height)))
|
||||
(when-let* ((height (plist-get options :viewport-height)))
|
||||
(unless (and (numberp height) (> height 0))
|
||||
(error "ETAF mount :viewport-height must be positive: %S" height)))
|
||||
options)
|
||||
@ -5238,7 +5238,7 @@ of requiring an immediate viewport rerender."
|
||||
(etaf-scope-stop (etaf-runtime-scope runtime))
|
||||
(maphash
|
||||
(lambda (identity state)
|
||||
(when-let ((cleanup (cdr state)))
|
||||
(when-let* ((cleanup (cdr state)))
|
||||
(etaf--runtime-run-contained-cleanup
|
||||
runtime 'behavior-unmount identity cleanup)))
|
||||
(etaf-runtime-behaviors runtime))
|
||||
|
||||
@ -157,7 +157,7 @@ form, or core Host. A collision receives a semantic `-view' alias."
|
||||
(etaf--component-error
|
||||
"Component %S is already registered" name)))
|
||||
(puthash name spec etaf--view-registry)
|
||||
(when-let ((alias (etaf--component-alias name)))
|
||||
(when-let* ((alias (etaf--component-alias name)))
|
||||
(let ((existing (gethash alias etaf--view-registry)))
|
||||
(when (and existing (not (eq existing spec))
|
||||
(not etaf--allow-component-redefinition))
|
||||
|
||||
@ -129,10 +129,10 @@
|
||||
(defun etaf-counter-example-close ()
|
||||
"Unmount and kill the counter example buffer."
|
||||
(interactive)
|
||||
(when-let ((runtime
|
||||
(when-let* ((runtime
|
||||
(etaf-runtime-for-buffer etaf-counter-example-buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer etaf-counter-example-buffer-name)))
|
||||
(when-let* ((buffer (get-buffer etaf-counter-example-buffer-name)))
|
||||
(kill-buffer buffer)))
|
||||
|
||||
(provide 'etaf-counter-example)
|
||||
|
||||
@ -179,10 +179,10 @@ Use BORDER and BACKGROUND for its semantic color family."
|
||||
(defun etaf-data-example-close ()
|
||||
"Unmount and kill the Data Controller example buffer."
|
||||
(interactive)
|
||||
(when-let ((runtime
|
||||
(when-let* ((runtime
|
||||
(etaf-runtime-for-buffer etaf-data-example-buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer etaf-data-example-buffer-name)))
|
||||
(when-let* ((buffer (get-buffer etaf-data-example-buffer-name)))
|
||||
(kill-buffer buffer)))
|
||||
|
||||
(provide 'etaf-data-example)
|
||||
|
||||
@ -133,10 +133,10 @@
|
||||
(defun etaf-resource-example-close ()
|
||||
"Unmount and kill the Resource lifecycle example buffer."
|
||||
(interactive)
|
||||
(when-let ((runtime
|
||||
(when-let* ((runtime
|
||||
(etaf-runtime-for-buffer etaf-resource-example-buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer etaf-resource-example-buffer-name)))
|
||||
(when-let* ((buffer (get-buffer etaf-resource-example-buffer-name)))
|
||||
(kill-buffer buffer)))
|
||||
|
||||
(provide 'etaf-resource-example)
|
||||
|
||||
@ -306,9 +306,9 @@
|
||||
'(runtime reactive ebox tp)))
|
||||
(etaf-performance-operation-stages record)))
|
||||
(etaf-performance-records))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-performance-panel-has-operation-and-stage-entries ()
|
||||
|
||||
@ -1456,9 +1456,9 @@
|
||||
(etaf-runtime-root-node
|
||||
(etaf-runtime-for-buffer buffer-name))
|
||||
:color))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-mounted-styles-stop-at-nested-component-boundaries ()
|
||||
@ -1473,9 +1473,9 @@
|
||||
(etaf-runtime-root-node
|
||||
(etaf-runtime-for-buffer buffer-name))
|
||||
:color))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-theme-defaults-are-inherited-and-overridable ()
|
||||
@ -1488,9 +1488,9 @@
|
||||
(node (etaf-runtime-root-node runtime)))
|
||||
(should (equal "theme-color" (ebox-get node :color)))
|
||||
(should (equal "theme-bg" (ebox-get node :bgcolor)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-theme-token-resolves-static-component-style ()
|
||||
@ -1505,9 +1505,9 @@
|
||||
(etaf-runtime-root-node
|
||||
(etaf-runtime-for-buffer buffer-name))
|
||||
:color))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-theme-token-resolves-nested-fallback-before-transform ()
|
||||
@ -1551,9 +1551,9 @@
|
||||
"#EEEEEE"))
|
||||
(should (equal (etaf-test--face-value face :background)
|
||||
"#111111"))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-theme-paint-slot-rolls-back-with-generation-failure ()
|
||||
@ -1582,9 +1582,9 @@
|
||||
(should (= generation (etaf-runtime-generation runtime)))
|
||||
(should (equal "#111111"
|
||||
(plist-get (tp-paint-slot-spec slot) :foreground)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-theme-and-component-change-publish-one-final-artifact ()
|
||||
@ -1627,9 +1627,9 @@
|
||||
(should (equal "#111111" (background slot))))
|
||||
(should (string-match-p
|
||||
"Dark" (etaf-test--buffer-text buffer-name)))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-detached-component-subtree-retires-host-effects ()
|
||||
@ -1664,9 +1664,9 @@
|
||||
(should
|
||||
(equal "#222222"
|
||||
(plist-get (tp-paint-slot-spec color) :foreground))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-theme-resolves-explicit-light-dark-palette ()
|
||||
@ -1729,9 +1729,9 @@
|
||||
(should (= etaf-test-updated-count 1))
|
||||
(etaf-unmount (etaf-runtime-for-buffer buffer-name))
|
||||
(should (= etaf-test-unmounted-count 1)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-recollects-late-branch-dependencies ()
|
||||
@ -1748,9 +1748,9 @@
|
||||
(setf (etaf-value etaf-test-branch-late-cell) "late-updated")
|
||||
(with-current-buffer buffer-name
|
||||
(should (equal "late-updated" (buffer-string)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-branch-switch-keeps-equal-sources-distinct ()
|
||||
@ -1774,9 +1774,9 @@
|
||||
(setf (etaf-value etaf-test-branch-late-cell) "new-only")
|
||||
(should (= (1+ before) (etaf-runtime-generation runtime)))
|
||||
(should (equal "new-only" (etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-theme-validation-snapshot-is-shared-across-contexts ()
|
||||
"Validate one immutable Theme value once for all inheriting Context frames."
|
||||
@ -1810,9 +1810,9 @@
|
||||
(setf (etaf-value etaf-test-theme-cell) 'light)
|
||||
(with-current-buffer buffer-name
|
||||
(should (equal "light" (buffer-string)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-behavior-event-and-action-share-runtime-boundary ()
|
||||
@ -1847,9 +1847,9 @@
|
||||
(etaf-runtime-handlers runtime)))))
|
||||
(etaf-unmount runtime))
|
||||
(should (= etaf-test-behavior-cleanups 1)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-composes-host-and-behavior-events-in-order ()
|
||||
@ -1873,9 +1873,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf-dispatch-event (etaf-runtime-for-buffer buffer-name)
|
||||
'composed 'press)
|
||||
(should (equal order '(host behavior))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-behavior-replacement-disposes-previous-installer ()
|
||||
@ -1912,9 +1912,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value marker) 1)
|
||||
(should (= 3 etaf-test-behavior-installs))
|
||||
(should (= 2 etaf-test-behavior-cleanups)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-behavior-rollback-cleanups-continue-and-diagnose ()
|
||||
@ -2285,9 +2285,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(with-current-buffer buffer-name
|
||||
(should (equal "B" (buffer-string))))
|
||||
(should (= 1 etaf-test-setup-count)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-keeps-last-committed-view-after-render-error ()
|
||||
@ -2308,9 +2308,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value fail-p) nil)
|
||||
(with-current-buffer buffer-name
|
||||
(should (equal "stable:0" (buffer-string)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-keeps-published-state-when-lifecycle-fails ()
|
||||
@ -2334,9 +2334,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value label) "C")
|
||||
(with-current-buffer buffer-name
|
||||
(should (equal "C" (buffer-string)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-events-support-payload-and-cyclic-focus ()
|
||||
@ -2359,9 +2359,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (eq 'first (etaf-focus-next runtime)))
|
||||
(etaf-dispatch-event runtime 'second 'input "value" t)
|
||||
(should (equal "value" payload))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-event-dispatch-batches-reactive-publication ()
|
||||
@ -2379,9 +2379,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
"source=2 computed=4 watch:2 effect:4"
|
||||
(buffer-string))))
|
||||
(should (= 1 (- (etaf-runtime-generation runtime) before)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-pvec-put-many-preserves-values-and-shares-untouched-branches ()
|
||||
@ -2448,9 +2448,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 (hash-table-count etaf-test-retained-render-counts)))
|
||||
(should (eq old-index (etaf-generation-identity-index new)))
|
||||
(should (<= (etaf--generation-metrics-node-copies metrics) 128)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-shared-source-renders-siblings-in-one-commit ()
|
||||
"Render exactly two subscribing siblings and publish one candidate."
|
||||
@ -2493,9 +2493,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (zerop (gethash "U" etaf-test-retained-render-counts 0)))
|
||||
(should (= 1 root-calls))
|
||||
(should (= 1 (hash-table-count (etaf-ref-subscribers shared))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-root-rebuild-retains-unchanged-sibling-routes ()
|
||||
"Retain an unchanged sibling semantic subtree across a Root-owned rebuild."
|
||||
@ -2530,9 +2530,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= root-before root-calls))
|
||||
(should (= 1 (gethash "R" etaf-test-retained-render-counts 0)))
|
||||
(should (zerop (gethash "B" etaf-test-retained-render-counts 0)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-setup-read-is-not-a-render-dependency ()
|
||||
"Do not subscribe a Component render owner to setup-only reads."
|
||||
@ -2552,9 +2552,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value render-source) "B")
|
||||
(should (= (1+ before) (etaf-runtime-generation runtime)))
|
||||
(should (equal "B" (etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-dependency-only-promotion-skips-ebox-publication ()
|
||||
"Promote changed dependencies/output inputs without an Ebox commit."
|
||||
@ -2575,9 +2575,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value source) 1)
|
||||
(should (= (1+ before) (etaf-runtime-generation runtime)))
|
||||
(should (zerop commits))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-equal-component-input-skips-render ()
|
||||
"Promote an input target dependency change without running its render target."
|
||||
@ -2596,9 +2596,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value trigger) 1)
|
||||
(should (= (1+ before) (etaf-runtime-generation runtime)))
|
||||
(should (zerop etaf-test-input-render-count))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-input-target-precedes-render-target ()
|
||||
"Render once with final inputs regardless of batched source write order."
|
||||
@ -2625,9 +2625,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 etaf-test-priority-render-count))
|
||||
(should (= 1 (- (etaf-runtime-generation runtime) before)))
|
||||
(should (equal "B/1" (etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-runtime-local-component-retains-caller-style-environment ()
|
||||
"Preserve caller style/slot environment across a Component-only update."
|
||||
@ -2650,9 +2650,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (equal "B" (substring-no-properties text)))
|
||||
(should (equal '(:foreground "retained-color")
|
||||
(get-text-property 0 'face text)))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-lazy-computed-owns-its-underlying-dependency ()
|
||||
"Route Component to computed while its ordinary effect owns the base ref."
|
||||
@ -2673,9 +2673,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value etaf-test-lazy-computed-base) 3)
|
||||
(should (= (1+ before) (etaf-runtime-generation runtime)))
|
||||
(should (equal "6" (etaf-test--buffer-text buffer-name))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-reactive-post-publication-write-runs-next-runtime-turn ()
|
||||
"Drain a lifecycle source write as a distinct following Runtime turn."
|
||||
@ -2695,9 +2695,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value source) 1)
|
||||
(should (= 2 (- (etaf-runtime-generation runtime) before)))
|
||||
(should (equal "1/1" (etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-route-is-opaque-and-unmount-disarms-sources ()
|
||||
"Keep sources free of Runtime closures and remove route tokens on unmount."
|
||||
@ -2713,7 +2713,7 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (gethash route (etaf-ref-subscribers source)))
|
||||
(etaf-unmount runtime)
|
||||
(should (= baseline (hash-table-count (etaf-ref-subscribers source)))))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-participant-publish-failure-restores-generation ()
|
||||
"Restore generation and Ebox state when participant publish fails after swap."
|
||||
@ -2784,9 +2784,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (equal "1=2" (etaf-test--buffer-text buffer-name)))
|
||||
(etaf-runtime-flush runtime)
|
||||
(should (equal "1=3" (etaf-test--buffer-text buffer-name))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-artifact-registry-stays-bounded ()
|
||||
"Discard superseded artifacts after repeated Component publications."
|
||||
@ -2805,9 +2805,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (<= (hash-table-count
|
||||
(etaf-runtime-artifact-registry runtime))
|
||||
baseline))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-prepublication-journals-are-exception-atomic ()
|
||||
"Rollback partial resource, artifact, and route installation immediately."
|
||||
@ -2845,7 +2845,7 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf--view-call 'etaf-test-retained-leaf
|
||||
(list :label 1 :cell source) nil))
|
||||
(etaf-unmount (etaf-runtime-for-buffer buffer-name))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-route-arm-kth-failure-is-bounded-and-retryable ()
|
||||
"Rollback each partial route arm and keep repeated failures bounded."
|
||||
@ -2900,9 +2900,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (zerop (hash-table-count (etaf-ref-subscribers left))))
|
||||
(should (zerop (hash-table-count
|
||||
(etaf-ref-subscribers right))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-runtime-published-generation-resolves-new-resource ()
|
||||
"Make every newly published resource membership immediately resolvable."
|
||||
@ -2943,9 +2943,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf-generation-identity-index generation)))))))
|
||||
(setf (etaf-value show) t)))
|
||||
(should (= 1 checked)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-local-parent-does-not-carry-unchanged-descendants ()
|
||||
"Avoid generation subtree carry for 500 unchanged children of a dirty parent."
|
||||
@ -2965,9 +2965,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value etaf-test-wide-parent-source) 1))
|
||||
(should (zerop (hash-table-count
|
||||
etaf-test-retained-render-counts)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-direct-expr-publishes-child-range-only ()
|
||||
"Publish a direct material-child expr without running its Component owner."
|
||||
@ -3044,9 +3044,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
child-id)))
|
||||
(walk child-id))))
|
||||
(walk 0)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-view-expr-callsite-token-is-stable ()
|
||||
"Give repeated values from one compiled expr site the same opaque token."
|
||||
@ -3081,9 +3081,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf-generation-identity-index generation))
|
||||
(should (= 1 (length ranges)))
|
||||
(push (etaf--semantic-range-token (car ranges)) tokens)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))
|
||||
(should (eq (car tokens) (cadr tokens)))))
|
||||
|
||||
(ert-deftest etaf-runtime-does-not-encode-ebox-layout-shapes ()
|
||||
@ -3195,9 +3195,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(list 'host range-id :key 'b)
|
||||
(etaf--semantic-range-item-identity-index range))))
|
||||
(if b-id (should (= b-id id)) (setq b-id id))))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-runtime-two-direct-ranges-batch-one-publication ()
|
||||
"Evaluate and splice two disjoint Ranges once in one logical commit."
|
||||
@ -3227,9 +3227,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 commits))
|
||||
(should (= 1 (hash-table-count
|
||||
(etaf-ref-subscribers etaf-test-range-source))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-range-artifact-survives-root-rebuild ()
|
||||
"Relower current Range graph after Root change without application thunks."
|
||||
@ -3285,9 +3285,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(setf (etaf-value etaf-test-range-source) '((b . "B")))
|
||||
(should (= 1 etaf-test-range-evals))
|
||||
(should (string-match-p "B" (etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-range-address-survives-preceding-static-insert ()
|
||||
"Keep Range id/ref when its material parent's preceding siblings change."
|
||||
@ -3322,9 +3322,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (eq range-ref (etaf--semantic-range-range-ref range))))
|
||||
(setf (etaf-value etaf-test-range-source) '((a . "A")))
|
||||
(should (= 1 etaf-test-range-evals))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-range-rebuild-keeps-bare-string-siblings ()
|
||||
"Keep mounted synthetic string Hosts through Range invalidation and rebuild."
|
||||
@ -3344,9 +3344,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (string-match-p "prefix" text))
|
||||
(should (string-match-p "A" text))
|
||||
(should (string-match-p "suffix" text))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-range-failure-rolls-back-and-manual-retries ()
|
||||
"Restore Range graph/artifacts/buffer for prepublish and final-accept failure."
|
||||
@ -3400,9 +3400,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf-runtime-flush runtime)
|
||||
(should (string-match-p "B"
|
||||
(etaf-test--buffer-text buffer-name))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-direct-range-rejects-step4b-output-without-reownership ()
|
||||
"Reject direct Component/raw output while retaining Range-only dependency."
|
||||
@ -3429,9 +3429,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf--generation-effect generation effect-id)))
|
||||
(etaf--generation-source-effects
|
||||
generation etaf-test-unsupported-range-source))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-runtime-direct-range-normalizes-bare-string-item ()
|
||||
"Represent a bare direct expr string as one synthetic semantic text Host."
|
||||
@ -3454,9 +3454,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 (length (etaf--semantic-range-item-host-ids range))))
|
||||
(should (string-match-p "hello"
|
||||
(etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-range-recursively-retains-and-removes-host-subtree ()
|
||||
"Retain keyed nested Hosts and tombstone their full removed subtree."
|
||||
@ -3532,9 +3532,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should-not (etaf--pvec-get
|
||||
(etaf-generation-children-table new-generation)
|
||||
semantic-id))))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-inline-effect-replaces-only-containing-host ()
|
||||
"Update one inline site beside 500 unrelated Components with one Host commit."
|
||||
@ -3612,9 +3612,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf--pvec-get
|
||||
(etaf-generation-parent-table generation)
|
||||
(etaf--semantic-inline-range-semantic-id inline)))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-inline-effects-coalesce-per-host ()
|
||||
"Coalesce two inline effects in one Host and split two distinct Hosts."
|
||||
@ -3647,9 +3647,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 host-replaces))
|
||||
(should (= 1 commits))
|
||||
(should (= 1 etaf-test-inline-updated-count))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))
|
||||
(let ((buffer-name " *etaf-inline-two-host-test*")
|
||||
(etaf-test-inline-shared (etaf-ref "0"))
|
||||
(etaf-test-inline-shared-evals 0)
|
||||
@ -3670,9 +3670,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 2 etaf-test-inline-shared-evals))
|
||||
(should (= 2 host-replaces))
|
||||
(should (= 1 commits)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-inline-output-equal-promotes-dependencies-only ()
|
||||
"Promote an inline branch dependency change without Ebox publication."
|
||||
@ -3709,9 +3709,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= (1+ before) (etaf-runtime-generation runtime)))
|
||||
(should (zerop commits))
|
||||
(should (zerop etaf-test-inline-branch-updated))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-slot-inline-keeps-authoring-component-environment ()
|
||||
"Read authoring parent props through default and forwarded named slots."
|
||||
@ -3740,9 +3740,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 etaf-test-slot-parent-renders))
|
||||
(should (zerop etaf-test-slot-forwarder-renders))
|
||||
(should (zerop etaf-test-slot-consumer-renders)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-runtime-nested-component-input-reads-caller-candidate-props ()
|
||||
"Resolve child input thunks from final candidate parent props."
|
||||
@ -3755,9 +3755,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (equal "A" (etaf-test--buffer-text buffer-name)))
|
||||
(setf (etaf-value label) "B")
|
||||
(should (equal "B" (etaf-test--buffer-text buffer-name))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-inline-and-input-fixed-point-uses-final-props-once ()
|
||||
"Run input, inline, and Component render once for either source write order."
|
||||
@ -3788,9 +3788,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 etaf-test-inline-priority-renders))
|
||||
(should (= 1 etaf-test-inline-priority-updated))
|
||||
(should (equal "B/1" (etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-runtime-range-and-input-fixed-point-reuses-range-candidate ()
|
||||
"Evaluate direct Range once when Component input changes in the same turn."
|
||||
@ -3818,9 +3818,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 etaf-test-range-component-renders))
|
||||
(should (string-match-p "B/1"
|
||||
(etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-runtime-slot-range-direct-source-skips-component-renders ()
|
||||
"Update default, forwarded named, and fallback slot Ranges directly."
|
||||
@ -3872,9 +3872,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(get-text-property
|
||||
0 'face (buffer-string))))))
|
||||
(should (= 1 etaf-test-slot-author-updated))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer))))))
|
||||
|
||||
(ert-deftest etaf-runtime-slot-range-two-sites-batch-one-commit ()
|
||||
"Evaluate two projection sites and publish two Range replacements once."
|
||||
@ -3899,9 +3899,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 2 etaf-test-slot-range-evals))
|
||||
(should (= 2 range-replaces))
|
||||
(should (= 1 commits)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-slot-retarget-equal-output-promotes-dependencies ()
|
||||
"Retarget caller slot deps without rendering Consumer or publishing Ebox."
|
||||
@ -3936,9 +3936,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
generation etaf-test-slot-branch-left))
|
||||
(should (etaf--generation-source-effects
|
||||
generation etaf-test-slot-branch-right)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-slot-range-rolls-back-rebuilds-and-removes-items ()
|
||||
"Keep slot Range state atomic across rollback, rebuild, and item removal."
|
||||
@ -3993,9 +3993,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf-generation-parent-table generation) item-id))
|
||||
(should-not (etaf--pvec-get
|
||||
(etaf-generation-children-table generation) item-id))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-material-fragment-is-one-retained-range-owner ()
|
||||
"Update a material fragment without rendering its Component or Root."
|
||||
@ -4037,9 +4037,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (eq 'fragment
|
||||
(etaf--generation-effect-kind
|
||||
(etaf--generation-effect generation effect-id))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-material-raw-ebox-is-one-opaque-range-owner ()
|
||||
"Update raw value and key through one opaque Range effect."
|
||||
@ -4103,9 +4103,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (equal before (etaf-test--buffer-text buffer-name))))
|
||||
(etaf-runtime-flush runtime)
|
||||
(should (string-match-p "C" (etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-root-effect-owns-one-semantic-root-range ()
|
||||
"Publish Root changes through one semantic Root Range and root replacement."
|
||||
@ -4159,9 +4159,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (equal before (etaf-test--buffer-text buffer-name))))
|
||||
(etaf-runtime-flush runtime)
|
||||
(should (string-match-p "C" (etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-transparent-component-publishes-output-range ()
|
||||
"Publish transparent Component nil/one/many output through one Range."
|
||||
@ -4228,9 +4228,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf-runtime-flush runtime)
|
||||
(should (string-match-p "C"
|
||||
(etaf-test--buffer-text buffer-name)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-transparent-chain-shares-nearest-backend-anchor ()
|
||||
"Update an inner transparent Component without rendering its ancestors."
|
||||
@ -4260,9 +4260,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (= 1 range-replaces))
|
||||
(should (= 1 commits))
|
||||
(should (string-match-p "B" (etaf-test--buffer-text buffer-name))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-parent-rerender-rebuilds-invalidated-artifact ()
|
||||
"Rebuild a committed parent anchor after a descendant-only publication."
|
||||
@ -4288,9 +4288,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
runtime '(etaf-host (root :view)))
|
||||
:bgcolor)
|
||||
"dark"))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-runtime-context-provider-promotes-consumer-atomically ()
|
||||
@ -4329,9 +4329,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(get-text-property 0 'face (buffer-string)))))
|
||||
(should-not (eq old-generation
|
||||
(etaf-runtime-current-generation runtime)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-generation-owns-handler-ref-and-focus-contributions ()
|
||||
"Dispatch only committed handlers and remove stale focus membership."
|
||||
@ -4382,9 +4382,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should-error (etaf-dispatch-event runtime 'target 'press)
|
||||
:type 'etaf-event-error)
|
||||
(should-not (etaf-focused-host-ref runtime))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-candidate-reintroduced-host-cancels-contribution-removal ()
|
||||
"Cancel a Host tombstone when the same stable ref is re-registered."
|
||||
@ -4492,9 +4492,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf--generation-effect-kind
|
||||
(etaf--generation-effect generation
|
||||
(cadar edges)))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-context-edge-belongs-to-slot-range-effect ()
|
||||
"Invalidate the authored slot Range without rendering its consumer."
|
||||
@ -4523,9 +4523,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (eq 'slot
|
||||
(etaf--generation-effect-kind
|
||||
(etaf--generation-effect generation effect-id))))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-context-cycle-validator-allows-long-chain-and-rejects-cycle ()
|
||||
"Settle a long Context graph and reject one deterministic cross-edge cycle."
|
||||
@ -4593,9 +4593,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(let ((text (buffer-string)))
|
||||
(should (equal "PB" (substring-no-properties text)))
|
||||
(should (get-text-property 1 'face text)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
(when-let* ((buffer (get-buffer buffer-name))) (kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-event-dispatch-noop-does-not-publish ()
|
||||
"Do not publish when an event callback changes no reactive state."
|
||||
@ -4607,9 +4607,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(before (etaf-runtime-generation runtime)))
|
||||
(etaf-dispatch-event runtime 'event-batch-noop 'press)
|
||||
(should (= before (etaf-runtime-generation runtime)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-event-dispatch-nested-batches-once ()
|
||||
@ -4624,9 +4624,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (equal "Outer Inner nested"
|
||||
(etaf-test--buffer-text buffer-name)))
|
||||
(should (= 1 (- (etaf-runtime-generation runtime) before)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-event-dispatch-batches-behavior-two-ref-write ()
|
||||
@ -4642,9 +4642,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (equal "Toggle left=on right=on"
|
||||
(etaf-test--buffer-text buffer-name)))
|
||||
(should (= 1 (- (etaf-runtime-generation runtime) before)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-event-dispatch-batches-computed-theme ()
|
||||
@ -4661,9 +4661,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should (equal "Theme theme=dark"
|
||||
(etaf-test--buffer-text buffer-name)))
|
||||
(should (= 1 (- (etaf-runtime-generation runtime) before)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-event-dispatch-batches-resource-success-and-error ()
|
||||
@ -4696,9 +4696,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
"status=error value=none error=yes"
|
||||
(buffer-string))))
|
||||
(should (= 1 (- (etaf-runtime-generation runtime) before)))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer))
|
||||
(etaf-resource-dispose resource))))
|
||||
|
||||
@ -4746,9 +4746,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf-unmount runtime))
|
||||
(with-current-buffer buffer-name
|
||||
(should-not etaf-input-mode)))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-activation-skips-disabled-and-callbackless-hosts ()
|
||||
@ -4777,9 +4777,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(list window
|
||||
(etaf-host-ref-position runtime 'passive))))))
|
||||
(should (= 0 etaf-test-event-count))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-mount-publishes-through-ebox ()
|
||||
@ -4791,7 +4791,7 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(etaf-view (text :color "#F4F6FB" "Mounted")))
|
||||
(with-current-buffer buffer-name
|
||||
(should (equal "Mounted" (buffer-string)))))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
(ert-deftest etaf-mount-accepts-final-initial-viewport ()
|
||||
@ -4815,9 +4815,9 @@ Event composition is a Runtime contract, not a UI-library helper contract."
|
||||
(should-error
|
||||
(etaf-mount buffer-name (etaf-view (text "Invalid"))
|
||||
'(:viewport-width 0))))
|
||||
(when-let ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(when-let* ((runtime (etaf-runtime-for-buffer buffer-name)))
|
||||
(etaf-unmount runtime))
|
||||
(when-let ((buffer (get-buffer buffer-name)))
|
||||
(when-let* ((buffer (get-buffer buffer-name)))
|
||||
(kill-buffer buffer)))))
|
||||
|
||||
;;; etaf-tests.el ends here
|
||||
|
||||
Loading…
Reference in New Issue
Block a user