From 60f785d9551aa34722b5e0d8e58008a2166be819 Mon Sep 17 00:00:00 2001 From: Shogo Ohta Date: Thu, 7 Nov 2019 09:33:27 +0900 Subject: [PATCH] Support ctor call in thread macros --- src/kitchen_async/promise.cljc | 5 +++- test/common/kitchen_async/promise_test.cljs | 30 +++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/kitchen_async/promise.cljc b/src/kitchen_async/promise.cljc index 4947a37..39d846c 100644 --- a/src/kitchen_async/promise.cljc +++ b/src/kitchen_async/promise.cljc @@ -76,7 +76,10 @@ (kitchen-async.promise/recur ~cond))))) (defn- interop? [form] - (and (symbol? form) (= (nth (name form) 0) \.))) + (and (symbol? form) + (cc/let [n (name form)] + (or (= (first n) \.) ; member access + (= (last n) \.))))) ; ctor call (defmacro -> [x & forms] (if forms diff --git a/test/common/kitchen_async/promise_test.cljs b/test/common/kitchen_async/promise_test.cljs index 58b9961..3dc50bc 100644 --- a/test/common/kitchen_async/promise_test.cljs +++ b/test/common/kitchen_async/promise_test.cljs @@ -174,6 +174,8 @@ (is (= 2 @i)) (done)))))) +(defrecord R [x]) + (deftest ->-test (async done (p/then (p/-> (p/timeout 0 39) @@ -192,6 +194,13 @@ (is (= 42 x)) (done))))) +(deftest ->-with-ctor-call-test + (async done + (p/then (p/-> (p/timeout 0 42) R.) + (fn [r] + (is (= r (->R 42))) + (done))))) + (deftest ->>-test (async done (p/then (p/->> (p/resolve 41) @@ -210,6 +219,13 @@ (is (= 42 x)) (done))))) +(deftest ->>-with-ctor-call-test + (async done + (p/then (p/->> (p/timeout 0 42) R.) + (fn [r] + (is (= r (->R 42))) + (done))))) + (deftest some->-non-nil-test (async done (p/then (p/some-> (p/resolve 43) @@ -238,6 +254,13 @@ (is (= 42 x)) (done))))) +(deftest some->-with-ctor-call-test + (async done + (p/then (p/some-> (p/resolve 42) R.) + (fn [r] + (is (= r (->R 42))) + (done))))) + (deftest some->>-non-nil-test (async done (p/then (p/some->> (p/resolve 1) @@ -266,6 +289,13 @@ (is (= 42 x)) (done))))) +(deftest some->>-with-ctor-call-test + (async done + (p/then (p/some->> (p/resolve 42) R.) + (fn [r] + (is (= r (->R 42))) + (done))))) + (deftest try-success-test (async done (p/then (p/try 42)