From af01b71e3f85b45eb7e92b2266ee7d1c9c54c6f7 Mon Sep 17 00:00:00 2001 From: Kinneyzhang Date: Wed, 26 Aug 2026 00:09:58 +0800 Subject: [PATCH] chore: migrate conditional bindings for Emacs 31 --- etaf-compiler.el | 4 +- etaf-data.el | 6 +- etaf-events.el | 4 +- etaf-performance.el | 6 +- etaf-reactive.el | 10 +- etaf-resource.el | 2 +- etaf-runtime.el | 84 ++++---- etaf-view.el | 2 +- examples/etaf-counter-example.el | 4 +- examples/etaf-data-example.el | 4 +- examples/etaf-resource-example.el | 4 +- tests/etaf-performance-tests.el | 4 +- tests/etaf-tests.el | 314 +++++++++++++++--------------- 13 files changed, 224 insertions(+), 224 deletions(-) diff --git a/etaf-compiler.el b/etaf-compiler.el index 51a8ee8..15abdf5 100644 --- a/etaf-compiler.el +++ b/etaf-compiler.el @@ -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))) diff --git a/etaf-data.el b/etaf-data.el index 1164983..8938025 100644 --- a/etaf-data.el +++ b/etaf-data.el @@ -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 diff --git a/etaf-events.el b/etaf-events.el index 2550731..44d021d 100644 --- a/etaf-events.el +++ b/etaf-events.el @@ -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)))))))) diff --git a/etaf-performance.el b/etaf-performance.el index de385e9..45ad2aa 100644 --- a/etaf-performance.el +++ b/etaf-performance.el @@ -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) "-") diff --git a/etaf-reactive.el b/etaf-reactive.el index fbce67a..b4ebd02 100644 --- a/etaf-reactive.el +++ b/etaf-reactive.el @@ -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)))) diff --git a/etaf-resource.el b/etaf-resource.el index 2a90018..cf88f6e 100644 --- a/etaf-resource.el +++ b/etaf-resource.el @@ -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))) diff --git a/etaf-runtime.el b/etaf-runtime.el index 149f18a..703bbbe 100644 --- a/etaf-runtime.el +++ b/etaf-runtime.el @@ -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)) diff --git a/etaf-view.el b/etaf-view.el index dee7efe..2087c4b 100644 --- a/etaf-view.el +++ b/etaf-view.el @@ -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)) diff --git a/examples/etaf-counter-example.el b/examples/etaf-counter-example.el index f8af57e..0d4b386 100644 --- a/examples/etaf-counter-example.el +++ b/examples/etaf-counter-example.el @@ -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) diff --git a/examples/etaf-data-example.el b/examples/etaf-data-example.el index c6d3708..481319d 100644 --- a/examples/etaf-data-example.el +++ b/examples/etaf-data-example.el @@ -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) diff --git a/examples/etaf-resource-example.el b/examples/etaf-resource-example.el index c19467f..75e5268 100644 --- a/examples/etaf-resource-example.el +++ b/examples/etaf-resource-example.el @@ -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) diff --git a/tests/etaf-performance-tests.el b/tests/etaf-performance-tests.el index b1dcbb2..a50663a 100644 --- a/tests/etaf-performance-tests.el +++ b/tests/etaf-performance-tests.el @@ -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 () diff --git a/tests/etaf-tests.el b/tests/etaf-tests.el index cbfb336..73a9f81 100644 --- a/tests/etaf-tests.el +++ b/tests/etaf-tests.el @@ -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