|
338 | 338 | #?(:cljs (deftest local-interop-test |
339 | 339 | (is (= 1 (tu/eval* "(let [j #js {:a (fn [] 1)}] (j.a))" nil))))) |
340 | 340 |
|
341 | | -#?(:clj (def type-hint-config {:classes {'java.util.concurrent.Executors java.util.concurrent.Executors 'java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ThreadPoolExecutor 'java.util.concurrent.Callable java.util.concurrent.Callable 'java.util.concurrent.FutureTask java.util.concurrent.FutureTask 'java.lang.Runnable java.lang.Runnable}})) |
| 341 | +#?(:clj (def type-hint-config {:classes {'java.util.concurrent.Executors java.util.concurrent.Executors |
| 342 | + 'java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ThreadPoolExecutor |
| 343 | + 'java.util.concurrent.Callable java.util.concurrent.Callable |
| 344 | + 'java.util.concurrent.FutureTask java.util.concurrent.FutureTask |
| 345 | + 'java.lang.Runnable java.lang.Runnable |
| 346 | + 'java.util.concurrent.ExecutorService java.util.concurrent.ExecutorService} |
| 347 | + :imports {'Runnable 'java.lang.Runnable |
| 348 | + 'Callable 'java.util.concurrent.Callable}})) |
342 | 349 |
|
343 | 350 | #?(:clj |
344 | 351 | (deftest type-hint-test |
|
365 | 372 | (testing "type hinting fn argument with callable returns nil on futuretask get" |
366 | 373 | (is (= 3 (sci/eval-string "(defn fut [^java.util.concurrent.Callable f] (.submit (java.util.concurrent.Executors/newCachedThreadPool) f)) (.get (fut (fn [] 3)))" type-hint-config)))) |
367 | 374 | (testing "type hinting on fn expression as argument with Callable returns nil on futuretask get" |
368 | | - (is (= 3 (sci/eval-string "(def fut (.submit (java.util.concurrent.Executors/newCachedThreadPool) ^java.util.concurrent.Callable (fn [] 3))) (.get fut)" type-hint-config))))) |
| 375 | + (is (= 3 (sci/eval-string "(def fut (.submit (java.util.concurrent.Executors/newCachedThreadPool) ^java.util.concurrent.Callable (fn [] 3))) (.get fut)" type-hint-config)))) |
| 376 | + (testing "similar cases but with qualified interop" |
| 377 | + (is (nil? (sci/eval-string "(def ^java.util.concurrent.ExecutorService thread-pool (java.util.concurrent.Executors/newCachedThreadPool)) |
| 378 | + @(java.util.concurrent.ExecutorService/.submit thread-pool ^Runnable (fn [] 3))" |
| 379 | + type-hint-config))) |
| 380 | + (is (= 3 (sci/eval-string "(def ^java.util.concurrent.ExecutorService thread-pool (java.util.concurrent.Executors/newCachedThreadPool)) |
| 381 | + @(java.util.concurrent.ExecutorService/.submit thread-pool ^Callable (fn [] 3))" |
| 382 | + type-hint-config))))) |
369 | 383 | (testing "type hint on interop argument" |
370 | 384 | ;; this test assumes clojure/core.clj comes from a jar file |
371 | 385 | ;; the test will fail when not processing the type hint on the interop argument |
372 | 386 | (sci/eval-string "(.getJarEntry ^java.net.JarURLConnection (.openConnection resource))" |
373 | 387 | {:bindings {'resource (io/resource "clojure/core.clj")} |
374 | 388 | :classes {'java.net.URL java.net.URL |
375 | | - 'java.net.JarURLConnection java.net.JarURLConnection}})))) |
| 389 | + 'java.net.JarURLConnection java.net.JarURLConnection}})) |
| 390 | +)) |
376 | 391 |
|
377 | 392 | #?(:cljs |
378 | 393 | (deftest issue-987-munged-property-name-test |
|
0 commit comments