In an async test, calling (done) within a (binding) corrupts bound vars.
The first test passes as expected, and because (done) is outside the binding, foo is reverted to nil. The second test passes, but leaves foo bound. The third test fails.
OS X 10.11.5
⟩ java -version
java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)