-
-
Save darwin/0de5c18d636d2c1db7b07d3500de51a0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns zones.tests.core | |
(:refer-clojure :exclude [binding get set]) | |
(:require [zones.core :refer [default-zone]]) | |
(:require-macros [zones.core :refer [binding bound-fn*]])) | |
; -- helpers ---------------------------------------------------------------------------------------------------------------- | |
(defn default-zone-str [] | |
(pr-str default-zone)) | |
(defn print-default-zone [& args] | |
(apply println (concat args [": " (default-zone-str)]))) | |
; -- T0 --------------------------------------------------------------------------------------------------------------------- | |
(defn test0 [] | |
(print-default-zone "before") | |
(binding [v "I'm a dynamically bound value in default zone"] | |
(print-default-zone "inside") | |
(js/setTimeout (bound-fn* #(print-default-zone "in async call")) 500)) | |
(print-default-zone "after")) | |
; -- T1 --------------------------------------------------------------------------------------------------------------------- | |
(defn async-t1-fn2 [] | |
(print-default-zone "T1 timeout in async-t1-fn2")) | |
(defn async-t1-fn1 [] | |
(print-default-zone "T1 async-t1-fn1 before") | |
(binding [v3 3 | |
v2 42] | |
(print-default-zone "T1 async-fn1 second-level-binding") | |
(js/setTimeout (bound-fn* async-t1-fn2) 500)) | |
(print-default-zone "T1 async-fn1 after")) | |
(defn test1 [] | |
(print-default-zone "T1 before") | |
(binding [v1 1 | |
v2 2] | |
(print-default-zone "T1 inside") | |
(js/setTimeout (bound-fn* async-t1-fn1) 1000)) | |
(print-default-zone "T1 after")) | |
; -- T2 --------------------------------------------------------------------------------------------------------------------- | |
(defn async-t2-fn1 [] | |
(print-default-zone "T2 async-t2-fn1 before set") | |
(set x 100) | |
(print-default-zone "T2 async-t2-fn1 after set")) | |
(defn async-t2-fn2 [] | |
(print-default-zone "T2 async-t2-fn2")) | |
(defn async-t2-fn3 [] | |
(print-default-zone "T2 async-t2-fn3")) | |
(defn async-t2-fn4 [] | |
(print-default-zone "T2 async-t2-fn4")) | |
(defn test2 [] | |
(binding [x 1] | |
(print-default-zone "T2 inside") | |
(js/setTimeout (bound-fn* async-t2-fn1) 200) | |
(js/setTimeout (bound-fn* async-t2-fn2) 400) | |
(binding [x 1000] | |
(js/setTimeout (bound-fn* async-t2-fn3) 300) | |
(js/setTimeout (bound-fn* async-t2-fn4) 600)))) | |
(test0) | |
(js/setTimeout test1 2000) | |
(js/setTimeout test2 4000) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment