Last active
August 9, 2016 11:01
-
-
Save viebel/ee6f2e662c82edb7070068f1186c9e4d 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-fn :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) | |
(test1) | |
(test2) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment