| Index: test/GlobalJsObject.cpp | 
| =================================================================== | 
| --- a/test/GlobalJsObject.cpp | 
| +++ b/test/GlobalJsObject.cpp | 
| @@ -16,6 +16,7 @@ | 
| */ | 
|  | 
| #include "BaseJsTest.h" | 
| +#include "JsLatch.h" | 
|  | 
| namespace | 
| { | 
| @@ -26,17 +27,19 @@ | 
|  | 
| TEST_F(GlobalJsObjectTest, SetTimeout) | 
| { | 
| -  jsEngine->Evaluate("setTimeout(function() {foo = 'bar';}, 100)"); | 
| -  ASSERT_TRUE(jsEngine->Evaluate("this.foo")->IsUndefined()); | 
| -  std::this_thread::sleep_for(std::chrono::milliseconds(200)); | 
| +  JsTestingLatch latch(engine, "latch"); | 
| +  jsEngine->Evaluate("setTimeout(function() {foo = 'bar'; latch.Arrive();}, 100)"); | 
| +  ASSERT_TRUE(jsEngine->Evaluate("this.foo")->IsUndefined()); // RACE | 
| +  latch.Wait(); | 
| ASSERT_EQ("bar", jsEngine->Evaluate("this.foo")->AsString()); | 
| } | 
|  | 
| TEST_F(GlobalJsObjectTest, SetTimeoutWithArgs) | 
| { | 
| -  jsEngine->Evaluate("setTimeout(function(s) {foo = s;}, 100, 'foobar')"); | 
| -  ASSERT_TRUE(jsEngine->Evaluate("this.foo")->IsUndefined()); | 
| -  std::this_thread::sleep_for(std::chrono::milliseconds(200)); | 
| +  JsTestingLatch latch(engine, "latch"); | 
| +  jsEngine->Evaluate("setTimeout(function(s) {foo = s; latch.Arrive();}, 100, 'foobar')"); | 
| +  ASSERT_TRUE(jsEngine->Evaluate("this.foo")->IsUndefined()); // RACE | 
| +  latch.Wait(); | 
| ASSERT_EQ("foobar", jsEngine->Evaluate("this.foo")->AsString()); | 
| } | 
|  | 
| @@ -48,9 +51,10 @@ | 
|  | 
| TEST_F(GlobalJsObjectTest, SetMultipleTimeouts) | 
| { | 
| +  JsTestingLatch latch(engine, "latch", 2); // two arrivals | 
| jsEngine->Evaluate("foo = []"); | 
| -  jsEngine->Evaluate("setTimeout(function(s) {foo.push('1');}, 100)"); | 
| -  jsEngine->Evaluate("setTimeout(function(s) {foo.push('2');}, 150)"); | 
| -  std::this_thread::sleep_for(std::chrono::milliseconds(200)); | 
| +  jsEngine->Evaluate("setTimeout(function(s) {foo.push('1'); latch.Arrive();}, 100)"); | 
| +  jsEngine->Evaluate("setTimeout(function(s) {foo.push('2'); latch.Arrive();}, 150)"); | 
| +  latch.Wait(); | 
| ASSERT_EQ("1,2", jsEngine->Evaluate("this.foo")->AsString()); | 
| } | 
|  |