From 711a7244ce4bd6ec505e864489abf882debad6e5 Mon Sep 17 00:00:00 2001 From: xificurC Date: Tue, 10 Sep 2024 17:52:44 +0200 Subject: [PATCH] [i/items] orphaned item-ps doesn't step on cancel --- src/hyperfiddle/incseq/items_eager_impl.cljc | 2 +- .../incseq/items_eager_impl_test.cljc | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/hyperfiddle/incseq/items_eager_impl.cljc b/src/hyperfiddle/incseq/items_eager_impl.cljc index 9648bec39..8a1447ea8 100644 --- a/src/hyperfiddle/incseq/items_eager_impl.cljc +++ b/src/hyperfiddle/incseq/items_eager_impl.cljc @@ -70,7 +70,7 @@ (#?(:clj invoke :cljs -invoke) [this] (remove-item-ps item this) (let [cancelled? (a/getset a -cancelled true)] - (when (not (or (a/getset a -stepped true) cancelled?)) (step)))) + (when-not (or (a/getset a -stepped true) cancelled? (= this (a/get a -cache))) (step)))) (#?(:clj invoke :cljs -invoke) [_ v] (when-not (or (= v (a/getset a -cache v)) (a/getset a -stepped true)) (step))) diff --git a/test/hyperfiddle/incseq/items_eager_impl_test.cljc b/test/hyperfiddle/incseq/items_eager_impl_test.cljc index 0005c0be6..5b6b19c61 100644 --- a/test/hyperfiddle/incseq/items_eager_impl_test.cljc +++ b/test/hyperfiddle/incseq/items_eager_impl_test.cljc @@ -680,6 +680,26 @@ _ (q ::none) _ (t/is (= ::none (q)))])) +(t/deftest orphaned-item-ps-doesnt-step-on-cancel + (let [q (->mq) + _ (q (assoc (d/empty-diff 1) :grow 1 :change {0 :foo})) ; what input will return on transfer + items (spawn-ps q) + [in-step _in-done] (q) + _ (t/is (= :items-step (q))) + diff @items + _ (t/is (= (assoc (d/empty-diff 1) :grow 1) (assoc diff :change {}))) + item0 ((-> diff :change (get 0)) #(q :item0-step) #(q :item0-done)) + _ (t/is (= :item0-step (q))) + _ (t/is (= :foo @item0)) + _ (q (assoc (d/empty-diff 1) :shrink 1)) + _ (in-step) + _ (t/is (= :item0-done (q))) + _ (t/is (= :items-step (q))) + _ (t/is (= (assoc (d/empty-diff 1) :shrink 1) @items)) + _ (item0) + _ (q ::none) + _ (t/is (= ::none (q)))])) + ;; missing tests ;; - double transfer (optional) ;; - item-ps