Skip to content

Instantly share code, notes, and snippets.

@viebel
Last active August 9, 2016 11:01
Show Gist options
  • Save viebel/ee6f2e662c82edb7070068f1186c9e4d to your computer and use it in GitHub Desktop.
Save viebel/ee6f2e662c82edb7070068f1186c9e4d to your computer and use it in GitHub Desktop.
(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