public function assertNoEvents()
 {
     $this->assertFalse(AsyncToolTest::hasEvents(), "Event is pending");
 }
 public function testAddInner()
 {
     $as = $this->as;
     $as->state()->executed1 = false;
     $as->state()->executed1_1 = false;
     $as->state()->executed1_2 = false;
     $as->state()->executed2 = false;
     $as->add(function (\FutoIn\AsyncSteps $as) {
         $as->state()->executed1 = true;
         $as->add(function (\FutoIn\AsyncSteps $as) {
             $as->state()->executed1_1 = true;
             $as->success("1_1");
         });
         $as->add(function (\FutoIn\AsyncSteps $as, $val) {
             $as->state()->executed1_2 = true;
             $this->assertEquals("1_1", $val);
             $as->success("1_2");
         });
     });
     $as->add(function (\FutoIn\AsyncSteps $as, $val) {
         $as->state()->executed2 = true;
         $this->assertEquals("1_2", $val);
     });
     $as->execute();
     $this->assertTrue($as->state()->executed1, "Step 1 was not executed");
     $this->assertFalse($as->state()->executed1_1, "Step 1_1 was executed");
     $this->assertFalse($as->state()->executed1_2, "Step 1_1 was executed");
     $this->assertFalse($as->state()->executed2, "Step 2 was executed");
     $this->assertTrue(AsyncToolTest::hasEvents(), "Next steps are not scheduled");
     AsyncToolTest::nextEvent();
     $this->assertTrue($as->state()->executed1_1, "Step 1_1 was not executed");
     $this->assertFalse($as->state()->executed1_2, "Step 1_2 was executed");
     $this->assertTrue(AsyncToolTest::hasEvents(), "Next steps are not scheduled");
     AsyncToolTest::nextEvent();
     $this->assertTrue($as->state()->executed1_2, "Step 1_2 was not executed");
     $this->assertFalse($as->state()->executed2, "Step 2 was executed");
     $this->assertTrue(AsyncToolTest::hasEvents(), "Next steps are not scheduled");
     AsyncToolTest::nextEvent();
     $this->assertTrue($as->state()->executed2, "Step 2 was not executed");
     $this->assertNoEvents();
 }